У меня есть код для загрузки zip-файлов:
$dl_path = './'; $filename = 'favi.zip'; $file = $dl_path.$filename; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/zips'); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type:application/force-download"); header("Content-Type:application/download"); header("Content-Disposition:attachment;filename=$filename "); header("Content-Transfer-Encoding:binary "); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; }
существует корневой каталог /public_html
, скрипт выполняется в корневом каталоге.
есть zip-файл в каталоге /
.
Я пытаюсь использовать $dl_path
как /
но он не работает.
Пожалуйста помоги.
$dl_path = __DIR__.'/..'; // parent folder of this script $filename = 'favi.zip'; $file = $dl_path . DIRECTORY_SEPARATOR . $filename; // Does the file exist? if(!is_file($file)){ header("{$_SERVER['SERVER_PROTOCOL']} 404 Not Found"); header("Status: 404 Not Found"); echo 'File not found!'; die; } // Is it readable? if(!is_readable($file)){ header("{$_SERVER['SERVER_PROTOCOL']} 403 Forbidden"); header("Status: 403 Forbidden"); echo 'File not accessible!'; die; } // We are good to go! header('Content-Description: File Transfer'); header('Content-Type: application/zip'); header("Pragma: public"); header("Expires: 0"); header("Cache-Control:must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename={$filename}"); header("Content-Transfer-Encoding: binary "); header('Content-Length: ' . filesize($file)); while(ob_get_level()) ob_end_clean(); flush(); readfile($file); die;
^ попробуйте этот код . Посмотрите, работает ли это. Если это не так:
404
означает, что файл не найден. 403
, значит, вы не можете получить к нему доступ (разрешения) . Прежде всего проверьте, работает ли ваш скрипт под правильным каталогом, эхом dirname(__FILE__)
.
Если он запущен под public_html
вы можете изменить код следующим образом:
$dl = dirname(__FILE__). '/../';
Но остерегайтесь проблем безопасности!
open_basedir
в php.ini
(см. Как я могу ограничить ограничение open_basedir PHP? ) Надеюсь это поможет