PHP - 有效地设置时间限制

时间:2012-04-28 09:02:41

标签: php performance time

我有一个简单的脚本,如果发现用户正在手机上浏览,则会重定向到网站的移动版本。它使用Tera-WURFL webservice来实现它,它将被放置在除Tera-WURFL之外的其他主机上。我想保护它,以防Tera-WURFL托管停机时间。换句话说,如果我的脚本运行时间超过一秒,那么就停止执行它,然后重定向到常规网站。如何有效地做到这一点(这样CPU不会被脚本过度负担)?

编辑:看起来TeraWurflRemoteClient类具有超时属性。参见下文。现在我需要找到如何将它包含在我的脚本中,以便在超时的情况下重定向到常规网站。

这是脚本:     

// Instantiate a new TeraWurflRemoteClient object
$wurflObj = new TeraWurflRemoteClient('http://my-Tera-WURFL-install.pl/webservicep.php');

// Define which capabilities you want to test for. Full list: http://wurfl.sourceforge.net/help_doc.php#product_info
$capabilities = array("product_info");

// Define the response format (XML or JSON)
$data_format = TeraWurflRemoteClient::$FORMAT_JSON;

// Call the remote service (the first parameter is the User Agent - leave it as null to let TeraWurflRemoteClient find the user agent from the server global variable)
$wurflObj->getCapabilitiesFromAgent(null, $capabilities, $data_format);

// Use the results to serve the appropriate interface
if ($wurflObj->getDeviceCapability("is_tablet") || !$wurflObj->getDeviceCapability("is_wireless_device") || $_GET["ver"]=="desktop") {
    header('Location: http://website.pl/'); //default index file
} else {
header('Location: http://m.website.pl/'); //where to go
}
?>

正在包含的here is source of TeraWurflRemoteClient.php。它具有documentation中提到的可选超时参数:

// The timeout in seconds to wait for the server to respond before giving up
$timeout = 1;

2 个答案:

答案 0 :(得分:3)

TeraWurflRemoteClient类具有超时属性。默认情况下它是1秒,正如我在文档中看到的那样。 因此,此脚本的执行时间不会超过一秒。

答案 1 :(得分:0)

尝试通过在其类中的TeraWurfl的HTTP请求上设置非常短的超时来实现此目的,这样如果响应没有像2-3秒一样恢复,请考虑检查为false并显示完整的网站

查找设置较短超时的位置可能会有所不同,具体取决于您用于发出HTTP请求的传输。与Curl一样,您可以设置HTTP请求的超时。

在此之后,请将HTTP请求超时重置为原来的状态,以免影响任何其他代码。

我在研究它时也发现了this,你可能想给它一个读数,不过我会说远离分叉,除非你非常了解它是如何工作的。

刚才Adelf发布TeraWurflRemoteClient类默认超时为1秒,这样可以解决您的问题,但无论如何我都会发布我的答案。