5

好的,所以我希望我的用户能够下载.txt带有他们用户名的文件。

我到处检查过,到目前为止我找不到我想要的东西,或者它是否可能。

为了给你一个我正在尝试做的例子,这是我的代码:

<button type="button">Download All Your Keys On A .txt
<?php
$file = 'logs/$session->username.txt';

if(!file_exists($file)) die("I'm sorry, the file doesn't seem to exist.");

$type = filetype($file); // Get a date and timestamp $today = date("F j, Y, g:i a"); $time = time(); // Send file headers header("Content-type: $type"); header("Content-Disposition: attachment;filename=$filename");
header("Content-Transfer-Encoding: binary"); 
header('Pragma: no-cache'); 
header('Expires: 0'); // Send the file contents.
set_time_limit(0); 
readfile($file);
?>
</button>

我正在尝试这样做,以便当您单击按钮时,它会强制下载配置为的 .txt 文件:

$file = 'logs/$session->username.txt';

对不起,如果这令人困惑和混乱,但我没有其他方法可以展示这个。

提前致谢!

4

1 回答 1

14

为什么不将此代码放在单独的文件中,例如download.php

<?php
    $file = "logs/{$session->username}.txt";

    if(!file_exists($file)) die("I'm sorry, the file doesn't seem to exist.");

    $type = filetype($file);
    // Get a date and timestamp
    $today = date("F j, Y, g:i a");
    $time = time();
    // Send file headers
    header("Content-type: $type");

    //** If you think header("Content-type: $type"); is giving you some problems,
    //** try header('Content-Type: application/octet-stream');

    //** Note filename= --- if using $_GET to get the $file, it needs to be "sanitized".
    //** I used the basename function to handle that... so it looks more like:
    //** header('Content-Disposition: attachment; filename=' . basename($_GET['mygetvar']));

    header("Content-Disposition: attachment;filename={$session->username}.txt");
    header("Content-Transfer-Encoding: binary"); 
    header('Pragma: no-cache'); 
    header('Expires: 0');
    // Send the file contents.
    set_time_limit(0);
    ob_clean();
    flush();
    readfile($file);

    //** If you are going to try and force download a file by opening a new tab via javascipt
    //** (In this code you would replace the onClick() event handler in the html
    //** button with onclick="window.open('www.someurl.com', '_blank');"
    //** - where 'www.someurl.com' is the url to the php page - I keep the file
    //** creation and download handling in the same file, and $_GET the file name
    // - bad practice? Probably, but I never claimed to be an expert),
    //** be sure to include exit(); in this part of the php... 
    //** otherwise leave exit(); out of the code.
    //** If you don't, it will likely break the code, based on my experience.

    //exit();
?>

请注意,您必须将引号更改为双引号,因为您在's 中使用变量。因此,要扩展变量,请将第一行更改为:

$file = "logs/{$session->username}.txt";

在这里,我认为 ,$session->username作为您要引用的变量。

并在 HTML 中有这个:

<button type="button" onclick="location.href='download.php'">Download All Your Keys On A .txt</button>

当您单击此按钮时,它会重定向到download.php,启动 txt 文件的下载。就如此容易。但这需要你有两个文件。而且我不明白这里需要一个按钮。为什么不只使用这样的简单链接?

<a href="download.php">Download All Your Keys On A .txt</a>

如果需要,您可以使用 CSS 对其进行样式设置。

于 2013-06-26T02:10:57.733 回答