Apache停止脚本

时间:2014-04-28 14:54:33

标签: php apache

我有一个PHP脚本的问题,允许直接在用户的电脑上下载网站外的文件。

它完美适用于具有Apache和PHP stanadard配置标准的OVH VPS。在具有相同配置的其他VPS中,同一脚本在50秒后停止下载。

浏览器(Chrome)报告网络未知错误。

我尝试在脚本中设置set_time_limit(0),但它无法正常工作,我更改了php.ini中的超时,但仍然无效,请求帮助以了解什么可以依靠这个。

2 个答案:

答案 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');
?>