file_put_contents()和flock()错误'超出可用磁盘空间'

时间:2016-03-09 17:09:16

标签: php

我运行此测试脚本

<?php
function LockData($file,$locker=LOCK_EX){
    static $streams=array();
    $md=md5($file);

    if(empty($streams[$md])){
        $streams[$md]=fopen($file,'a+');
    }
    $i=0;
    do{
        $lock=flock($streams[$md],$locker);
    }while(!$lock && ++$i<=3);

    return $lock;
}

function ReadData($file){
    if(is_file($file)){
        $lock=LockData($file);
        if(!$lock) return false;

        $data=@file_get_contents($file);

        if(!empty($data)){
            return unserialize(str_replace('<?die;?>',"",$data));
        }
    }
    return false;
}

function WriteData($file,$data){
    file_put_contents($file,'<?die;?>'.serialize($data));

    LockData($file,LOCK_UN);
}

$fp=ReadData($file="test.txt");

if(!$fp)$fp=array();
print_r($fp);
$fp[]="2";
WriteData($file,$fp);

如果我使用LockData()函数,我有一个错误&#34;警告:file_put_contents()[function.file-put-contents]:写入26个字节中只有0个,可能超出可用磁盘空间&#34 ; 不明白这一点......

1 个答案:

答案 0 :(得分:0)

problam是在windows中,因为win下的flock()使用阻塞作为&#34;每个文件处理程序&#34;,但在Linux下它起作用&#34;每个进程&#34;。 所以,在一个脚本中我有两个fopen()。首先是LockData(),第二个是file_put_contents(),第二个不能将数据写入文件,因为文件处理程序被锁定(在Win下)。