2016-10-13 11 views
-1

こんにちは私はこれをしばらくは取り組んできましたが、誰かが私を助けてくれることを願っています。複数の異なるものを試して試してみると、どこにもいないようです。PHPのreadfileをダウンロードしています現在のページコードがURLに与えられていません

私は、ウェブサイトのパブリック側でページ上の異なるファイルのダウンロードをトリガするために意図されているすべてが1つのページに複数のボタンを表示するWordpressのプラグインに取り組んでいます問題

。私はこれを自分でデバッグしようとしており、URLが正しく選択されていることを確認してから、各ファイルの正しいパスとファイル名とファイル形式を正しく提供しています。そこにある内容をチェックしている変数の多くがエコーされている(ヘッダーをコメントアウトする)のは正しいです。

次のイタリックのテキストには元の問題が含まれていますが、これはもう例外ではありません。崇高なテキストでPDFファイルを開くと、pdfが存在します。それはまた、pdfファイルの前にhtmlのロードを含んでいるようです(これは私のPHPには存在しませんが、他のPHPファイルやワードプレスのように見えます)。@Marc Bのコメントに感謝して元のコードを編集しました。 readfile();の後にexit();を追加すると、pdfデータの後にhtmlが終了します。私が知る必要があるのは、PHPのreadfile();の前にすべてのコードを削除するにはどうすればよいのですか?純粋にpdfだけをダウンロードしてうまくいけば正常に開くと思います。次の行は、ダウンロードするファイルを取得していないようです。私はコメントアウトして、それの隣にparsed_url変数の結果を書いています。私はreadfileに間違ったことを渡しています。

readfile($parsed_url['localpath']); /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */ 

現在のコードが開始するダウンロードをトリガし、添付ファイルを作成し、それがその後の名前が右の名前ですが、ファイルをダウンロードするには、代わりのデータの現在のページのHTMLが含まれていますファイルをダウンロード中です。

ボタンをクリックすると、URLの上部にurlidが追加され、次にコードが表示され、idが取得され、ダウンロードするurl配列からファイルurlが検索されます。

これについての助けがあれば、私のコードはすばらしくなるでしょう。

PHPコード

 if(isset($_GET['urlid'])){ 

     /* 
     // Code is a modified version from 
     author: pixeline 
     website: http://www.pixeline.be 
     last updated: 14 January 2009 
     */ 


     $urlid = $_GET['urlid']; 
     $filename = urldecode(urls_array[$urlid]); /* http://example.co.uk/wp-content/uploads/2016/10/pdfdownload.pdf */ 


     // converting url to local path so Apache can find the file. 
     // force download: 
     // required for IE, otherwise Content-disposition is ignored 
     if (ini_get('zlib.output_compression')) 
      ini_set('zlib.output_compression', 'Off'); 

     $parsed_url = parse_url($filename); 
     $fileinfo = pathinfo($filename); 
     $parsed_url['extension'] = $fileinfo['extension']; // .pdf 
     $parsed_url['filename'] = $fileinfo['basename']; // pdfdownload.pdf 
     $parsed_url['localpath'] = $_SERVER['DOCUMENT_ROOT'] . $parsed_url['path']; /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */ 


     // just in case there is a double slash created when joining document_root and path 
     $parsed_url['localpath'] = preg_replace('/\/\//', '/', $parsed_url['localpath']); 

     if (!is_readable($parsed_url['localpath'])) { 
      die('File not found: ' . $parsed_url['localpath']); 
     } 
     $allowed_ext = array('pdf', 'png', 'jpg', 'jpeg', 'zip', 'doc', 'xls', 'gif', 'exe', 'ppt'); 
     if (!in_array($parsed_url['extension'], $allowed_ext)) { 
      die('This file type is forbidden.'); 
     } 

     switch ($parsed_url['extension']) { 
      case "pdf": $ctype = "application/pdf"; 
       break; 
      case "exe": $ctype = "application/octet-stream"; 
       break; 
      case "zip": $ctype = "application/zip"; 
       break; 
      case "doc": $ctype = "application/msword"; 
       break; 
      case "xls": $ctype = "application/vnd.ms-excel"; 
       break; 
      case "ppt": $ctype = "application/vnd.ms-powerpoint"; 
       break; 
      case "gif": $ctype = "image/gif"; 
       break; 
      case "png": $ctype = "image/png"; 
       break; 
      case "jpeg": 
      case "jpg": $ctype = "image/jpg"; 
       break; 
      default: $ctype = "application/force-download"; 
     } 


     header("Pragma: public"); // required 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: private", false); // required for certain browsers 
     header("Content-Type: $ctype"); 
     header("Content-Disposition: attachment; filename=\"" . $parsed_url['filename'] . "\";"); 
     header("Content-Transfer-Encoding: binary"); 
     header("Content-Length: " . filesize($parsed_url['localpath'])); 

     flush(); 

     readfile($parsed_url['localpath']); /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */ 
    exit(); 
    } 
    ?> 

    <a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity1) ?>"> 
    <button type="button" value="Download1" class="button button-blue" >Download pdf one</button> 
    </a> 

    <a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity2) ?>"> 
    <button type="button" value="Download2" class="button button-blue" >Download pdf two</button> 
    </a> 
    <a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity3) ?>"> 
    <button type="button" value="Download3" class="button button-blue" >Download pdf three</button> 
    </a> 
+2

readfile呼び出しの後に 'exit()'する必要があります。さもなければPHPはあなたのダウンロードの後に​​あなたが持っているhtmlの全てを出力して出力します。 –

+0

ありがとう@MarcB私はダウンロードしたpdfファイルをページ上部の崇高なテキストで開き、HTMLの読み込みを表示して、明らかに判読不能なpdfファイルのように見えるが、 pdfはうまくいくはずです。ですから、基本的には、readfileが呼び出される前にページに表示されているものを削除するにはどうすればいいのでしょうか?上記のすべてのコードを削除するのと同じように、今のところは何も印刷されていないので、pdfに残されます。私は上記のHTMLは他のWordPressのファイルから来ていると思います。 –

答えて

0

あなたはすでに、PHPファイル内に存在しているのhtmlを削除することはできませんので。私はファイルをダウンロードするためのPHPを保持する別のPHPファイルを作成しました。その後、元のファイルに戻ってボタンを送信し、ポストアクションを含むフォーム内に新しいdownload.phpファイルに入れました。

送信ボタンをクリックすると、phpファイルに投稿され、ダウンロードがトリガーされます。これは、私がWordpressを取り除くために見つけることができた唯一の方法ですダウンロードしたファイルを破るページの上部に追加していた。

皆さん、ありがとうございました。これが今解決されました。

関連する問題