![]()
|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">
第 20 ç« æŽ¥ç¶šå‡¦ç†
PHP 内部ã§ã€æŽ¥ç¶šã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒä¿æŒã•れã¾ã™ã€‚ ã“れã¯ã€æ¬¡ã® 3 ã¤ã®çŠ¶æ…‹ã‚’ã¨ã‚Šãˆã¾ã™ã€‚
通常 PHP ãŒå®Ÿè¡Œã•れã¦ã„ã‚‹å ´åˆã€NORMAL 状態ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ãªã‚Šã¾ã™ã€‚ ãƒªãƒ¢ãƒ¼ãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã‚’åˆ‡ã£ãŸå ´åˆã€ABORTED çŠ¶æ…‹ãƒ•ãƒ©ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚ 通常ã€ãƒªãƒ¢ãƒ¼ãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æŽ¥ç¶šæ–ã¯ã€STOP ボタンを押ã™ã“ã¨ã«ã‚ˆã‚Šç™ºç”Ÿã—ã¾ã™ã€‚ PHP å´ã®æ™‚é–“åˆ¶é™ (set_time_limit() å‚ç…§) ã«ã‹ã‹ã£ãŸå ´åˆã€ TIMEOUT çŠ¶æ…‹ãƒ•ãƒ©ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚ スクリプトを終了ã•ã›ã‚‹ãŸã‚ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã®æŽ¥ç¶šã‚’切æ–ã™ã‚‹ã‹ã©ã†ã‹ã‚’ 決ã‚ã‚‹ã“ã¨ãŒå‡ºæ¥ã¾ã™ã€‚ 時々ã€å‡ºåŠ›ãŒã©ã®ãƒªãƒ¢ãƒ¼ãƒˆãƒ–ラウザã«ã‚‚å—ä¿¡ã•れãªã„å ´åˆã§ã‚‚〠常ã«ã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œå®Œäº†ã¾ã§å®Ÿè¡Œã™ã‚‹æ–¹ãŒä¾¿åˆ©ã§ã‚ã‚‹ã“ã¨ãŒã‚りã¾ã™ã€‚ ã—ã‹ã—ã€ãƒ‡ãƒ•ォルトã®å‹•作ã¯ãƒªãƒ¢ãƒ¼ãƒˆã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã®æŽ¥ç¶šãŒæ–ã¨ãªã£ãŸéš›ã«ã‚¹ã‚¯ãƒªãƒ—ト ã®å®Ÿè¡Œã¯ç ´æ£„ã•れã¾ã™ã€‚ ã“ã®å‹•作ã¯ã€php.ini ディレクティブ ignore_user_abort ã«ã¦ è¨å®šã§ãã¾ã™ã€‚ åŒæ§˜ã«åŒã˜æ„味を有ã™ã‚‹ Apache .conf ディレクティブ "php_value ignore_user_abort" ã¾ãŸã¯ ignore_user_abort() 関数ã«ã¦è¨å®šã™ã‚‹ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ PHP ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚ˆã‚‹ç ´æ£„を無視ã™ã‚‹ã‚ˆã†ã«è¨å®šã—ã¦ã„ãªã„å ´åˆã€ ユーザãŒç ´æ£„ã—ãŸå ´åˆã€ã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡Œã¯çµ‚了ã—ã¾ã™ã€‚ 一ã¤ã®ä¾‹å¤–ã¯ã€register_shutdown_function() を用ã„㦠シャットダウン関数を定義ã—ãŸå ´åˆã§ã™ã€‚ シャットダウン関数を定義ã—ãŸå ´åˆã€ãƒªãƒ¢ãƒ¼ãƒˆãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒ STOP ボタンを押ã—ãŸå¾Œã€ 次ã«ã‚¹ã‚¯ãƒªãƒ—トãŒä½•ã‹å‡ºåŠ›ã‚’è¡ŒãŠã†ã¨ã—ãŸå ´åˆã€PHP ã¯æŽ¥ç¶šãŒç ´æ£„ã•れãŸã“ã¨ã‚’検知ã—〠シャットダウン関数ãŒã‚³ãƒ¼ãƒ«ã•れã¾ã™ã€‚ ã“ã®ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³é–¢æ•°ã¯ã€ã‚¹ã‚¯ãƒªãƒ—ãƒˆãŒæ£å¸¸ã«çµ‚了ã—㟠際ã«ã‚‚コールã•れã¾ã™ã€‚ ã“ã®ãŸã‚ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã‚’切æ–ã—ãŸå ´åˆã«åˆ¥ã®å‹•作をã•ã›ãŸã„å ´åˆã« ã¯ã€connection_aborted() 関数を使用ã™ã‚‹ã“ã¨ãŒ å¯èƒ½ã§ã™ã€‚ ã“ã®é–¢æ•°ã¯ã€æŽ¥ç¶šãŒç ´æ£„ã•れãŸå ´åˆã«ã€TRUE ã‚’è¿”ã—ã¾ã™ã€‚ スクリプトã¯ã€çµ„ã¿è¾¼ã¿ã®ã‚¹ã‚¯ãƒªãƒ—トタイマーã«ã‚ˆã£ã¦ã‚‚終了ã™ã‚‹ã“ã¨ãŒ ã§ãã¾ã™ã€‚デフォルトã®ã‚¿ã‚¤ãƒ アウトã¯ã€30 ç§’ã§ã™ã€‚ ã“れã¯ã€php.iniディレクティブ max_execution_time ã¾ãŸã¯åŒç¾©ã® Apache .confディレクティブ"php_value max_execution_time" ã‚’ set_time_limit() 関数ã¨åŒæ§˜ã«ç”¨ã„ã‚‹ã“ã¨ã«ã‚ˆã‚Š å¤‰æ›´ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ タイマーãŒåˆ‡ã‚ŒãŸæ™‚ã€ã‚¹ã‚¯ãƒªãƒ—トã¯ä¸æ–ã•れã¾ã™ã€‚ 上記ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæŽ¥ç¶šã‚’切るケースã®ã‚ˆã†ã« シャットダウン関数ãŒç™»éŒ²ã•れã¦ã„ã‚‹å ´åˆã€ã“ã®é–¢æ•°ãŒã‚³ãƒ¼ãƒ«ã•れã¾ã™ã€‚ ã“ã®ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³é–¢æ•°ã®ä¸ã§ã¯ã€ connection_timeout() 関数ã®ã‚³ãƒ¼ãƒ«ã«ã‚ˆã‚Š ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãŒã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³é–¢æ•°ã®ã‚³ãƒ¼ãƒ«ã‚’生ã˜ã•ã›ã‚‹ã‹ã©ã†ã‹ã‚’ 確èªã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã“ã®é–¢æ•°ã¯ã€ã‚¿ã‚¤ãƒ アウトã«ã‚ˆã‚Šã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³é–¢æ•°ãŒã‚³ãƒ¼ãƒ«ã•ã‚ŒãŸ å ´åˆã« TRUE ã‚’è¿”ã—ã¾ã™ã€‚ ã‚‚ã†ä¸€ã¤æ³¨æ„ã™ã¹ã点ã¯ã€çŠ¶æ…‹ ABORTED ãŠã‚ˆã³ TIMEOUT ã¯åŒæ™‚ã«ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã«ã§ãã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚ ã“れã¯ã€PHP をユーザーã«ã‚ˆã‚‹ä¸æ–を無視ã™ã‚‹ã‚ˆã†è¨å®šã—ãŸå ´åˆã« å¯èƒ½ã§ã™ã€‚ PHP ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæŽ¥ç¶šã‚’ç ´æ£„ã—ã¦ã„ã‚‹ãŒã€ã‚¹ã‚¯ãƒªãƒ—ト㯠実行ã—ã¤ã¥ã‘ã‚‹ã¨ã„ã†ã“ã¨ãŒã‚ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã™ã‚‹ å¿…è¦ãŒã‚りã¾ã™ã€‚ 時間制é™ã«ã‹ã‹ã£ã¦ä¸æ–ã•ã‚Œã‚‹å ´åˆã€ã‚‚ã—ã‚れã°ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³é–¢æ•°ãŒ コールã•れã¾ã™ã€‚ ã“ã“ã§ã€connection_timeout() ãŠã‚ˆã³ connection_aborted() 㯠TRUE ã‚’è¿”ã—ã¾ã™ã€‚ connection_status() を使用ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ 一回ã®ã‚³ãƒ¼ãƒ«ã§ä¸¡æ–¹ã®çŠ¶æ…‹å¤‰æ•°ã‚’ç¢ºèªã§ãã¾ã™ã€‚ ã“ã®é–¢æ•°ã¯ã€ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªçŠ¶æ…‹å¤‰æ•°ã®ãƒ“ットフィールドを返ã—ã¾ã™ã€‚ 例ãˆã°ã€çŠ¶æ…‹å¤‰æ•°ãŒä¸¡æ–¹å…±ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªå ´åˆã€3 ã‚’è¿”ã—ã¾ã™ã€‚
|