打开并锁定文件后,将文件行加载到数组中(PHP)


Load file lines into an array AFTER the file is open and locked (PHP)

是否有一种快速的方法可以将文件的每一行加载到已经打开的文件数组中?

例如:

$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()函数来获取文件的内容并将它们放入数组中。然而,我需要将文件锁定纳入我的设计,我希望不必改变它太多(它是当前基于数组的)。有简单的方法吗?

在php <5.3中,或者如果您选择使用LOCK_NB,则建议使用php中的文件锁。也就是说,你必须自己测试锁。它们实际上并不阻止您更新文件。

$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()忽略了锁

试试这个:

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