从移动设备下载时,PHP 标头调用两次


PHP header call two times when download from mobile

我有一个下载.php文件,如下所示。 当我从PC互联网浏览器单击下载.php页面时,它工作正常并发送单个请求。但是当我从移动设备单击同一页面时,它会发送两个请求。

$filename ="test.mp3";
LogWriter($filename);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='"".basename($filename)."'";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

从PC单击时的日志文件:

时间: 2014-12-23 13:20:24||消息:测试.mp3

当我从移动设备单击同一文件时日志文件:

Time: 2014-12-23 13:31:24|| Message: test.mp3
Time: 2014-12-23 13:31:28|| Message: test.mp3

知道吗?请帮忙。

创建一个会话,告诉您几秒钟前已请求

session_start();
$filename ="test.mp3";
if(!empty($_SESSION['download_'.$filename]) &&
     (time() - $_SESSION['download_'.$filename) < 10)) exit;
// Check, then exit if you have requested before in 10 seconds
$_SESSION['download_'.$filename] = time();
LogWriter($filename);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='"".basename($filename)."'";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

注意:但你不能在服务器端弄错它。因为这是客户端问题