我现在一直在努力解决这个问题。我试图这样做,当用户点击链接时,它将强制下载。到目前为止,这是我的代码:
<?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>
答案 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";
您可以使用$fullpath
或error_log( "Fullpath: $fullpath" );
检查echo "Fullpath: $fullpath\n"
的内容。
其次,您需要使代码的PHP部分成为独立脚本。您将无法在Javascript中嵌入PHP函数调用。所有PHP都在Javascript运行之前执行,因此您需要一种方法来单独调用PHP。
第三,您应该使用file_exists()
和is_readable()
验证文件是否存在且可读。如果PHP报告该文件不存在,则应指定完整路径。如果它不可读,您可以更改文件权限以允许PHP脚本读取它。