Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 文件put contents()和flock()错误';可用磁盘空间不足';_Php - Fatal编程技术网

Php 文件put contents()和flock()错误';可用磁盘空间不足';

Php 文件put contents()和flock()错误';可用磁盘空间不足';,php,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);

我运行这个测试脚本

<?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);

问题出在windows中,因为win下的flock()使用阻塞作为“每个文件处理程序”,但在Linux下它是“每个进程”。
因此,在一个脚本中,我有两个fopen()。第一个在LockData()中,第二个在file_put_contents()中,第二个无法将数据写入文件,因为文件处理程序已锁定(在Win下)。

那么,有多少硬盘空间可用?120 GB…只有在我使用LockData()时才会显示此错误。我不知道
LockData()中使用了
file_put_contents()
你确定这就是警告的来源吗?如果我从
WriteData()
ReadData()
中删除
LockData()
函数,所有功能都可以正常工作。。。平台windows 7,在Linux上都可以正常工作。。。