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

Форум PHP

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

 

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

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

тема: Файловый указатель в начало
 
 автор: Ванек2010   (04.03.2012 в 10:48)   письмо автору
 
 

Почему не удается установить файловый указатель в начало?

 <?php 
    
        
# Название файла
        
$filename 'test.txt';
        
        
# Получаем дескриптор
        
$fd fopen($filename'a+');
        if (!
$fd) die('Файл '.$filename.' открыть не удалось');
        
        
# Устанавливаем файловый указатель в начало
        
rewind($fd);
        
        
# Записываем новую строку
        
fwrite($fd'Текущее время: '.date('H:i:s')." \r\n");
        
        
# Закрываем файл
        
fclose($fd);
        
    

    
?>

  Ответить  
 
 автор: cheops   (04.03.2012 в 14:16)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 10:48)
 

Лучше отказаться от режима "a" в пользу режима "w".

  Ответить  
 
 автор: Ванек2010   (04.03.2012 в 14:42)   письмо автору
 
   для: cheops   (04.03.2012 в 14:16)
 

w очищает файл, мне подходит только a+, с такими параметрами
чтение - да,
запись - да,
очистка - нет,
создать если нету - да,
ошибка если есть -нет

  Ответить  
 
 автор: Ванек2010   (04.03.2012 в 16:56)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 14:42)
 

Так что? Поможет кто разобраться, почему в книге одно написано, а на деле другое выходит.
Еще заметил, в книге написано, что режим r и r+ не должны очищать файл, но он его очищает.

  Ответить  
 
 автор: Valick   (04.03.2012 в 17:02)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 16:56)
 

посмотрите тему http://softtime.ru/forum/read.php?id_forum=1&id_theme=44056
у вас все на локалке крутится или на хостинге у дяди?

  Ответить  
 
 автор: Ванек2010   (04.03.2012 в 17:08)   письмо автору
 
   для: Valick   (04.03.2012 в 17:02)
 

На локалке все. Права на запись есть, записывает.

  Ответить  
 
 автор: Valick   (04.03.2012 в 17:11)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 17:08)
 

должно все работать и так как сказано в книге
и не забывайте про блокировки, раз уж решились на работу с файлами

  Ответить  
 
 автор: Ванек2010   (04.03.2012 в 22:03)   письмо автору
 
   для: Valick   (04.03.2012 в 17:11)
 

Эм что за блокировки? Не работает. Надеюсь на хосте такого не будет, но надо бы на локалке протестить

  Ответить  
 
 автор: Valick   (04.03.2012 в 22:05)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 22:03)
 

вы по ссылке ходили? там код с комментариями

  Ответить  
 
 автор: Ванек2010   (13.03.2012 в 23:40)   письмо автору
 
   для: Valick   (04.03.2012 в 22:05)
 

Не помогло! У кого мысли есть по решению

  Ответить  
 
 автор: Valick   (13.03.2012 в 23:54)   письмо автору
 
   для: Ванек2010   (13.03.2012 в 23:40)
 

у вас Денвер?

  Ответить  
 
 автор: Ванек2010   (14.03.2012 в 01:21)   письмо автору
 
   для: Valick   (13.03.2012 в 23:54)
 

VDS

  Ответить  
 
 автор: Jackson   (13.03.2012 в 23:57)   письмо автору
 
   для: Ванек2010   (13.03.2012 в 23:40)
 

как вариант - считать содержимое в массив, потом открыть в режиме w, вписать сначала строку, а потом и содержимое массива

  Ответить  
 
 автор: Jackson   (14.03.2012 в 00:16)   письмо автору
 
   для: Ванек2010   (13.03.2012 в 23:40)
 

лови
<?php  

$filename 
'test.txt'
$cont=file($filename);    // считываем содержимое в массив 
for($i=0$i count($cont); $i++)
$f=fopen($filename,"w");  // открываем файл на ПЕРЕЗАПИСЬ 
flock($f,LOCK_EX);        // Говорим, что дальше будем работать только мы
fputs($f,'Текущее время: '.date('H:i:s')." \r\n"); //  вносим данные
fflush($f);               // Сбрасываем файловый буфер 
flock($f,LOCK_UN);        // Отключаемся от блокировки 
fclose($f);               // Закрываем файл 
$f=fopen($filename,"a+"); // открываем на дозапись (в конец файла)
flock($f,LOCK_EX);
for(
$i=0$i count($cont); $i++) // вносим все данные, которые были ранее 
fputs($f,$cont[$i]);
fflush($f);
flock($f,LOCK_UN);
fclose($f); 
         
?>

  Ответить  
 
 автор: Ванек2010   (14.03.2012 в 01:24)   письмо автору
 
   для: Jackson   (14.03.2012 в 00:16)
 

Режим W не подходит, т.к. он затерает уже имеющийся.
Странно, почему в этой книге http://www.softtime.ru/php5/?id_article=117 не сказано, о том, что функцию rewind() нельзя будет применить к режиму a
И возможно ли добавлять новую строку в начало блокнота, но с помощью другой функции?

  Ответить  
 
 автор: Jackson   (14.03.2012 в 01:35)   письмо автору
 
   для: Ванек2010   (14.03.2012 в 01:24)
 

в предыдущем посте глупость написал - там пятую строчку (обход цыкла for'ом, это было для других целей) удалить надо
в книге должно написано быть про режим "а" - что данные записываются в конец файла
и я ничего умнее не придумал как вставлять строку в начало файла :) может еще кто что скажет

  Ответить  
 
 автор: Jackson   (14.03.2012 в 00:00)   письмо автору
 
   для: Ванек2010   (04.03.2012 в 16:56)
 

а режим "а" изначально определен для записи в КОНЕЦ файла, независимо от положения курсора

  Ответить  
Rambler's Top100
вверх

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