我正在尝试写入文件,然后从同一文件中读取数据。但有时我遇到这个问题,文件读取过程即使在文件写入完成之前就开始了。我该如何解决这个问题?如何在继续前进之前完成文件编写过程?
//写入文件
$string= <12 kb of specific data which i need>;
$filename.="/ttc/";
$filename.="datasave.html";
if($fp = fopen($filename, 'w'))
{
fwrite($fp, $string);
fclose($fp);
}
//写入文件
$handle = fopen($filename, "r") ;
$datatnc = fread($handle, filesize($filename));
$datatnc = addslashes($datatnc);
fclose($handle);
答案 0 :(得分:1)
我已经提到了解决方案的URL。我实现了同样的。如果您希望我复制该链接中的文本,那么它是:
$file = fopen("test.txt","w+");
// exclusive lock
if (flock($file,LOCK_EX))
{
fwrite($file,"Write something");
// release lock
flock($file,LOCK_UN);
}
else
{
echo "Error locking file!";
}
fclose($file);
答案 1 :(得分:0)
写入后使用fclose
关闭文件指针,然后再次fopen
打开它。
答案 2 :(得分:0)
它不起作用的原因是,当您完成向文件中写入字符串后,文件指针指向文件的末尾,因此稍后当您尝试使用相同的文件指针读取相同的文件时,就再也没有了阅读。您要做的就是将指针倒退到文件的开头。这是一个示例:
<?php
$fileName = 'test_file';
$savePath = "tmp/tests/" . $fileName;
//create file pointer handle
$fp = fopen($savePath, 'r+');
fwrite($fp, "Writing and Reading with same fopen handle!");
//Now rewind file pointer to start reading
rewind($fp);
//this will output "Writing and Reading with same fopen handle!"
echo fread($fp, filesize($savePath));
fclose($fp);
?>
有关rewind()方法http://php.net/manual/en/function.rewind.php
的更多信息,