PHP - 使用随机名称生成文件?

时间:2014-02-27 16:46:55

标签: php download

如何创建一个脚本,该脚本使用随机名称从表单数据生成txt文件并允许临时下载?

5 个答案:

答案 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

的php脚本

下载链接/表单操作可以FDSFASFA.txtdownload.php?id=FDSFASFA发送到htaccess

在download.php中输出内容,如

header('Content-type: application/txt');
header('Content-Disposition: attachment; filename="FDSFASFA.txt"');
echo $content;

您将FDSFASFA令牌存储在数据库中,并在几分钟后将其删除。