Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#38 used as offset, casting to integer (38) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: fopen()
ТвойWeb » WebMaster класс » PHP/Perl » fopen()

Страниц (2): [1] 2 »
 

1. scar - 21 Августа, 2007 - 09:55:15 - перейти к сообщению
Помогите пожалуйста!

Возник вопрос: Хочется написать код с функцией fopen("./file.txt/","a+"Подмигивание;, так что бы функция писала текст в определенное место файла file.txt.

Например в файле содержутся строки:
Цитата:
А вообще неплохо бы было здесь школу организовать,
а не посылать нас новеньких на... на сайты.
Кстати там тоже ничему хорошему не научат. Скачал кучу книг и уроков
а как начал читать то уснул как в школе. Куда более интересно что нибудь
чужое поковырять или здесь поспрашивать


Через текстовую форму записать например слово "ОТКАЗАНО". Вот так:

Цитата:
А вообще неплохо бы было здесь школу организовать,
а не посылать нас новеньких на... на сайты.
ОТКАЗАНО
Кстати там тоже ничему хорошему не научат. Скачал кучу книг и уроков
а как начал читать то уснул как в школе. Куда более интересно что нибудь
чужое поковырять или здесь поспрашивать


Что нужно вписать между фразами:
Цитата:
А вообще неплохо бы было здесь школу организовать,
а не посылать нас новеньких на... на сайты.

и
Цитата:
Кстати там тоже ничему хорошему не научат. Скачал кучу книг и уроков
а как начал читать то уснул как в школе. Куда более интересно что нибудь
чужое поковырять или здесь поспрашивать
?
2. yura3d - 21 Августа, 2007 - 10:07:50 - перейти к сообщению
scar
А в чём собственно проблема? Можно прочитать файл, вывести его содержимое в форму, а там уже изменить как душе угодно. Напиши подробнее как ты хочешь, постараюсь помочь.
3. TvoyWeb - 21 Августа, 2007 - 10:41:11 - перейти к сообщению
scar пишет:
писала текст в определенное место файла file.txt.

в PHP нет такой возможности дописи в файл без предварительного чтения.
4. scar - 21 Августа, 2007 - 16:15:13 - перейти к сообщению
yura3d

Подойдем с другой стороны! У меня есть PHP файл, в котором написан весь код страницы, мне надо в середину этого кода вставить коментирии через функции fopen(). Как это зделать?

TvoyWeb пишет:
в PHP нет такой возможности дописи в файл без предварительного чтения.


Я знаю. Просто не хотел расписывать весь код! Хорошо
5. yura3d - 22 Августа, 2007 - 01:51:28 - перейти к сообщению
Цитата:
Подойдем с другой стороны! У меня есть PHP файл, в котором написан весь код страницы, мне надо в середину этого кода вставить коментирии через функции fopen(). Как это зделать?


Постараюсь предложить один из возможных вариантов как это сделать. Предположим, у нас есть шаблон page.html, в нём содержится код определённой страницы. Задача наша состоит в том, чтобы обрабатывая данный файл, выводить его содержимое в браузер с добавленными комментариями. Однако нам нужно чётко знать, куда нужно вставлять комментарии. Введём для указания места их вставки обозначение <! -- Комментарии //-->. Вот пример того, как это можно сделать:

CODE:
............<br>
Код страницы<br>
Код страницы<br>
<br>
<!-- Комментарии //--><br>
<br>
Код страницы<br>
Код страницы<br>
............<br>


Теперь осталось написать скрипт, который бы обрабатывал шаблон и заменял обозначение <!-- Комментарии //--> собственно на тексты комменатриев. Вот как должен выглядеть скрипт page.php, который будет обрабатывать шаблон:

CODE:
<?php

$path = 'page.html'; // Путь к файлу с со страницей
$sign = '<!-- Комментарии //-->'; // Метка на странице, куда будем добавлять комментарии
$comments = 'Комментарий1<br>Комментарий2<br>Комментарий3'; // Тексты комментариев

$file = @fopen($path, 'r') or die('Не могу открыть файл');
@flock($file, 1);
$read = @fread($file, filesize($path));
@flock($file, 3);

$read = str_replace($sign, $comments, $read);

echo $read;

fclose($file);
?>


Теперь всякий раз при запуске page.php пользователю будет выдаваться уже обработанная страница с добавленными комментариями из переменной $comments. Сами же комментарии лучше хранить в отдельном файле, считывая их в переменную $comments при открытии данного скрипта.
6. scar - 22 Августа, 2007 - 02:37:54 - перейти к сообщению
yura3d

Спасибо!

Но разве str_replace() не заменяет что-то одно на что-то другое?! Однако И если посудить логически то коментарий можно будет добавить только один раз! Почему? Потому что функция str_replace() заменит строчку "<!-- Комментарии //-->" на строчку "'Комментарий1<br>Комментарий2<br>Комментарий3'" и при повторном открытие файла page.php в нем переменная $sign не найдет указаную строку "<!-- Комментарии //-->" и не сможет записать туда $comments.
7. Furax - 22 Августа, 2007 - 03:24:23 - перейти к сообщению
scar
Считай построчно в массив, в нужное место массива вставь строку и сохрани массив построчно.
8. yura3d - 22 Августа, 2007 - 03:28:17 - перейти к сообщению
Цитата:
Но разве str_replace() не заменяет что-то одно на что-то другое?!


Да, всё верно.

Цитата:
И если посудить логически то коментарий можно будет добавить только один раз! Почему? Потому что функция str_replace() заменит строчку "<!-- Комментарии //-->" на строчку "'Комментарий1<br>Комментарий2<br>Комментарий3'" и при повторном открытие файла page.php в нем переменная $sign не найдет указаную строку "<!-- Комментарии //-->" и не сможет записать туда $comments


Дело в том что у данного скрипта несколько другой принцип работы. Результат выполнения не записывается в файл шаблона, а только выдаётся в браузер пользователя. Таким образом строчка <!-- Комментарии //--> не будет удалена из файла шаблона, и всё будет работать верно. Такой подход имеет целый ряд преимуществ по сравнению с непосредственной записью в файл шаблона. Во-первых, можно будет в будущем изменить дизайн шаблона без ущерба для уже размещённых комментариев, а во-вторых, можно проще реализовать редактирование/удаление комментариев и прочие полезные функции. Подобный подход применяется в ExBB и многих других скриптах.
9. TvoyWeb - 22 Августа, 2007 - 04:04:41 - перейти к сообщению
yura3d
В твоем варианте проще использовать file_get_contents($filename); . Работает быстрее, чем открытие и считывание.
10. yura3d - 22 Августа, 2007 - 04:13:14 - перейти к сообщению
TvoyWeb
Да, действительно. Просто изначально вопрос стоял про фунцкию fopen() вот с неё и начал.

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0458]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33