如何创建一个脚本,该脚本使用随机名称从表单数据生成txt文件并允许临时下载?
答案 0 :(得分:1)
这个问题实现了很多东西。要创建随机名称文本文件,您可以使用如下:
/**
* @param $file string full path to temp file
* @param $content string to be written to the file
* @return bool
*/
function writeContentToFile($file, $content)
{
//mode 'a' - open to write - pointer to end - if not exists ->try to create
$handle = fopen($file, 'a');
//check if creation was successful
if (!$handle) {
$error = "Cannot open file ($file)";
return false;
}
if (is_writable($file)) {
//try to write content
if (!fwrite($handle, $content)) {
$error = "Cannot write to file ($file)";
return false;
}
//close the file
fclose($handle);
return true;
} else {
$error = "The file $filename is not writable";
return false;
}
}
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
$yourPath="your/path/to/";
$file=$yourPath.generateRandomString().".txt";
$content="content";
writeContentToFile($file,$content);
要实际下载,你可以使用这样的:
function initDownload($file)
{
if (file_exists($file)) {
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$file);
header("Content-Type: text/plain");
header("Content-Transfer-Encoding: binary");
//actually download
readfile($file);
//delete the file since you said temporaly
unlink($file);
return "";
}
}
答案 1 :(得分:0)
你可以使用php函数uniqid生成随机名称
$content = "some text here";
$fp = fopen($_SERVER['DOCUMENT_ROOT'] . "/". uniqid() .".txt","wb");
fwrite($fp,$content);
fclose($fp);
答案 2 :(得分:0)
使用以下方式创建文件:
$fileName = tempnam( $yourPath );
将创建日期存储在某处(数据库,文本文件)。
在对脚本的每个请求中,检查日期是否已超过您的时间限制。如果是,请使用unlink
删除文件。
答案 3 :(得分:0)
PHP的tempnam
函数将生成一个随机名称为http://us2.php.net/tempnam的文件。
答案 4 :(得分:0)
创建一个名为download.php
下载链接/表单操作可以FDSFASFA.txt
从download.php?id=FDSFASFA
发送到htaccess
在download.php中输出内容,如
header('Content-type: application/txt');
header('Content-Disposition: attachment; filename="FDSFASFA.txt"');
echo $content;
您将FDSFASFA
令牌存储在数据库中,并在几分钟后将其删除。