как получить доступ к файлу из внешнего корневого каталога в php

У меня есть код для загрузки 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__). '/../'; 

Но остерегайтесь проблем безопасности!

  1. Проверьте, есть ли у вас права на чтение и запись в файле и каталоге
  2. Проверьте ограничение open_basedir в php.ini (см. Как я могу ограничить ограничение open_basedir PHP? )

Надеюсь это поможет