PHP Force下载帮助

时间:2011-08-16 19:31:15

标签: php hyperlink download anchor

我现在一直在努力解决这个问题。我试图这样做,当用户点击链接时,它将强制下载。到目前为止,这是我的代码:

<?php
function Download()
{
    $fullpath = $_SERVER['DOCUMENT_ROOT']."front.dwg"; //Full path of document
$filename = "front.dwg";  //Document file nmae


  $mm_type="application/octet-stream";

    header("Cache-Control: public, must-revalidate");
    header("Pragma: hack");
    header("Content-Type: " . $mm_type);
    header("Content-Length: " .(string)(filesize($fullpath)) );
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary\n");
}
?>

<html>
<body>

<a href="#" onclick="<?php Download() ?>">Test</a>

</body>
</html>

5 个答案:

答案 0 :(得分:3)

您需要提取功能并将其另存为“download.php”

然后只需要一个链接:

<a href="download.php">

Download.php应如下所示:

$fullpath = $_SERVER['DOCUMENT_ROOT']."front.dwg"; //Full path of document
$filename = "front.dwg";  //Document file nmae


 $mm_type="application/octet-stream";

   header("Cache-Control: public, must-revalidate");
   header("Pragma: hack");
   header("Content-Type: " . $mm_type);
   header("Content-Length: " .(string)(filesize($fullpath)) );
   header('Content-Disposition: attachment; filename="'.$filename.'"');
   header("Content-Transfer-Encoding: binary\n");

答案 1 :(得分:2)

PHP不是客户端功能。你不能说onclick="somePHP"

您需要一个单独的PHP脚本,您将强制下载,并只需链接到该脚本。

在此脚本中,您还需要实际输出文件内容。

答案 2 :(得分:1)

您需要先将相应的呼叫设置为header。这些对我有用:

header('Pragma: public'); // required
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header("Content-disposition: attachment; filename=\"{$filename}\"");
header("Content-Type: {$mime}"); // also works with file extension
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($filename));
readfile($filename);
die();

答案 3 :(得分:0)

你永远不能强行下载。您可以将窗口位置更改为下载文件,它会提示它们,但如果您可以强制下载,则会出现一些重大安全问题。

答案 4 :(得分:0)

首先,您的$fullpath可能不包含您期望的数据,因为您没有在文件名之前插入正斜杠('/')。这是正确的:

$fullpath = $_SERVER['DOCUMENT_ROOT']."/front.dwg";

您可以使用$fullpatherror_log( "Fullpath: $fullpath" );检查echo "Fullpath: $fullpath\n"的内容。

其次,您需要使代码的PHP部分成为独立脚本。您将无法在Javascript中嵌入PHP函数调用。所有PHP都在Javascript运行之前执行,因此您需要一种方法来单独调用PHP。

第三,您应该使用file_exists()is_readable()验证文件是否存在且可读。如果PHP报告该文件不存在,则应指定完整路径。如果它不可读,您可以更改文件权限以允许PHP脚本读取它。