Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Скачивание файлов с серва
Форумы портала PHP.SU » » HTTP и PHP » Скачивание файлов с серва

Страниц (1): [1]
 

1. modelfak - 09 Декабря, 2014 - 20:04:21 - перейти к сообщению
Здраствуйте подскажите как реализовать скачивание файла правильно.
Используемый мной код скачивает файл docx и внутри него не реальный текст а весь html документ страници на которой скачивается файл ((( если другой тип файла то то всеравно ошибка
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. if(isset($_GET['file']) and preg_match("/^[a-zA-Z0-9_\.\/\-]{0,50}\.(xml|txt|pdf|png|gif|jpg|jpeg|exe|doc|docx|xls|ppt|zip|)$/",$_GET['file']))
  5.                 {
  6.                
  7.                   $extension = strtolower(substr(strrchr($_GET['file'],"."),1));
  8.                   switch ($extension) {
  9.                         case "txt": $ctype="text/plain"; $type = 'txt'; break;
  10.                         case "pdf": $ctype="application/pdf"; $type = 'pdf'; break;
  11.                         case "exe": $ctype="application/octet-stream"; $type = 'exe'; break;
  12.                         case "zip": $ctype="application/zip"; $type = 'zip'; break;
  13.                         case "rar": $ctype="application/rar"; $type = 'rar'; break;
  14.                         case "doc": $ctype="application/msword"; $type = 'doc'; break;
  15.                         case "docx": $ctype="application/msword"; $type = 'docx'; break;
  16.                         case "xls": $ctype="application/vnd.ms-excel"; $type = 'xls'; break;
  17.                         case "ppt": $ctype="application/vnd.ms-powerpoint"; $type = 'ppt'; break;
  18.                         case "gif": $ctype="image/gif"; $type = 'gif'; break;
  19.                         case "png": $ctype="image/png"; $type = 'png'; break;
  20.                         case "jpeg": $ctype="image/jpg"; $type = 'jpeg'; break;
  21.                         case "jpg": $ctype="image/jpg"; $type = 'jpg'; break;
  22.                         default: $ctype="application/force-download";
  23.                         }
  24.                         header('Content-type: '.$ctype);
  25.                         header('Content-Disposition: attachment; filename="document.'.$type.'"');
  26. if(file_exists(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file'])){
  27.                                 //readfile(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file']);
  28.                                 echo file_get_contents(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file']);
  29.                          }
  30.  
2. Panoptik - 09 Декабря, 2014 - 20:13:08 - перейти к сообщению
ну так вы для начала посмотрите что вам выдается из этого.
PHP:
скопировать код в буфер обмена
  1. file_get_contents(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file']);

уверен что там вызывается какая-то ошибка и поэтому вам возвращается разметка с ошибкой вместо нужного содержимого
3. modelfak - 09 Декабря, 2014 - 20:23:13 - перейти к сообщению
Panoptik пишет:
ну так вы для начала посмотрите что вам выдается из этого.
PHP:
скопировать код в буфер обмена
  1. file_get_contents(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file']);

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


Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection keep-alive
Content-Disposition attachment; filename="document.docx"
Content-Type application/octet-stream
Date Tue, 09 Dec 2014 18:00:25 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Pragma no-cache
Server nginx
Transfer-Encoding chunked
content-transfer-encoding binary

код заголовка который возвращает запрос
4. Panoptik - 09 Декабря, 2014 - 20:27:08 - перейти к сообщению
заголовки мне ничего не говорят, вы содержимое после заголовков смотрите - это первое

вообще зачем вам этот огород с проксированием? отдавайте ссылку напрямую если там нет никаких секретных конфиденциашльных файлов

или смотрите внимательно что выдает этот код
PHP:
скопировать код в буфер обмена
  1. echo file_get_contents(Yii::getPathOfAlias('webroot').'/file_perfomer/'.$_GET['file']);


только для дебага для начала закомментируйте строки с header

потому как вы не можете посмотреть в браузере что там происходит

 

Powered by ExBB FM 1.0 RC1