Windows/AN HTTPDでPHP Version 4.4.9を動かしています。
fsockopenで処理を行なっているのですが、
タイムアウト時に次の処理に移行させる方法が分かりません。
foreachで繰り返し処理中にタイムアウトが出た場合、そこで処理が止まってしまいます。
(エラー内容: Maximum execution time of 30 seconds exceeded)
set_time_limitを使った時間延長以外の方法で、
何か対策がありましたらご教授いただけませんでしょうか。
よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
通信メモ
<?php // PHPってタイムアウト設定がめんどいすね
function request($host, $path) {
$timeout1 = 10;
$timeout2 = 10;
$errno = null;
$errstr = null;
$data = null;
if (!$fp = fsockopen($host, 80, $errno, $errstr, $timeout1)) {
echo "Unable to get server status";
return false;
}
stream_set_blocking($fp, true);
stream_set_timeout($fp, $timeout2);
$info = stream_get_meta_data($fp);
fwrite($fp, "GET {$path} HTTP/1.1\r\n");
fwrite($fp, "Host: {$host}\r\n");
fwrite($fp, "Connection: Close\r\n\r\n");
while (!feof($fp) && !$info['timed_out']) {
$data .= fgets($fp, 4096);
$info = stream_get_meta_data($fp);
}
fclose($fp);
echo '<pre>' . print_r($info, true) . '</pre>';
echo $data;
}
回答いただきありがとうございます!
>stream_set_blocking($fp, true);
>stream_set_timeout($fp, $timeout2);
>$info = stream_get_meta_data($fp);
この3行、初めて見る関数でちょっと興奮しました。
調べてみたけど意味が全く分からなかったので、
これからじっくり調べた上で実装してテストしてみます!
ありがとうございます!!!
No.1
- 回答日時:
<?php
$start = microtime_float(); //現在のマイクロタイムを取得
$error = false;
//何ぞかのループ処理
while({なにやら条件}){
$fp = fsockopen(); //どこかに接続するとして、
if(!$fp) exit('接続できなかった'); //接続できない場合のエラー処理
//処理を繰り返して、処理の重そうな箇所に適時、
if(microtime_float - $start > $maxtime){
//何らかの終了処理
$error = true;
break;
}
}
if($error === true){
echo "エラーがあったことを伝える処理とか";
}
function microtime_float(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
?>
こんな感じでしょうか。
つまり処理の開始時間と、処理が一回終わるごとに、毎回開始時間から何秒経過したかを算出して、時間が超えていたらループを抜けるとかそういう処理を行えばよいのではないでしょうか。
一回のループ毎の処理が重いのであれば、処理中に何回か算出したりとか、微調整は必要そうですが。
回答頂きありがとうございます!
「時間が超えていたらエラー」なんてできるとは!知らなかったです。
今回はループ中に「FatalError(致命的なエラー?)」が出ていたみたいで、この方法が使えませんでした。
次回、処理回数の多いスクリプトを組むときに参考にさせていただきます。
ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 管理者権限 2 2022/05/26 11:08
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- 事件・犯罪 脅迫罪や暴行罪の時効および告訴期間中の安全対策について 2 2022/08/30 15:10
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- 財務・会計・経理 法人成りについて教えてください 個人事業主から法人になったときの、資産の処理の仕方で教えていただきた 7 2022/09/21 17:32
- 英語 Systematic reviews have evaluated the efficacy of 2 2022/05/18 16:39
- 法学 不正アクセス禁止法の扱いについて 4 2022/03/23 18:13
- 教えて!goo 同じ質問を繰り返す投稿者 6 2022/05/24 11:44
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
ページの一部だけリロード
-
PHPで文字列(日本語)の比較
-
phpの処理中に画面表示ををする...
-
プリペアド・ステートメントの...
-
処理の内容を別ページへ出力したい
-
onedrive にexcelファイルをア...
-
CFileDialogの最初のディレクト...
-
VBSの「MsgBox」について
-
3つ以上の論理積は利用可能なの...
-
FTPコマンドでディレクトリごと...
-
.phpと.incファイルの違いはな...
-
エンコーディングについて
-
「クラス関数」「メンバ関数」...
-
Subversionのリポジトリの削除
-
さくらレンタルサーバーでPHPが...
-
Subversionで、ファイルをリネ...
-
PHPからMSSQLへの接続結果の文...
-
SQLiteに画像を格納したい
-
rmdirでフォルダが消せません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのif文でその処理を途中で抜...
-
PHPが処理を途中でやめる。原因...
-
Cronで同じ処理を複数同時に実...
-
3の倍数の和
-
phpの処理中に画面表示ををする...
-
インスタンス化に伴うメモリ消...
-
関数の前についている「@」の意...
-
PHPで文字列(日本語)の比較
-
PHPのSmartyについて質問です。...
-
includeしたファイルに変数を持...
-
submitボタンを自動クリック
-
プログラム内で処理中断後も継...
-
web画面から呼び出したphp処理...
-
Smartyにて、文字検索
-
チェックボックスをビット演算...
-
タイムアウト時に次の処理へ移...
-
csvファイルの読込みとソート
-
VBAからPHPを実行(キック)したい
-
PHPの複数関数非同期実行方法を...
-
Linuxサーバに移行とphpexcel出力
おすすめ情報