我有一个PHP脚本的问题,允许直接在用户的电脑上下载网站外的文件。
它完美适用于具有Apache和PHP stanadard配置标准的OVH VPS。在具有相同配置的其他VPS中,同一脚本在50秒后停止下载。
浏览器(Chrome)报告网络未知错误。
我尝试在脚本中设置set_time_limit(0)
,但它无法正常工作,我更改了php.ini
中的超时,但仍然无效,请求帮助以了解什么可以依靠这个。
答案 0 :(得分:1)
您已经更改了管理脚本执行时间的参数,但您需要更改负责解析请求数据所需时间的参数。它是max_input_time
- 所以你可以在php.ini中或通过函数ini_set()更改它
答案 1 :(得分:0)
我也尝试将max_input_time设置为120或更高,甚至设置为0,但问题仍然相同,在其他vps上max_input_time设置为60并且一切正常 这是我的PHP:
<?php
set_time_limit(0);
function get_size($url) {
$my_ch = curl_init();
curl_setopt($my_ch, CURLOPT_URL,$url);
curl_setopt($my_ch, CURLOPT_HEADER, true);
curl_setopt($my_ch, CURLOPT_NOBODY, true);
curl_setopt($my_ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($my_ch, CURLOPT_TIMEOUT, 35);
$r = curl_exec($my_ch);
foreach(explode("\n", $r) as $header) {
if(strpos($header, 'Content-Length:') === 0) {
return trim(substr($header,16));
}
}
return '';
}
$url=base64_decode(filter_var($_GET['url']));
$name =($_GET['title']);
$size=get_size($url);
//echo $url."<br>".$size;
// Fetch and serve
if ($url)
{
$size=get_size($url);
// Generate the server headers
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE)
{
header('Content-Type: application/octet-string');
header('Content-Disposition: attachment; filename="' . $name . '"');
header('Expires: 0');
header('Content-Length: '.$size);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
}
else
{
header('Content-Type: application/octet-string');
header('Content-Disposition: attachment; filename="' . $name . '"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Content-Length: '.$size);
header('Pragma: no-cache');
}
readfile($url);
exit;
}
//Not found;
exit('File not found');
?>