php - feof 错误

php - feof error

提问人:TwixxyKit 提问时间:5/21/2010 最后编辑:user229044TwixxyKit 更新时间:5/21/2010 访问量:1918

问:

我尝试读取的文件是 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");
    }
  }
}
PHP 文件 feof

评论


答:

0赞 Cfreak 5/21/2010 #1

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

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

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

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

0赞 user229044 5/21/2010 #2

您需要检查返回值。该错误指示不包含有效的文件句柄 - 它可能包含 ,失败时返回。$fhandlefalsefopen

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

2赞 Your Common Sense 5/21/2010 #3

了解如何调试代码。

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

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

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

评论

1赞 TwixxyKit 5/21/2010
真?你一定要那么讨厌吗?我假设 fopen 抛出错误,因此我的问题。但是,真的,如果你不能管理文明,就不要回应。生活已经够艰难了,不必与那些无法克制成为屌丝的人打交道。
1赞 Your Common Sense 5/21/2010
所以,不要交易。你也可以忽略我的回答;)
0赞 Your Common Sense 5/21/2010
但是,让我们和平相处。老实说,@TwixxyKit你的案子很奇怪,我急于找出答案。请原谅我的语气,但这是因为你的.听起来有点无知。无论如何。您通过什么方式收到 feof 错误消息?它被印在屏幕上了吗?显示一次吗?这是您运行的实际代码吗?有@符号吗?"I'm not sure if that's the core problem" [so find it out for me]