为什么函数文件返回空数组?

时间:2010-12-11 22:22:10

标签: php arrays file

Done
<?php
    define('FILE_NAME', 'list.dat');
    define('MAX_BREAK', 30);

    function write($file, $ip, $time)
    {
        fwrite($file, $ip . '|' . $time . "\n");
    }

    $new_ip = /*$REMOTE_ADDR*/ $_SERVER['REMOTE_ADDR'];
    $file = fopen(FILE_NAME, 'w+');
    flock($file, LOCK_EX | LOCK_SH);

    $array = file(FILE_NAME, FILE_IGNORE_NEW_LINES);
    $contains = false;
    foreach ($array as $record)
    {
        $values = explode('|', $record);
        $ip = $values[0];
        $time = $values[1];
        if ($ip == $new_ip)
        {
            $time = time();
            $contains = true;
        }
        if (time() - $time < MAX_BREAK)
            write($file, $ip, $time);
    }
    if (!$contains)
        write($file, $new_ip, time());

    flock($file, LOCK_UN);
    fclose($file);
?>

$ array为空,但不应该因为文件包含一行。 有什么想法吗?

3 个答案:

答案 0 :(得分:2)

因为list.dat为空。

fopen with w+

  

'w +'开放阅读和写作;将文件指针放在文件的开头,并将文件截断为零长度。如果该文件不存在,请尝试创建它。

答案 1 :(得分:1)

如果file命令返回false,则表示file()失败。我认为它可能会失败,因为你已经将它与你的flock()调用锁定了。 file()函数不需要以fopen()开头。

答案 2 :(得分:1)

使用flock()获取文件的独占锁定,之后您想要阅读它。这不起作用。共享锁可能就足够了(没有人可以在锁定时更改文件)。

flock($file, LOCK_EX | LOCK_SH);

变为

flock($file, LOCK_SH);