这个函数在我的服务器上造成了很大的麻烦,因为它处于循环中:
function loadFiles()
{
$email = $_POST["emailp"];
$file_handle = fopen("/tmpphp/dmbigmail.file", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
if(stristr($line,$email)){
$show = trim(str_replace($email,' ',$line));
//echo $show;
$parsedata = substr($show,0,11);
$parselink = substr($show,10);
$total = $parsedata.'<a href=' . $parselink. ">$parselink</a><br>";
echo $total;
}
}
fclose($file_handle);
}
在我的日志中我可以看到: “PHP警告:fgets()期望参数1是资源,在第42行的/path/file.php中给出布尔值”
感兴趣的一行是:
$line = fgets($file_handle);
功能还可以,但我不知道为什么要给我这个奇怪的错误。
答案 0 :(得分:4)
因为$file_handle
是布尔false
(您可以使用var_dump
检查),而fopen
调用失败则会发生这种情况。
fopen
成功时返回文件指针资源,错误时返回FALSE。
答案 1 :(得分:2)
试试这个:
$file_handle = @fopen("/tmpphp/dmbigmail.file", "r");
if ($file_handle) {
while (($line = fgets($file_handle, 4096)) !== false) {
if(stristr($line,$email)){
$show = trim(str_replace($email,' ',$line));
//echo $show;
$parsedata = substr($show,0,11);
$parselink = substr($show,10);
$total = $parsedata.'<a href=' . $parselink. ">$parselink</a><br>";
echo $total;
}
}
if (!feof($file_handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($file_handle);
}
答案 2 :(得分:1)
嗯,在尝试打开文件之前,为保护代码,只需要很少的建议就可以执行此测试:
$filepath = "/tmpphp/dmbigmail.file";
if (!file_exists($filepath) || !is_file($filepath)) {
echo "$filepath not found or it is not a file."; exit; //return; //die();
}
if ($file_handle = fopen($filepath, "r")) {
....etc.
答案 3 :(得分:0)
可能fopen失败是因为您没有该文件的权限,或者您错过了匹配路径。
但是你要循环到fgets();这意味着没有文件结束。
尝试放$line = fgets($file_handle,4096);
并查看它是否有效。