Загрузка строк файла в массив ПОСЛЕ открытия и блокировки файла (PHP) - PullRequest
1 голос
/ 26 октября 2011

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

Например:

$handle = fopen("file", "r+");
flock($handle, LOCK_EX);
$array = load_lines($handle);   <- need this
// compute on the array
fwrite($handle, $array);
flock($handle, LOCK_UN):
fclose($handle);

Необходимая причинаэто потому, что в настоящее время я использую функцию file (), чтобы получить содержимое файла и поместить его в массив.Тем не менее, мне нужно включить блокировку файлов в мой дизайн, и я надеюсь, что мне не придется слишком сильно ее менять (это в настоящее время основано на массивах).Есть ли простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 26 октября 2011

На php <5.3, или если вы решите с помощью LOCK_NB, блокировки файлов в php рекомендуются. То есть вы должны сами проверить блокировку ... они на самом деле не мешают вам обновить файл. Это будет делать: </p>

$fh = fopen(__FILE__, 'r+');
if (flock($fh, LOCK_EX)) {
   $array = file(__FILE__);
   fwrite($fh, implode($array));
   flock($fh, LOCK_UN);
   flcose($fh);
}
else {
   echo "Could not acquire the lock!"
}

Я также проверил это в php 5.3. Кажется, что file() игнорирует блокировку.

0 голосов
/ 26 октября 2011

Попробуйте это:

function load_lines($handle)
{
    $array = array();

    while(!feof($handle)
    {
        $array[] = fgets($handle);
    }

    return $array;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...