【问题标题】:Create file for download without saving on server with PHP使用 PHP 创建文件以供下载而不保存在服务器上
【发布时间】:2012-06-10 04:50:42
【问题描述】:

假设我的 PHP 代码是

<?php

// Get form variables using POST method
$MarriagePostMortem=stripslashes($_POST['MarriagePostMortem']);
$AutoSavesToKeep=stripslashes($_POST['AutoSavesToKeep']);

// Open and write file
$myFile="S3S.cfg";
$fh = fopen($myFile, 'w+') or die("can't open file");
fwrite($fh, "The Sims 3 Starter Configuration
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
MarriagePostMortem  $MarriagePostMortem
AutoSavesToKeep $AutoSavesToKeep
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-");
fclose($fh); 

//echo "file written\n";
?>

我想将文件直接发送给用户以供下载,而不将其保存到服务器。我真的不太擅长 PHP,那么我到底需要添加/更改什么?

【问题讨论】:

    标签: php file download save


    【解决方案1】:
    header ("Content-Type: application/octet-stream");
    header ("Content-disposition: attachment; filename=S3S.cfg");
    echo $string; //the string that is the file
    

    【讨论】:

    【解决方案2】:

    你应该怎么做,你的 html 标签应该是小写的,除非你输出一个值表,否则你的 html 标签应该是小写的,除非你输出一个值表,使用 div 和 css。您也可以发回脚本,因为从表单接收到的变量是特定的,您只需检查正确的值,然后将数据发送回用户。

    <?php
    if($_SERVER['REQUEST_METHOD']=='POST'){
    
        $mpm = (!empty($_POST['mpm']) && ($_POST['mpm']=='true' || $_POST['mpm']=='false'))?$_POST['mpm']:die('Wrong parameter type');
        $astk = (!empty($_POST['astk']) && is_numeric($_POST['astk']))?$_POST['astk']:die('Wrong parameter type');
    
    
        $content  = "The Sims 3 Starter Configuration".PHP_EOL;
        $content .= "-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-".PHP_EOL;
        $content .= "MarriagePostMortem  $mpm".PHP_EOL;
        $content .= "AutoSavesToKeep $astk".PHP_EOL;
        $content .= "-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-".PHP_EOL;
    
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-disposition: attachment; filename=S3S.cfg');
        header('Content-Length: '.strlen($content));
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Expires: 0');
        header('Pragma: public');
        echo $content;
        exit;
    }
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Sims 3 Starter Configuration</title>
    </head>
    
    <body>
    
    <h1>Sims 3 Starter Configuration</h1>
    
    <form action="" method="post">
    <input type="reset" value="Clear changes">
    <br />  
    <p>marriagepostmortem
      <select name="mpm">
        <option value="true">enabled</option>
        <option value="false" selected="selected">disabled</option>
      </select>
      Keep marriage lines on family tree entries after death. experimental!</p>
    
    <p>autosavestokeep
      <select name="astk">
        <option value="1">1</option>
        <option value="2" selected="selected">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
      </select>
      Number of autosaves to keep.</p>
    
    <p><input type="submit" value="Generate"></p>
    </form>
    <p>Drag the file onto the sims 3 starter to add configurations.</p>
    </body>
    </html>
    

    【讨论】:

    • 这比Dagon的回答更正确,而且这个回答还包括解决你遇到的重新加载页面的header问题。
    • 教人钓鱼... :-) 我尽量不写剪切和粘贴答案,没有人向他们学习
    猜你喜欢
    • 1970-01-01
    • 2013-05-11
    • 2021-06-22
    • 1970-01-01
    • 2012-12-04
    • 2015-02-27
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多