2016-07-16 28 views
0

2つのファイルをアップロードし、いくつかのコードを実行して新しいファイルを作成し、新しいデータをダウンロードできるプログラムを作成しようとしています。PHPファイルを作成してファイルをダウンロードする

私は検索しましたが、私は同じことをしているようですが、ファイルを作成しないで、単にウェブサイトにテキストを印刷します。

これはコードです。

header("Content-type: text/plain"); 
    header("Content-Disposition: attachment; filename=unique_ips.txt"); 
    echo 'IP addresses only found in file A:' . "\n"; 
    echo $array_a_result . "\n\n"; 
    echo 'IP addresses only found in file B:' . "\n"; 
    echo $array_b_result; 
    exit(); 

2番目のヘッダーは気にしないようです。

+0

これはどこで実行されますか?それが他の出力の前に送られなければ、それはうまくいかないでしょう - ヘッダ出力は最初に送信される出力でなければなりません。 –

+0

あなたの 'Content-type'に" application/octet-stream "を使ってみましたか? – Terry

答えて

0

header()の前に何もエコーしないように注意してください。私はちょうど以下のコードをテストしました。期待どおりに動作するはずです!

<?php 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=myfile.txt'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
flush(); 
echo 'IP addresses only found in file A:' . "\n"; 
echo $array_a_result . "\n\n"; 
echo 'IP addresses only found in file B:' . "\n"; 
echo $array_b_result; 
+0

Plsはなぜdownvoteを説明する! – Iceman

0

あなたは何があなたが投稿コードの前に何が起こっているかを想像する方法はありませんが、しかし、あなたがダウンロードを行っている場合、あなたも(任意のテキストを出力しないように注意しなければならないことが賢明でしょうコードのその部分が完全に実行されるまで) <?phpの前に1つの空白があっても、エラーが発生します。ここでは、(あなたがするかどうか)試してみたいことがあり機能は次のとおりです。

<?php 

     /** 
     * FULL-NAME OF THE FILE TO DOWNLOAD 
     * @param $downloadFileName 
     * NEW-NAME FOR THE FILE... DO NOT USE EXTENSIONS LIKE .pdf OR .doc OR .txt 
     * @param null $newFileName 
     * @return bool 
     * 
     */ 
     function processDownload($downloadFileName, $newFileName=null) { 
      $ext    = pathinfo($downloadFileName, PATHINFO_EXTENSION); 
      if(!$newFileName){ 
       $newFileName = basename($downloadFileName); 
      }else{ 
       $newFileName .= "." . $ext; 
      } 
      if(file_exists($downloadFileName)){ 
       $size  = @filesize($downloadFileName); 
       header('Content-Description: File Transfer'); 
       header('Content-Type: application/octet-stream'); 
       header('Content-Disposition: attachment; filename=' . $newFileName); 
       header('Content-Transfer-Encoding: binary'); 
       header('Connection: Keep-Alive'); 
       header('Expires: 0'); 
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
       header('Pragma: public'); 
       header('Content-Length: ' . $size); 
       readfile($downloadFileName); 
       return TRUE; 
      } 
      return FALSE; 
     } 

あなたはこの機能を試してみることにしました場合は、それ、このようなあなたのスクリプトの先頭に最初の関数呼び出しにするために助言されます:

<?php 
     // NOTICE THAT THERE IS NO WHITE-SPACE BEFORE PHP. 
     // AND NO OUTPUT WAS SENT (IE: NOTHING ECHOED OUT...) 

     processDownload(__DIR__ . "/downloads/unique_ips.txt", "Unique-IPs"); 

     // FROM HERE ON, YOU MAY ECHO WHATEVER YOU WISH... 
     // echo $whatever; 
     // echo $youWish; 
     // echo $may; 
     // echo $nowBeEchoed; 
     // echo $afterCalling; 
     // echo $theFunctionAbove; 

     echo 'IP addresses only found in file A:' . "\n"; 
     echo $array_a_result . "\n\n"; 
     echo 'IP addresses only found in file B:' . "\n"; 
     echo $array_b_result; 


     function processDownload($downloadFileName, $newFileName=null) { 
      $ext    = pathinfo($downloadFileName, PATHINFO_EXTENSION); 
      if(!$newFileName){ 
       $newFileName = basename($downloadFileName); 
      }else{ 
       $newFileName .= "." . $ext; 
      } 
      if(file_exists($downloadFileName)){ 
       $size  = @filesize($downloadFileName); 
       header('Content-Description: File Transfer'); 
       header('Content-Type: application/octet-stream'); 
       header('Content-Disposition: attachment; filename=' . $newFileName); 
       header('Content-Transfer-Encoding: binary'); 
       header('Connection: Keep-Alive'); 
       header('Expires: 0'); 
       header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
       header('Pragma: public'); 
       header('Content-Length: ' . $size); 
       readfile($downloadFileName); 
       return TRUE; 
      } 
      return FALSE; 
     } 
関連する問題