-1

我要读取的文件是 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");
    }
  }
}
4

3 回答 3

2

学习调试你的代码。

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

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

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

于 2010-05-20T16:56:23.093 回答
0

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

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

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

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

于 2010-05-20T16:53:19.907 回答
0

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

http://ca.php.net/manual/en/function.fopen.php

于 2010-05-20T16:54:20.277 回答