2017-09-22 8 views
1

私のウェブサイトでzipファイル用の強制ダウンロードスクリプトを作成しようとしています。私はファイルのパスが正しいことを知っていると、スクリプトが生成するリンクはファイル自体に戻るが、スクリプトを使用してファイルが見つからず、エラーチェックをしなくても破損したファイルをダウンロードする。私のコードは以下の通りです。PHP - 404ファイルが見つからないという強制ダウンロードが発生しました

<?php 

session_start(); 

    $file='http://www.myurlgoeshere/'.$_SESSION['FilePath']; 

    if (headers_sent()) { 
     echo 'HTTP header already sent'; 
    } else { 
     if (!is_file($file)) { 
      header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found'); 
      echo 'File not found - '.$file; 
     } else if (!is_readable($file)) { 
      header($_SERVER['SERVER_PROTOCOL'].' 403 Forbidden'); 
      echo 'File not readable'; 
     } else { 
      header($_SERVER['SERVER_PROTOCOL'].' 200 OK'); 
      header("Content-Type: application/zip"); 
      header("Content-Transfer-Encoding: Binary"); 
      header("Content-Length: ".filesize($file)); 
      header("Content-Disposition: attachment; filename=\"".basename($file)."\""); 
      readfile($file); 
      exit; 
     } 
    } 
?> 

$ fileからのリンクechodは直接動作しますが、404は見つかりませんでした。

私は何か間違っているのですか、それとも、妥当なサーバー側の問題ですか?

乾杯、

+0

http_response_code(404); '/ http_response_code(403)'を使用すると、http_response_codeが詳細を処理して、それが存在するのです! – hanshenrik

答えて

2

ディランの瞬間にあなたのファイルへのパスは次のとおりです。

$file='http://www.myurlgoeshere/'.$_SESSION['FilePath']; 

実際に、それは、サーバー上のファイルへのパスでなければなりません。したがって、たとえば:

$file='/var/www/html/domain.com/public_html/downloads/file_to_download.zip'; 
+0

ありがとうございます! –

関連する問題