我想在没有提示屏幕的情况下将文件保存在服务器目录

时间:2014-08-04 11:53:29

标签: php html spreadsheet xls

我提交表单时会生成电子表格。出现一个提示,要求我保存文件,但是当我提交表单时,我希望这样,电子表格自动保存在我的服务器目录中,例如public_html/apm/test/file.xls.

我该如何处理呢?

以前我使用的是代码

    /* Please acknowledge use of this code by including this header. */

    $data = array(
        array("firstname" => $firstName, "lastname" => $lastName, "age" => $phoneNo, "email" => $email, "dob" => $dob, "mailingAddress" => $mailingAddress, "prescribedPhysician" => $prescribedPhysician, "patientID" => $patientID, "caregiver" => $caregiver, "nameOfCaregiver" => $nameOfCaregiver, "growLocation" => $growLocation, "expirationDate" => $expirationDate, "registrationNo" => $registrationNo, "medicalCondition" => $medicalCondition, "describeMedicalCondition" => $describeMedicalCondition, "grower" => $grower, "tradingCannabis" => $tradingCannabis, "medicalCannabis" => $medicalCannabis, "needCaregiver" => $needCaregiver)
    );

    function cleanData(&$str){
        $str = preg_replace("/\t/", "\\t", $str);
        $str = preg_replace("/\r?\n/", "\\n", $str);
        if(strstr($str, '"'))
            $str = '"' . str_replace('"', '""', $str) . '"';
    }

    // file name for download

    $filename = $firstName." ".$lastName." ".date('d-m-y') . ".xls";

    header("Content-Disposition: attachment; filename=\"$filename\"");
    header("Content-Type: application/vnd.ms-excel");

    $flag = false;
    foreach($data as $row) {
        if(!$flag) {
            // display field/column names as first row
            echo implode("\t", array_keys($row)) . "\n";
            $flag = true;
        }

        array_walk($row, 'cleanData');
        echo implode("\t", array_values($row)) . "\n";
    }

    exit;

1 个答案:

答案 0 :(得分:1)

您的代码完全按照您的要求执行操作:"使此内容可供Web客户端下载。"。这是由header directives

完成的
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Type: application/vnd.ms-excel");

然后,在代码的最后,您echo了一些内容。因此,此内容将提供给用户

如果要将文件保存在服务器上,则无法回显文件内容,但必须在服务器上保存此内容。您可以使用file_put_contents PHP function

执行此操作