我有一个文件下载代码using php,我的代码位于下载页面。
if (file_exists($strDownload)) {
//get the file content
$strFile = file_get_contents($strDownload);
//set the headers to force a download
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=\"" . str_replace(" ", "_", $arrCheck['file_name']) . "\"");
//echo the file to the user
echo $strFile;
//update the DB to say this file has been downloaded
mysql_query("xxxxxxxx");
exit;
}
函数file_exists()
通过有效检查并且我的$strDownload
变量将类似/home/public_html/uploads/myfile.zip
位于服务器文件夹中。但是当我尝试下载文件而不是下载时,页面会显示文件的完整加密源。我怎样才能下载它?
编辑了解这些信息,我自己试图在wordpress系统中使用这段代码,我的文件路径就像http://example.com/wp-content/uploads/2016/02/myfile.zip
。另外在上面提到的代码中,我自己检查上面已经提到的服务器路径的file_exists()
条件,并根据需要返回1
。
答案 0 :(得分:0)
试试这个
if (file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
答案 1 :(得分:0)
通过在php页面的开头使用上面的代码来解决它。即,在声明着名的wordpress标签get_header();
如果我们在wordpress的get_header();
标签之后使用上述代码,则会导致首先打开页面,因此它会在页面中写入文件的来源而不是下载,因为元标记已经设置。