Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Редактирование текстового файла
 
 автор: Hemp   (12.10.2004 в 12:21)   письмо автору
 
 

1. Есть текстовый файл f\info.txt с записью какого-либо текста (пара десятков слов), например:

Грузите яблоки лопатой...


2. Файл f\info.txt подключается на нужной страничке (например index.php), в нужном месте с помощью функции include( ):
<?include('f/info.txt');?>


3. Мне необходимо, периодически изменять содержимое файла f\info.txt.

4. Что, я для этого делаю? Сначала, вывожу, содержимое текстового файла f\info.txt в форму при помощи файла adm1.php:
<?php
 $fil
="f\info.txt";
//проверяю существование файла
 
if(!file_exists($fil))
 {
// если, файл не существует, то создаю его
  
$fp=fopen($fil,"w");
  
  
fclose($fp);
 }
 else{
// иначе, если, файл существует, то записываю всё содержимое в переменную $a
   
$a=file_get_contents("f\info.txt");
      }
 
?>
//Вывожу в форму значение переменной $a
 <form action=1w.php method=post>
 <textarea type=text rows=20 cols=80 name='a' value="<?php echo $a;?>" ></textarea>
 <input type="submit" value="Записать">
 </form>

После, чего, значение переменной $a, передаётся методом POST, скрипту в файле 1w.php:
<?php
// Переменной $d присваиваю значение. переданные из формы
$d=$_POST['a'];
// Для проверочки вывожу значение переменной $d
echo $d;
// Открываю файл f\info.txt
$fil="f\info.txt";
$fp=fopen($fil,'w');
// Записываю в файл f\info.txt переменную $d
fwrite($fp,$d);
fclose($fp);
echo 
"<a href=adm1.php>Редактировать</a>";
?>


5. Результат. Данные из файла получаю в форму, редактирую, записываю обратно в файл f\info.txt.
В файле index.php отображаются изменённые данные.

6. Проблема.
Нажимаю на ссылочку "Редактировать" и возвращаюсь к файлику adm1.php. Форма пустая. Хотя, в f\info.txt записаны изменённые данные.
Почему?
В форму не выводятся данные из переменной $a.
Хочу понять почему, так происходит?
Как мне этого добиться?

   
 
 автор: cheops   (12.10.2004 в 12:41)   письмо автору
 
   для: Hemp   (12.10.2004 в 12:21)
 

Вместо
<textarea type=text rows=20 cols=80 name='a' value="<?php echo $a;?>" ></textarea>

следует писать
<textarea type=text rows=20 cols=80 name='a'><?php echo $a;?></textarea>

   
 
 автор: Hemp   (12.10.2004 в 13:16)   письмо автору
 
   для: cheops   (12.10.2004 в 12:41)
 

cheops
Спасибо!!!
Всё заработало.
Ещё, вопрос.
А, можно, то же самое (то, что, я написал выше), организовать, как-нибудь по другому (другой подход)?

   
 
 автор: cheops   (12.10.2004 в 14:15)   письмо автору
 
   для: Hemp   (12.10.2004 в 13:16)
 

Принципиально по другому можно организовать с использованием базы данных, но в данном случае это не оправдано, так Web-приложение получается менее устойчиво, появляется зависимость не только от Web-сервера, но и ещё от сервера базы данных, а возможности, которые может предоставить база данных не требуются (Ситуация меняется, если вместо одного текстового файла у вас их 100 - тогда удобнее хранить их содержиоме в таблице).
Кроме того, при включении текстового файла при помощи include проверяется его разбор как PHP-скрипта, на что тратится время, обычный вывод в окно браузера с использованием file_get_contents() будет работать быстрее и создавать меньшую нагрузку на сервер.

   
 
 автор: Hemp   (13.10.2004 в 10:11)   письмо автору
 
   для: cheops   (12.10.2004 в 14:15)
 

Ещё проблема возникла...
_____________________________
Вот, как, на данный момент выглядят файлы.
adm1.php:
<?php
 $fil
="f/info.txt";
 if(!
file_exists($fil))
 {
  
$fp=fopen($fil,"w");
  
  
fclose($fp);
 }
 else{
   
$a=file_get_contents("f/info.txt");
    } 
 
?>
  <form action=1w.php method=post>
 <textarea type=text rows=20 cols=80 name='a'><?php echo $a;?></textarea><br>
 <input type="submit" value="Сохранить">
 </form> 

w1.php:
<?php
$d
=$_POST['a'];
echo 
$d;
$fil="f/info.txt";
$fp=fopen($fil,"w");
fwrite($fp,$d);
fclose($fp);
echo 
"<hr><hr><p><a href=adm1.php>Редактировать</a>";
?>

У меня установлен Денвер-2. Версия PHP 4.3.6.
На сайте PHP v. 4.3.8.
На локальном сервере (Денвер-2, W2000) всё работает на ура.
Когда же, эти файлы сбрасываю на свой сайт, то получается следующее:

1.В форме (adm1.php) выводится содержимое файлаf/info.txt для редактирования.

2. Редактирую, нажимаю кнопку "Сохранить". Отредактированные данные передаются скрипту (w1.php) отображаются, в этом файле в отредактированной форме, нажимаю ссылку "Редактировать", выходит форма (adm1.php) с изначальными данными, т.е. отредактировать их не получилось.

3. В текстовом файле f/info.txt изменений нет.

Получается, что:
1. Из текстового файла, я могу прочитать информацию и внести её в переменную $a.
2. Переменная $a методом POST успешно передается скрипту.
3. Не удаётся перезаписать текстовый файл.
4. Изменяю adm1.php:
<?php
 $fil
="f/info222.txt";
 if(!
file_exists($fil))
 {
  
$fp=fopen($fil,"w");
  
  
fclose($fp);
 }

В Денвере-2 создаётся текстовый файл по указанному пути. а, на сайте этого не происходит. Это и является причиной неработоспособности.
Теперь вопрос -- почему?
Что, я делаю не так?

   
 
 автор: Crux   (13.10.2004 в 10:22)   письмо автору
 
   для: Hemp   (13.10.2004 в 10:11)
 

скорее всего на файл info.txt нет разрешения на "запись", только на "чтение".
измени атрибуты

   
 
 автор: cheops   (13.10.2004 в 11:05)   письмо автору
 
   для: Hemp   (13.10.2004 в 10:11)
 

А у скрипта есть права на запись в директории, где создаётся файл?

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=340

   
 
 автор: Hemp   (14.10.2004 в 08:37)   письмо автору
 
   для: cheops   (13.10.2004 в 11:05)
 

Всё работает.
Причина -- в правах доступа.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования