php中的fgetc()feof()参数错误

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

今天我收到我的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/.../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("&gt;", ">", $code);
$code = str_replace("&#61;", "=", $code);
$code = str_replace("&lt;", "<", $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))
       {
         ...
       }
    }
    
    从: