<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 覆寫INI_SYSTEM和INI_PERDIR選項 在上一章中, 你曾經使用zend_alter_ini_setting()修改過?些php的ini選項. 由于samp/embed直接將你的腳本推入了運行時模式, 因此許多重要的INI選項在控制返回到你的應用 時并沒有被修改. 為了修改這些值, 就需要在主引擎啟動之后而請求啟動之前執行代碼. 有一種方式是拷貝php_embed_init()的內容到你的應用中, 在你的本地拷貝中做必要 的修改, 接著使用你修改后的版本替代它. 當然這種方式可能會有問題. 首先也是最重要的, 你實際已經對別人的部分代碼做了分支, 然而可能別人還會向其 中添加新的代碼. 現在, 你就不再是只維護自己的應用了, 還需要保持分支出來的代碼和主 分支保持一致. 幸運的是, 還有幾種更簡單的方法: #### 覆寫默認的php.ini文件 因為嵌入式和其他的php sapi實現一樣都是sapi, 它通過?個sapi_module_struct掛入 到引擎中. 嵌入式SAPI定義并設置了這個結構體的一個實例, 你的應用可以在調用 php_embed_init()之前訪問它. 在這個結構體中, 有一個名為php_ini_path_override的char *類型字段. 為了讓嵌入的 請求使用你的可選文件擴展php和Zend, 只需要在調用php_embed_init()之前將這個字段 設置為NULL終止的字符串. 下面是embed4.c中修改版的startup_php()函數: ````c static void startup_php(void) { /* Create "dummy" argc/argv to hide the arguments * meant for our actual application */ int argc = 1; char *argv[2] = { "embed4", NULL }; php_embed_module.php_ini_path_override = "/etc/php_embed4.ini"; php_embed_init(argc, argv PTSRMLS_CC); } ```` 這就使得每個使用嵌入庫的應用可以保持自定義, 而不用將自己的配置暴露給別人. 相反, 如果你想要你的應用不使用php.ini, 只需要設置php_embed_module的 php_ini_ignore字段, 這樣所有的設置都將使用內建的默認值, 除非由你的應用手動進行修改. #### 覆寫嵌入啟動 sapi_module_struct結構還包含?些回調函數, 下面是其中4個在PHP啟動和終止階段 比較有用的回調: ````c /* From main/SAPI.h */ typedef struct _sapi_module_struct { ... int (*startup)(struct _sapi_module_struct *sapi_module); int (*shutdown)(struct _sapi_module_struct *sapi_module); int (*activate)(TSRMLS_D); int (*deactivate)(TSRMLS_D); ... } sapi_module_struct; ```` 這些方法的名字熟悉嗎? 它們對應于擴展的MINIT, MSHUTDOWN, RINIT, RSHUTDOWN, 并且和對應在擴展生命周期中的階段?致. 要利用這些鉤子, 可以如下修 改embed4中的startup_php()函數: ````c static int (*original_embed_startup)(struct _sapi_module_struct *sapi_module); static int embed4_startup_callback(struct _sapi_module_struct *sapi_module) { /* 首先調用原來的啟動回調, 否則環境未就緒 */ if (original_embed_startup(sapi_module) == FAILURE) { /* 這里可以做應用的失敗處理 */ return FAILURE; } /* 調用原來的embed_startup實際上讓我們進入到ACTIVATE階段而不是STARTUP階段, * 但是我們仍然可以修改多數INI_SYSTEM和INI_PERDIR選項. */ zend_alter_ini_entry("max_execution_time", sizeof("max_execution_time"), "15", sizeof("15") - 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); zend_alter_ini_entry("safe_mode", sizeof("safe_mode"), "1", sizeof("1") - 1, PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE); return SUCCESS; } static void startup_php(void) { /* 創建假的argc/argv, 隱藏應用實際的參數 */ int argc = 1; char *argv[2] = { "embed4", NULL }; /* 使用我們自己的啟動函數覆寫標準的啟動方法, 但是保留了原來的指針, 因此它仍然能夠被調用到 */ original_embed_startup = php_embed_module.startup; php_embed_module.startup = embed4_startup_callback; php_embed_init(argc, argv PTSRMLS_CC); } ```` 使用safe_mode, open_basedir這樣的選項, 以及其他用以限制獨立腳本行為的選項, 可以讓你的應用更加安全可靠. ## links * [目錄](<preface.md>) * 20.3 [初始化php](<20.3.md>) * 20.5 [捕獲輸出](<20.5.md>)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看