php - feof错误

时间:2010-05-20 16:49:32

标签: php file feof

我正在尝试读取的文件是pgp加密文件。这是解密它的过程的一部分,我实际上是尝试将内容读入字符串,以便我可以解密它。我不确定这是否是核心问题,但我收到了一个错误:

Warning: feof(): supplied argument is not a valid stream resource

这是文件代码:

if($handle = opendir($dir)) {
  while( false !== ($file = readdir($handle))) {
    if($file != "." && $file != "..") {
      $fhandle = fopen($file, "r");
      $encrypted = '';
      $filename = explode('.',$file);
      while(!feof($fhandle)) {
        $encrypted .= fread($fhandle, filesize($file));
      }
      fclose($fhandle);
      $decrypted = $filename[0].'.txt';
      shell_exec("echo $passphrase | $gpg --passphrase-fd 0 -o $decrypted -d $encrypted");
    }
  }
}

3 个答案:

答案 0 :(得分:2)

学习调试代码。

supplied argument is not a valid stream resource表示传递的变量包含意外值。因此,我们可以做出逻辑结论,返回此变量的函数失败。 所以。我们必须检查fopen($file, "r");是什么让它失败了?可能我们可以检查一个文件是否存在?等等。

这称为调试,没有它就无法编程。

虽然看起来很奇怪。 因为fopen也应该抛出错误。

答案 1 :(得分:0)

您应该检查fopen调用以确保您的文件实际上已被打开。检查它的返回值。

至于修复它你工作目录可能与$ dir不同。你可能需要

fopen("$dir/$file","r"); 

除非您先更改目录。 编辑澄清了代码示例是问题的可能解决方案,而不是检查返回值的代码。

答案 2 :(得分:0)

您需要检查返回值。该错误表明$fhandle不包含有效的文件句柄 - 它可能包含falsefopen在失败时返回。

请参阅http://ca.php.net/manual/en/function.fopen.php