php中的fgetc()feof()参数错误
今天我收到我的web服务器管理员发来的电子邮件,邮件中说“由于大约60 GB的错误文件,您的服务被暂停。请通过FTP检查errorlog.txt。”在日志文件中,只有这两行重复:php中的fgetc()feof()参数错误,php,file-io,fgetc,feof,Php,File Io,Fgetc,Feof,今天我收到我的web服务器管理员发来的电子邮件,邮件中说“由于大约60 GB的错误文件,您的服务被暂停。请通过FTP检查errorlog.txt。”在日志文件中,只有这两行重复: [Tue Apr 04 08:45:52 2017] [error] [client xxx.xxx.xxx.xxx] PHP Warning: feof() expects parameter 1 to be resource, boolean given in /var/www/vhosts/.../httpd
[Tue Apr 04 08:45:52 2017] [error] [client xxx.xxx.xxx.xxx] PHP Warning: feof() expects parameter 1 to be resource, boolean given in /var/www/vhosts/.../httpdocs/dene.php on line 11
[Tue Apr 04 08:45:52 2017] [error] [client xxx.xxx.xxx.xxx] PHP Warning: fgetc() expects parameter 1 to be resource, boolean given in /var/www/vhosts/.../httpdocs/dene.php on line 13
以下是相关代码段:
<?
header("X-XSS-Protection: 0");
$filename= $_GET['filename'];
$code = $_POST['code'];
if (isset($filename))
{
$go = $filename;
$full = "docs/$filename.htm";
$filename = @fopen($full , 'r');
$file_size = filesize($full);
while (! feof($filename)) //line 11
{
$char = fgetc ($filename); //line13
$code .= "$char";
}
fclose($filename);
}
$code = str_replace("\\", "", $code);
$code = str_replace(">", ">", $code);
$code = str_replace("=", "=", $code);
$code = str_replace("<", "<", $code);
printf("%s",$code);
?>
之所以出现这些错误,是因为在feof
和fgetc
中没有将有效资源作为参数传递。您应该确保正在传入有效的文件指针:
$filename = @fopen($full , 'r');
你应该确保:
您试图打开的文件存在
而且它有正确的权限。(如果需要,chmod 775)
如果上述任一操作失败,$filename将返回false
。您还可以改进代码逻辑以处理此错误情况,如下所示:
$filename = @fopen( $full, 'r' );
// Make sure we have a valid file resource
if ( $filename ) {
$file_size = filesize( $full );
while ( ! feof( $filename ) )
{
$char = fgetc( $filename );
$code .= "$char";
}
fclose( $filename );
} else {
// Not a valid file resource
die( "This file resource could not be open." );
}
注意:$filename
实际上不是正确的变量名,您应该将其重命名为$filePointer
或$fp
您会收到这些错误,因为您没有在feof
和fgetc
中作为参数传递有效的资源。您应该确保正在传入有效的文件指针:
$filename = @fopen($full , 'r');
你应该确保:
您试图打开的文件存在
而且它有正确的权限。(如果需要,chmod 775)
如果上述任一操作失败,$filename将返回false
。您还可以改进代码逻辑以处理此错误情况,如下所示:
$filename = @fopen( $full, 'r' );
// Make sure we have a valid file resource
if ( $filename ) {
$file_size = filesize( $full );
while ( ! feof( $filename ) )
{
$char = fgetc( $filename );
$code .= "$char";
}
fclose( $filename );
} else {
// Not a valid file resource
die( "This file resource could not be open." );
}
注意:$filename
实际上不是正确的变量名,您应该将其重命名为$filePointer
或$fp
您需要检查fopen
结果
$resource = @fopen($filename , 'r');
if ( $resource ) {
while (! feof($resource))
{
...
}
}
从:
您需要检查fopen
结果
$resource = @fopen($filename , 'r');
if ( $resource ) {
while (! feof($resource))
{
...
}
}
从: