0

ユーザーが携帯電話で閲覧していることが判明した場合に、ウェブサイトのモバイル バージョンにリダイレクトする簡単なスクリプトがあります。Tera-WURFL Web サービスを使用してそれを実現し、Tera-WURFL 自体以外のホスティングに配置されます。Tera-WURFL のホスティングがダウンした場合に備えて、これを保護したい。つまり、スクリプトの実行に 1 秒以上かかる場合は、スクリプトの実行を停止し、通常の Web サイトにリダイレクトするだけです。それを効果的に行う方法 (スクリプトによって CPU に過度の負担がかからないようにするため) は?

編集: TeraWurflRemoteClient クラスにはタイムアウト プロパティがあるようです。以下をお読みください。このタイムアウトの場合に通常の Web サイトにリダイレクトされるように、スクリプトに含める方法を見つける必要があります。

スクリプトは次のとおりです。

// 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
}
?>

そして、ここに含まれている TeraWurflRemoteClient.php のソースですドキュメントに記載されているように、オプションのタイムアウト引数があります。

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

2 に答える 2

3

TeraWurflRemoteClient クラスにはタイムアウト プロパティがあります。ドキュメントにあるように、デフォルトでは1秒です。したがって、このスクリプトは 1 秒以上実行されません。

于 2012-04-28T09:19:13.030 に答える
0

クラス内の TeraWurfl への HTTP リクエストに非常に短いタイムアウトを設定することで、これを実現してみてください。2 ~ 3 秒ほど応答が返されない場合は、チェックが false であると見なされ、Web サイト全体が表示されます。

より短いタイムアウトを設定する場所は、HTTP 要求の作成に使用するトランスポートによって異なる場合があります。Curl と同様に、HTTP リクエストのタイムアウトを設定できます。

この後、他のコードに影響を与えないように、HTTP 要求のタイムアウトを元の状態にリセットしてください。

また、調査中にこれを見つけまし。読みたいと思うかもしれませんが、物事がどのように機能するかを十分に認識していない限り、フォークは避けてください。

そして今、Adelf は TeraWurflRemoteClient クラスのタイムアウトがデフォルトで 1 秒であることを投稿したので、問題は解決しましたが、とにかく回答を投稿します。

于 2012-04-28T09:21:39.330 に答える