我使用的是无法编辑的类,因为它已加密。 api从一个并不总是可用的网站反弹,导致加载时间延迟。如果超过10秒,页面将开始显示类中的错误。
有没有办法可以在try catch上加上时间限制来防止错误并限制课程的时间?
try {
$r = $v->url($u);
} catch (Exception $e) {
$r='';
}
答案 0 :(得分:0)
如果你愿意得到hacky并做一些奇怪的事情,一切都是为了这堂课,你可以这样做:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.mysite.com/callUrlFunction.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
http_build_query(array('url' => 'http://www.othersite.com')));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); //timeout in seconds
$r = curl_exec($ch);
$curl_errno = curl_errno($ch);
curl_close ($ch);
if ($curl_errno > 0) {
$r = "";
}
然后在callUrlFunction.php中你会有
<?php
try {
$r = $v->url($_POST['url']);
} catch (Exception $e) {
$r='';
}
echo $r; //or maybe json_encode($r) or serialize($r), depending on what $r is
?>
当然,这一切都很荒谬,因为你可以卷曲其他人而不是使用包装器。卷曲自己很奇怪/愚蠢。
答案 1 :(得分:0)
你可以刷新输出缓冲区(http://php.net/flush),这样用户就会在脚本仍在运行时开始获取内容,但这可能会很麻烦。
我可能会创建一个单独的脚本并使用shel_exec从我的脚本调用它,这样你可以使用一些外部工具来设置超时,或者你可以分叉一个单独的进程并检查自己的时间,当时间是超过10秒你可以杀死那个进程并显示错误(我可能会使用这个选项)。