【发布时间】:2016-03-09 17:09:15
【问题描述】:
我运行这个测试脚本
<?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() 函数,则会出现错误“警告:file_put_contents() [function.file-put-contents]:仅写入 26 个字节中的 0 个,可能已用完可用磁盘空间” 不明白这个...
【问题讨论】:
-
那么,有多少可用硬盘空间?
-
120 GB...而且只有当我使用 LockData()/flock 时才会显示此错误
-
我没有看到
file_put_contents()在LockData()中的使用位置,您确定这是警告的来源吗? -
如果我从
WriteData()和ReadData()中删除LockData()函数,一切正常...平台windows 7,在Linux 上一切正常...
标签: php