PHP 创建文件并下载文件


PHP Create file and download file

我正在尝试制作一个程序,该程序可让您上传 2 个文件,运行一些代码,然后创建一个新文件并使用新数据下载它。

我已经搜索过,似乎我也在做同样的事情,但它不会创建文件,它只是打印网站上的文本。

这是代码。

    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();

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

记住不要在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;

没有办法想象在你发布的代码之前发生了什么,但是,建议如果你正在下载,你应该小心不要输出任何文本(即使是空格),直到这部分代码完全运行。即使在<?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;
        }