我正在尝试读取的文件是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");
}
}
}
答案 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
不包含有效的文件句柄 - 它可能包含false
,fopen
在失败时返回。