2014
Mar
19
有一天底層的 PHP Core Library 發現一個 Bug ,有工程師為了 Command Line 測試方便,加入了一行判定 Command Line Mode 的程式,但是他卻是這樣寫的。
php cli
- if ( isset($_SERVER['argc']) {
- //cli mode
- execute('xxx');
- }
這個寫法是有問題的,當我使用 Browser 打開頁面,執行 Apache PHP Module 時,$_SERVER['argc'] 的值會等於 0 ,然後程式就進入了 Command Line Mode,於是 Bug 就出現了 ...
後來我查詢了 PHP 官網的正確寫法,應該是要使用 PHP_SAPI 的變數,如果你是用 Apache PHP module 執行 PHP , PHP_SAPI 的值會等於 apache2handler,而使用 php index.php 這種 Command Line 執行時, PHP_SAPI 的值會等於 cli
Example
- <?php
- if (PHP_SAPI != "cli") {
- exit;
- }
另一種PHP Command line mode 判定方式。
Example
- <?php
- $cli_mode = false;
- if ( isset($_SERVER['argc']) && $_SERVER['argc']>=1 ) {
- $cli_mode = true;
- }
- ?>
參考資料
回應 (Leave a comment)