2

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_pathasを使用しようとしています/が、機能していません。

助けてください。

4

2 に答える 2

10
$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は、アクセスできないことを意味します(権限の問題)
于 2013-07-27T10:05:20.867 に答える
0

最初に、スクリプトが正しいディレクトリで実行されているかどうかを echo して確認しますdirname(__FILE__)

で実行されている場合はpublic_html、次のようにコードを変更できます。

$dl = dirname(__FILE__). '/../';

ただし、セキュリティの問題に注意してください!

  1. ファイルとディレクトリに対する読み取り/書き込み権限があるかどうかを確認します
  2. open_basedir制限を確認しphp.iniます ( PHP の open_basedir 制限を緩和するにはどうすればよいですか? を参照) 。

お役に立てれば

于 2013-07-27T10:04:15.243 に答える