2016-06-01 3 views
0

Я получаю сообщение об ошибке. Я пытаюсь прочитать вложение. Он отлично работает в большинстве файлов, но по немногим я получаю эту ошибку. Файлы имеют тот же формат, и местоположение, которое он пытается прочитать, является правильным. Я тестировал его на проводнике Windows. Это путь я читаю это:Ошибка чтения файла PHP

 header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename="' . $filename .'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($attachment_location)); 
     ob_clean(); 
     flush(); 
     readfile($attachment_location);  
     exit(); 

Это ошибка я получаю

Предупреждение: readfile(C:\Users\Public\asdgasd\4sf3\Suppliers\saf342\Files\Revit\2016\Seinätikas.rfa): failed to open stream: No such file or directory in C:\xampp\htdocs\web\downloadattachment.php on line 58

+0

В нем четко сказано, что такого файла в вашей файловой системе нет. Проверьте это перед вызовом readfile(), если такой файл существует. – Alex

+0

Я проверил его, и он существует. – Earl

+0

Нет, я хотел, чтобы вы сделали что-то вроде этого: var_dump (file_exists ($ attachment_location)); Это скажет вам, видит ли php этот файл или нет. – Alex

ответ

1

Как ссылки на Johndodo, вам нужно убедиться, что PHP работает с правильным набором внутренних символов и кодировкой, чтобы он распознавал способ хранения файла в структуре вашего (окна) каталога. Посмотрите, что character set your windows system is using, а затем используйте тот же набор символов для PHP internal encoding.

Edit:

процесс Logic будет:

  • Открыть ссылку на файл с электронной почтой и convert the filename$var в правильную кодировку.
  • Выполните проверку file_exists
  • Приступить к передать $var функции readfile, чтобы открыть.
0

могли бы вы предоставить содержание $ файла и $ attachment_location.

Не могли бы вы расширить свой код с этим:

if (file_exists($file)) { 
Your code goes here 
.... 
exit(); 
} 

Дальнейшие вещи, чтобы проверить: Является ли файл для чтения пользователем веб-сервера (если вы используете websever). Возникает ли проблема с файлами, в которых есть особые символы в имени файла?

0

Чтобы проверить, существует ли файл в вашей файловой системе, вы должны поместить контрольную сумму.

if (!file_exists($filePath)) { 

    // Throw an exception or do something for alert the wrong path. 
    throw new Exception('File with this path is not available.'); 

} else { 

    // Do your amazing stuff here 

} 
+0

Если вы прочтете комментарии к вопросу, вы увидите, что OP уже сделал это. – Martin

Смежные вопросы