Изменение режима fopen () в середине? - PullRequest
4 голосов
/ 18 января 2011

Я этот кусок кода:

$file = fopen($path, 'r+');
flock($file, LOCK_EX);
// reading the file into an array and doing some stuff to it
for ($i=0; $i<count($array); $i++)
  {
  fwrite($file, $array[$i]);
  }
flock($file, LOCK_UN);
fclose($file);

В основном я хочу сделать следующее: открыть файл> заблокировать его> прочитать его> сделать что-нибудь> очистить файл > записать в файл> разблокировать его> закрыть

Проблема в очищающей части. Я знаю, что могу сделать это с fopen($file, 'w+'), но тогда чтение будет проблемой. Может быть, я могу изменить mode как-нибудь?

Буду признателен за любую помощь, Пол

Ответы [ 3 ]

5 голосов
/ 18 января 2011

Если вы установите указатель на 0 с помощью fseek, вы можете запустить ftruncate следующим образом:

// reading the file into an array and doing some stuff to it

//1
fseek($handle,0); //Set the pointer to the first byte

//2
ftruncate($handle,filesize("yourfile.ext")); //from the first byte to the last truncate

//3 - File should be empty and still in writing mode.

for ($i=0; $i<count($array); $i++)
{
    fwrite($file, $array[$i]);
}

С ftruncate помните об этих проблемах относительно второго параметра:

0 голосов
/ 18 января 2011

Вы можете иметь отдельную блокировку пустого файла и стек вызовов ($ file, LOCK_EX); на этот файл и откройте другой файл для записи.

0 голосов
/ 18 января 2011
fopen($file, 'r+')

Включает чтение и письмо.Идите вперед и процветайте.

r + описание: открыто для чтения и письма;поместите указатель файла в начало файла.

w + description: Открыть для чтения и записи;поместите указатель файла в начале файла и обрежьте файл до нулевой длины.Если файл не существует, попытайтесь создать его.

Источник: http://php.net/manual/en/function.fopen.php

...