2016-07-16 150 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(); 

它似乎并不关心第二个标题。

+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

请解释为什么当你downvote! – Iceman

0

没有办法想象你的就是你发布的代码才去上什么,但是,它会建议,如果你正在做一个下载,你要小心,不要输出任何文本(甚至白色空间),直到部分代码完全运行。在<?php之前甚至有一个空格会引发错误。这里是一个函数,你可能想尝试一下(如果你愿意):

<?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; 
     }