使用 PHP 创建文件以供下载而不保存在服务器上

Posted

技术标签:

【中文标题】使用 PHP 创建文件以供下载而不保存在服务器上【英文标题】:Create file for download without saving on server with 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,那么我到底需要添加/更改什么?

【问题讨论】:

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

【讨论】:

我现在收到此处显示的错误消息:pastehtml.com/view/c0zgndz2d.html @Kuuchuu 您不能两次发送标头。查看 Lawrence Cherone 的回答。【参考方案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问题。 教人钓鱼... :-) 我尽量不写剪切和粘贴答案,没有人向他们学习

以上是关于使用 PHP 创建文件以供下载而不保存在服务器上的主要内容,如果未能解决你的问题,请参考以下文章

创建文本文件并添加到zip文件并下载spring boot而不保存在本地服务器中

在 ASP.net Core MVC 2.1 中创建文本文件并下载而不保存在服务器上

打开文件,写入文件,将文件保存为 zip 并流式传输给用户以供下载

Qt5:下载文件而不保存到硬盘

如何使用CakePdf创建和下载PDF,而不是在浏览器中显示它

phpmyadmin 提供文件以供下载 [关闭]