php - ошибка feof - PullRequest
       17

php - ошибка feof

0 голосов
/ 20 мая 2010

Файл, который я пытаюсь прочитать, является 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 ]

2 голосов
/ 20 мая 2010

Научитесь отлаживать ваш код.

supplied argument is not a valid stream resource означает, что переданная переменная содержит неожиданное значение.Таким образом, мы можем сделать логический вывод , что функция, возвращающая эту переменную, потерпела неудачу.Так.мы должны проверить fopen($file, "r"); что делает его неудачным?Может быть, мы можем проверить, существует ли файл?И т. Д.

Это называется отладкой, и вы не можете программировать без нее.

Хотя это кажется очень странным.Потому что fopen также должен выдавать ошибку.

0 голосов
/ 20 мая 2010

Вам необходимо проверить ваши возвращаемые значения. Ошибка указывает, что $fhandle не содержит действительный дескриптор файла - возможно, он содержит false, который fopen возвращает при ошибке.

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

0 голосов
/ 20 мая 2010

Вы должны проверить вызов fopen, чтобы убедиться, что ваш файл действительно открыт. Проверьте возвращаемое значение.

Что касается исправления, ваш рабочий каталог, вероятно, отличается от $ dir. Вам, вероятно, нужно

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

, если вы сначала не перейдете в каталог. edit уточнил, что пример кода является возможным решением проблемы, а не код для проверки возвращаемого значения.

...