![]()
|
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7">
付録 EPHP 3ã®æ‹¡å¼µPHP 3ã¸ã®é–¢æ•°ã®ä»˜åŠé–¢æ•°ãƒ—ãƒãƒˆã‚¿ã‚¤ãƒ—å…¨ã¦ã®é–¢æ•°ã¯æ¬¡ã®ã‚ˆã†ãªå½¢å¼ã§ã™ã€‚
関数ã®å¼•数引数ã¯å¸¸ã«pvalåž‹ã§ã™ã€‚ã“ã®åž‹ã¯ã€å®Ÿéš›ã®å¼•æ•°ã®åž‹ã‚’メンãƒãƒ¼ã¨ã™ã‚‹ unionを有ã—ã¦ã„ã¾ã™ã€‚ 関数ãŒäºŒã¤ã®å¼•æ•°ã‚’å–ã‚‹å ´åˆã€é–¢æ•°ã®æœ€åˆã«æ¬¡ã®ã‚ˆã†ãªå‡¦ç†ã‚’ 行ãªã†ã“ã¨ã«ãªã‚Šã¾ã™ã€‚
渡ã•れãŸãƒ‘ラメータã®ã©ã‚Œã‹ã‚’変更ã™ã‚‹å ´åˆã€ å‚照渡ã—ã§ã‚ã‚‹ã‹ã€å€¤æ¸¡ã—ã§ã‚ã‚‹ã‹ã«ã‹ã‹ã‚らãšã€ pval_destructor をコールã™ã‚‹ã“ã¨ã«ã‚ˆã‚ŠåˆæœŸåŒ–ã™ã‚‹ã‹ã€ ARRAYã«ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã‚’åŠ ãˆãŸã„å ´åˆã«ã¯ã€ 返り値を ARRAYã¨ã—ã¦å‡¦ç†ã™ã‚‹ internal_functions.h ã®ä¸ã®é–¢æ•°ã«é¡žä¼¼ã®é–¢æ•°ã‚’使用ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ ã¾ãŸã€ãƒ‘ラメータを IS_STRING ã«å¤‰æ›´ã™ã‚‹å ´åˆã€ estrdup() ã•ã‚ŒãŸæ–‡å—åˆ—ã¨æ–‡å—列ã®é•·ã•を最åˆã«å‰²ã‚Šä»˜ã‘ãŸå¾Œã§å§‹ã‚㦠型を IS_STRING ã«å¤‰æ›´ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã‚ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。 ã™ã§ã« IS_STRING ã¾ãŸã¯ IS_ARRAY ã§ã‚ã‚‹ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ã®æ–‡å—列を 変更ã™ã‚‹å ´åˆã€æœ€åˆã« pval_destructor を実行ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ å¯å¤‰å¼•数関数ã¯ã€å¯å¤‰ã®æ•°ã®å¼•æ•°ã‚’ã¨ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã‚る関数㌠2 ã¤ã¾ãŸã¯ 3 ã¤ã®å¼•æ•°ã®ã©ã¡ã‚‰ã‹ã‚’ã¨ã‚‹å ´åˆã€ 次ã®ã‚ˆã†ã«ã—ã¦ãã ã•ã„。
引数ã®ä½¿ç”¨å„引数ã®åž‹ã¯ pval 型フィールドã«ä¿å˜ã•れã¾ã™ã€‚ ã“ã®åž‹ã¯ã€æ¬¡ã®ã©ã‚Œã‹ã¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 表 E-1PHP 内部ã®åž‹
ã‚ã‚‹åž‹ã®å¼•æ•°ã‚’å¾—ãŸãŒã€ä»–ã®åž‹ã§ä½¿ç”¨ã—ãŸã„å ´åˆã€ã¾ãŸã¯ã€ ãã®å¼•数を強制的ã«ã‚ã‚‹åž‹ã§ä½¿ç”¨ã—ãŸã„å ´åˆã€ 次ã®å¤‰æ›é–¢æ•°ã®ã©ã‚Œã‹ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ã“れらã®é–¢æ•°ã¯ã€å…¨ã¦ãã®å ´ã§å¤‰æ›ã•れã¾ã™ã€‚ 値ã¯å…¨ãè¿”ã•れã¾ã›ã‚“。 実引数ã¯ã€çµåˆä½“ã«ä¿æŒã•れã¾ã™ã€‚ メンãƒãƒ¼ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
関数ã«ãŠã‘るメモリー管ç†é–¢æ•°ã«ã‚ˆã‚Šå¿…è¦ã¨ã•れる全ã¦ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã¯ã€ emalloc() ã¾ãŸã¯ estrdup() ã®ã©ã¡ã‚‰ã‹ã«ã‚ˆã‚Š ç¢ºä¿ã•れる必è¦ãŒã‚りã¾ã™ã€‚ã“れらã®é–¢æ•°ã¯ã€ 通常㮠malloc() ãŠã‚ˆã³ strdup() 関数ã«ä¼¼ãŸ メモリー関連処ç†ã‚’è¡Œã†æŠ½è±¡é–¢æ•°ã§ã™ã€‚ メモリーã¯ã€efree() ã«ã‚ˆã‚Šé–‹æ”¾ã•れる必è¦ãŒã‚りã¾ã™ã€‚ ã“ã®ãƒ—ãƒã‚°ãƒ©ãƒ ã«ã¯ã€2種類ã®ãƒ¡ãƒ¢ãƒªãƒ¼ãŒã‚りã¾ã™ã€‚ ã¤ã¾ã‚Šã€ãƒ‘ーサーã«å¤‰æ•°ã¨ã—ã¦è¿”ã•れるメモリー㨠内部関数ã§ã®ä¸€æ¬¡çš„ãªè¨˜æ†¶é ˜åŸŸç”¨ã«å¿…è¦ãªãƒ¡ãƒ¢ãƒªãƒ¼ã§ã™ã€‚ æ–‡å—列をã‚る変数ã«ä»£å…¥ã—パーサーã«è¿”ã—ãŸã„å ´åˆã€ ã¾ãš emalloc() ã¾ãŸã¯ estrdup() ã®ã©ã¡ã‚‰ã‹ã«ã‚ˆã‚Š ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’ç¢ºä¿ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã“ã®ãƒ¡ãƒ¢ãƒªãƒ¼ã¯ã€åŒã˜é–¢æ•°ã«ãŠã„ã¦å…ƒã®ä»£å…¥å€¤ã‚’上書ãã—ãªã„é™ã‚Š é–‹æ”¾ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 (ã“ã®ç¨®ã®ãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°æ³•ã¯ã€æŽ¨å¥¨ã•れã¾ã›ã‚“。) 自分ã®é–¢æ•°ãƒ»ãƒ©ã‚¤ãƒ–ラリã§å¿…è¦ãªä¸€æ™‚的・永続的メモリを確ä¿ã™ã‚‹ãŸã‚ã«ã¯ã€ emalloc()ã€estrdup()ã€efree() 関数を使用ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã“れらã®é–¢æ•°ã¯ã€ãれãžã‚ŒãŒå¯¾å¿œã™ã‚‹é–¢æ•° (malloc,strdup,free) ã¨å…¨ãåŒã˜å‹•作をã—ã¾ã™ã€‚ emalloc() ã¾ãŸã¯ estrdup() を実行ã—ãŸå ´åˆã€ ãŸã ã—ã€ãƒ—ãƒã‚°ãƒ©ãƒ 実行終了時ã¾ã§ç¢ºä¿ã—ã¤ã¥ã‘ã‚‹ã¤ã‚‚りã§ã‚ã‚‹å ´åˆã‚’除ã〠ã©ã“ã‹ã§ efree() を行ã†å¿…è¦ãŒã‚りã¾ã™ã€‚ ã•ã‚‚ãªãã°ã€ãƒ¡ãƒ¢ãƒªãƒ¼ãƒªãƒ¼ã‚¯ã‚’èµ·ã“ã™å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ 関数ãŒå¯¾å¿œã™ã‚‹ãれãžã‚ŒãŒé–¢æ•°ã¨å…¨ãåŒã˜å‹•作をã™ã‚‹ã¨ã„ã†æ„味㯠次ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚ ã¤ã¾ã‚Šã€emalloc() ã‚‚ estrdup() ã‚‚ã•れã¦ã„ãªã„メモリーã«ã¤ã„㦠efree() を行ã£ãŸå ´åˆã€ã‚»ã‚°ãƒ¡ãƒ³ãƒ†ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ォルトを発生ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã“ã®ãŸã‚ã€æ¶ˆè²»ã—ãŸãƒ¡ãƒ¢ãƒªãƒ¼ã‚’解放ã™ã‚‹éš›ã«ã¯æ³¨æ„ã—ã¦ä¸‹ã•ã„。 "-DDEBUG" ã§ã‚³ãƒ³ãƒ‘イルã—ãŸå ´åˆã€PHP 3ã¯ã€æŒ‡å®šã—ãŸã‚¹ã‚¯ãƒªãƒ—トã®å®Ÿè¡ŒãŒ 終了ã—ãŸéš›ã«ã€emalloc() ãŠã‚ˆã³ estrdup() ã§ç¢ºä¿ã—ãŸãŒ efree() ã§ã¾ã 開放ã•れã¦ã„ãªã„全メモリーã®ãƒªã‚¹ãƒˆã‚’ 表示ã—ã¾ã™ã€‚ 変数ã®ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ルã¸ã®è¨å®šã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ルã«å¤‰æ•°ã‚’è¨å®šã™ã‚‹ã“ã¨ã‚’容易ã«ã™ã‚‹ãŸã‚㫠以下ã®ã‚ˆã†ãªãƒžã‚¯ãƒãŒç”¨æ„ã•れã¦ã„ã¾ã™ã€‚
PHP 3.0 ã®ã‚·ãƒ³ãƒœãƒ«ãƒ†ãƒ¼ãƒ–ルã¯ã€ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルã¨ã—ã¦å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚ ã„ã¤ãªã‚“ã©ãã§ã‚‚ &symbol_table 㯠'main' シンボルテーブルã¸ã® ãƒã‚¤ãƒ³ã‚¿ãƒ¼ã§ã‚りã€active_symbol_table ã¯ç¾åœ¨ã‚¢ã‚¯ãƒ†ã‚£ãƒ–㪠シンボルテーブルを指ã—ã¦ã„ã¾ã™ã€‚(ã“ã®äºŒã¤ã¯å®Ÿè¡Œé–‹å§‹æ™‚ã«ã¯åŒã˜ã§ã™ãŒã€ 関数ã®ä¸ã«ã„る時ã«ã¯ç•°ãªã£ã¦ã„ã¾ã™ã€‚) 次ã®ä¾‹ã¯ 'active_symbol_table' を使用ã—ã¾ã™ã€‚ 'main' シンボルテーブルを使用ã—ãŸã„å ´åˆã«ã¯ã€ ã“れを &symbol_table ã§ç½®ãã‹ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã¾ãŸã€ä»¥ä¸‹ã«èª¬æ˜Žã™ã‚‹ã‚ˆã†ã«åŒã˜é–¢æ•°ã‚’é…列ã«ã‚‚é©ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
シンボルテーブルã«é…列を新è¦ã«å®šç¾©ã—ãŸã„å ´åˆã€ 次ã®ã‚ˆã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã¾ãšã€hash_exists() ã¾ãŸã¯ hash_find() を用ã„㦠ãã®é…列ã®å˜åœ¨ã‚„ã€é©åˆ‡ã«é–‹æ”¾ã•れã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’ 確èªã™ã‚‹æ–¹ãŒè‰¯ã„ã§ã—ょã†ã€‚ 次ã«ã€ãã®é…列を次ã®ã‚ˆã†ã«åˆæœŸåŒ–ã—ã¾ã™ã€‚
ä»¥ä¸‹ã«æ–°ã—ã„エントリをã“ã®é…列ã«åŠ ãˆã‚‹ä¾‹ã‚’示ã—ã¾ã™ã€‚
hash_next_index_insert() ã¯ã€PHP 2.0 ã® "$foo[] = bar;" ã¨ã»ã¼åŒã˜ãƒã‚¸ãƒƒã‚¯ã‚’用ã„ã¦ã„ã¾ã™ã€‚ 関数ã‹ã‚‰é…åˆ—ã‚’è¿”ã™æ§‹æˆã¨ã™ã‚‹å ´åˆã€ 以下ã®ã‚ˆã†ã«ã™ã‚‹ã ã‘ã§é…列ã®åˆæœŸåŒ–を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚
ç¶šã„ã¦ã€ãƒ˜ãƒ«ãƒ‘ー関数を用ã„ã¦å€¤ã‚’ä»˜åŠ ã—ã¾ã™ã€‚
ã‚‚ã¡ã‚ã‚“ã€ä»˜åŠ ãŒé…列ã®åˆæœŸåŒ–直後ã«è¡Œã‚れãªã„å ´åˆã«ã¯ã€ é…列をã¾ãšç¢ºèªã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã§ã—ょã†ã€‚
hash_find 㯠pval ãƒã‚¤ãƒ³ã‚¿ã¸ã®ãƒã‚¤ãƒ³ã‚¿ã‚’å—ã‘å–り〠pval ãƒã‚¤ãƒ³ã‚¿ã§ã¯ãªã„ã“ã¨ã«æ³¨æ„ã—ã¦ä¸‹ã•ã„。 ã»ã¨ã‚“ã©å…¨ã¦ã®ãƒãƒƒã‚·ãƒ¥é–¢æ•°ã¯ã€SUCCESSã¾ãŸã¯FAILUREã‚’è¿”ã—ã¾ã™ã€‚ (ãŸã ã—ã€è«–ç†å€¤ã‚’返㙠hash_exists() を除ãã¾ã™ã€‚) ç°¡å˜ãªå€¤ã‚’è¿”ã™å ´åˆé–¢æ•°ã‹ã‚‰ã®è¿”り値を作æˆã™ã‚‹ã“ã¨ã‚’容易ã«ã™ã‚‹ãŸã‚㮠複数ã®ãƒžã‚¯ãƒãŒåˆ©ç”¨å¯èƒ½ã§ã™ã€‚ RETURN_* マクãƒã¯ã€å…¨ã¦è¿”り値をセットã—関数ã‹ã‚‰æˆ»ã‚Šã¾ã™ã€‚
RETVAL_* マクãƒã¯è¿”り値をセットã—ã¾ã™ãŒã€é–¢æ•°ã‹ã‚‰æˆ»ã‚Šã¾ã›ã‚“。
ä¸Šè¨˜ã®æ–‡å—列マクãƒã¯ã€å…¨ã¦ 's' 引数㫠estrdup() を行ã„ã¾ã™ã€‚ ã“ã®ãŸã‚ã€ãƒžã‚¯ãƒã‚’コールã—ãŸå¾Œã€å¼•数を安全ã«é–‹æ”¾ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ä»–ã®é¸æŠžè‚¢ã¨ã—ã¦ã¯ã€é™çš„ã«ç¢ºä¿ã•れãŸãƒ¡ãƒ¢ãƒªã‚’使用ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ 関数ãŒè«–ç†å€¤ã¨ã—ã¦æˆåŠŸ/エラーã®å¿œç”ã‚’è¿”ã™å ´åˆã€ ãれãžã‚Œ RETURN_TRUE ãŠã‚ˆã³ RETURN_FALSE を使用ã™ã‚‹ã‚ˆã†ã«ã—ã¦ä¸‹ã•ã„。 複雑ãªå€¤ã‚’è¿”ã™å ´åˆé–¢æ•°ã¯ã‚ªãƒ–ジェクトやé…列ã¨ã„ã£ãŸè¤‡é›‘ãªãƒ‡ãƒ¼ã‚¿åž‹ã‚’è¿”ã™ã“ã¨ã‚‚å¯èƒ½ã§ã™ã€‚ オブジェクトを返ã™ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
オブジェクトをæ“作ã™ã‚‹ãŸã‚ã®é–¢æ•°ã‚’以下ã«ç¤ºã—ã¾ã™ã€‚
é…列を返ã™ã«ã¯æ¬¡ã®ã‚ˆã†ã«ã—ã¾ã™ã€‚
é…列を用ã„ã‚‹ãŸã‚ã®é–¢æ•°ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
リソースリストã®ä½¿ç”¨æ³•PHP 3.0 ã¯æ§˜ã€…ãªåž‹ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’処ç†ã™ã‚‹æ¨™æº–çš„ãªæ‰‹æ®µã‚’有ã—ã¦ã„ã¾ã™ã€‚ ã“ã®æ‰‹æ®µã¯ã€PHP 2.0 ã®ãƒªãƒ³ã‚¯ä»˜ãƒªã‚¹ãƒˆã‚’完全ã«ç½®ãã‹ãˆã‚‹ã‚‚ã®ã§ã™ã€‚ 利用å¯èƒ½ãªé–¢æ•°:
典型的ãªã‚³ãƒ¼ãƒ‰ã¯ã€æ¬¡ã®ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚
æŒç¶šçš„リソーステーブルã®ä½¿ç”¨PHP 3.0 ã¯ã€æŒç¶šçš„リソース(ã™ãªã‚ã¡ã€ã‚¢ã‚¯ã‚»ã‚¹é–“ã¯ä¿æŒã•れるリソース) ã‚’ä¿å˜ã™ã‚‹æ¨™æº–çš„ãªæ‰‹æ®µã‚’有ã—ã¦ã„ã¾ã™ã€‚ ã“ã®æ©Ÿèƒ½ã‚’用ã„ãŸæœ€åˆã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€MySQL モジュールã§ã‚り〠mSQL ãŒå¾Œã«ç¶šãã¾ã—ãŸã€‚ ã“ã®ãŸã‚ã€mysql.c ã‚’èªã‚€ã“ã¨ã«ã‚ˆã‚ŠæŒç¶šçš„リソースã®å¿…è¦æ€§ã«é–¢ã™ã‚‹ ä¸€èˆ¬çš„ãªæ„Ÿè¦šã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ 見る必è¦ãŒã‚ã‚‹é–¢æ•°ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
æŒç¶šçš„モジュールã®ä¸€èˆ¬çš„ãªè€ƒãˆã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
mysql.c ã‚’èªã‚€ã¨ã€ã‚ˆã‚Šè¤‡é›‘ãªæŽ¥ç¶šé–¢æ•°ã‚’é™¤ã„ã¦ã¯ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä»–ã®éƒ¨åˆ†ã‚’ 変更ã™ã‚‹å¿…è¦ãŒãªã„ã¨ã„ã†ã“ã¨ãŒåˆ†ã‹ã‚‹ã§ã—ょã†ã€‚ 'list' ㌠'plist' ã«ç½®ãã‹ãˆã‚‰ã‚Œã‚‹ã ã‘ã§ã€ å…¨ãåŒã˜ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェースãŒã€æ¨™æº–リソースリスト㨠æŒç¶šçš„リソースリストã«å˜åœ¨ã—ã¾ã™ã€‚
ã—ã‹ã—ã€æŒç¶šçš„モジュールを実装ã—よã†ã¨ã™ã‚‹éš›ã« ã“れらã®é–¢æ•°ãŒå½¹ã«ç«‹ãŸãªã„ã“ã¨ãŒã‚ã‹ã‚‹å ´åˆã‚‚ã‚りãˆã¾ã™ã€‚ 通常ã®å ´åˆã€æŒç¶šçš„リソースリストãŒãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ルãã®ã‚‚ã®ã§ã‚ã‚‹ ã¨ã„ã†äº‹å®ŸãŒåˆ©ç”¨ã•れã¾ã™ã€‚ 例ãˆã°ã€MySQL/mSQL モジュールã«ãŠã„ã¦ã€pconnect() コール(æŒç¶šçš„æŽ¥ç¶š) ãŒã‚ã£ãŸå ´åˆã€ãã®é–¢æ•°ã¯ã€é–¢æ•°ã«æ¸¡ã•れるホスト・ユーザー・パスワード ã‹ã‚‰æ–‡å—列を作æˆã—ã¾ã™ã€‚ãã—ã¦ã€ã“ã®æ–‡å—列をã‚ーã¨ã—㦠SQL リンクをãƒãƒƒã‚·ãƒ¥ã«åŠ ãˆã¾ã™ã€‚ 次ã«èª°ã‹ãŒ pconnect() ã‚’åŒã˜ãƒ›ã‚¹ãƒˆãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ãƒ‘スワードã§ã‚³ãƒ¼ãƒ« ã—ãŸå ´åˆã€åŒã˜ã‚ーãŒç”Ÿæˆã•れã¾ã™ã€‚ ã“ã®å ´åˆã€ã“ã®é–¢æ•°ã¯æŒç¶šçš„リンクã®ãƒªã‚¹ãƒˆã«ã‚ã‚‹ SQL リンクを見ã¤ã‘ã¾ã™ã€‚ より詳細ãªè¨˜è¿°ãŒè¡Œã‚れるよã†ã«ãªã‚‹ã¾ã§ã€ plist ã®ãƒãƒƒã‚·ãƒ¥ãƒ†ãƒ¼ãƒ–ル機能ã®ä½¿ç”¨æ³•を知るãŸã‚ã«ã¯ã€ mysql.c ã¾ãŸã¯ msql.c を見る必è¦ãŒã‚りã¾ã™ã€‚ 注æ„ã™ã¹ãé‡è¦ãªç‚¹:æŒç¶šçš„リソースリストã«åŠ ãˆã‚‰ã‚Œã‚‹ãƒªã‚½ãƒ¼ã‚¹ã¯ã€ PHP ã®ãƒ¡ãƒ¢ãƒªãƒ¼ãƒžãƒãƒ¼ã‚¸ãƒ£ã§ç¢ºä¿ã•れãŸã‚‚ã®ã§ã‚ã£ã¦ã¯ãªã‚Šã¾ã›ã‚“。 ã™ãªã‚ã¡ã€emalloc(),estrdup()ç‰ã§ç”Ÿæˆã•れãŸã‚‚ã®ã§ã‚ã£ã¦ã¯ãªã‚Šã¾ã›ã‚“。 ã‚€ã—ã‚ã€é€šå¸¸ã® malloc(),strdup() ç‰ã‚’使用ã™ã‚‹ã¹ãã§ã™ã€‚ ãã®ç†ç”±ã¯å˜ç´”ã§ã™ã€‚リクエストã®çµ‚了時(ヒットã®çµ‚了時)ã« PHP ã®ãƒ¡ãƒ¢ãƒªãƒ¼ãƒžãƒãƒ¼ã‚¸ãƒ£ã‚’使用ã—ã¦ç¢ºä¿ã•れãŸå…¨ã¦ã®ãƒ¡ãƒ¢ãƒªãƒ¼é ˜åŸŸã¯ã€ 削除ã•れるã‹ã‚‰ã§ã™ã€‚ æŒç¶šçš„リストã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®çµ‚äº†æ™‚ã«æ¶ˆåŽ»ã•れるよã†ã«ã¯ãªã£ã¦ã„ãªã„ã®ã§ã€ ã“ã®ã‚ˆã†ãªãƒªã‚½ãƒ¼ã‚¹ç¢ºä¿ã™ã‚‹ãŸã‚ã« PHPã®ãƒ¡ãƒ¢ãƒªãƒ¼ãƒžãƒãƒ¼ã‚¸ãƒ£ã‚’使用ã™ã‚‹ã¹ãã§ã¯ã‚りã¾ã›ã‚“。 æŒç¶šçš„リストã«åŠ ãˆã‚ˆã†ã¨ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’登録ã™ã‚‹éš›ã«ã€ éžæŒç¶šçš„ãƒªã‚¹ãƒˆã¨æŒç¶šçš„リストã®ä¸¡æ–¹ã«ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã‚’ åŠ ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ éžæŒç¶šçš„リストã®ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ã€ä½•ã‚‚ã™ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。 æŒç¶šçš„リストã®ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ã€ã“ã®åž‹ã«ã‚ˆã‚Šå¾—られãŸå…¨ã¦ã® リソース(例ãˆã°ã€ãƒ¡ãƒ¢ãƒªãƒ¼ã€SQLリンクã€ç‰)を開放ã™ã‚‹å¿…è¦ãŒ ã‚りã¾ã™ã€‚ éžæŒç¶šçš„リソースã¨å…¨ãåŒæ§˜ã«ã€å…¨ã¦ã®ãƒªã‚½ãƒ¼ã‚¹ã«ã¤ã„ã¦ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ ã‚’å‚™ãˆã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ç ´æ£„ã‚’è¦ã™ã‚‹å¿…è¦ãŒãªã„å ´åˆã«ã¯ã€ãƒ‡ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¯ç©ºã¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ emalloc() ã¨ãã®æ´¾ç”Ÿã—ãŸã‚‚ã®ã¯ã€æŒç¶šçš„リストã«é–¢é€£ã—㦠使用ã™ã‚‹ã¹ãã§ã¯ãªãã€ã“ã®ã‚ˆã†ãªå ´åˆã€efree() も使ã†ã¹ãã§ã¯ãªã„ã¨ã„ㆠã“ã¨ã‚’覚ãˆã¦ãŠã„ã¦ãã ã•ã„。 実行時è¨å®šå‘½ä»¤ã®è¿½åŠPHP 3ã®æ©Ÿèƒ½ã®å¤šãã¯ã€å®Ÿè¡Œæ™‚ã«è¨å®šã‚’行ã†ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ ã“れらã®è¨å®šç”¨å‘½ä»¤ã¯ã€php3.ini ファイルã¾ãŸã¯ã€Apache ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ç‰ˆã® å ´åˆã€Apache .conf ãƒ•ã‚¡ã‚¤ãƒ«ã«æ›¸ã‹ã‚Œã¦ã„ã¾ã™ã€‚ ã“ã® Apache .conf ファイルã®ä¸ã«ã“れらを記載ã™ã‚‹ã“ã¨ã®åˆ©ç‚¹ã¯ã€ ディレクトリ毎ã«è¨å®šãŒå¯èƒ½ãªã“ã¨ã§ã™ã€‚ ã“れã¯ã€ä¾‹ãˆã°ã‚るディレクトリã¯ã‚ã‚‹ safemodeexecdir ã‚’ 有ã—ã¦ã„ã‚‹ã¨ãã€ä»–ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã¯ã€åˆ¥ã®ã‚‚ã®ã‚’指定ã™ã‚‹ã“ã¨ãŒ ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ ã“ã®è¨å®šã®ãã‚ã®ç´°ã‹ã•ã¯ã€ã‚µãƒ¼ãƒãƒ¼ãŒè¤‡æ•°ã®ä»®æƒ³ãƒ›ã‚¹ãƒˆã‚’ サãƒãƒ¼ãƒˆã™ã‚‹å ´åˆã«ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚ æ–°ã—ã„å‘½ä»¤ã‚’åŠ ãˆã‚‹ãŸã‚ã«å¿…è¦ãªæ‰‹é †ã¯æ¬¡ã®ã‚ˆã†ãªã‚‚ã®ã§ã™ã€‚
|