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;
- }
- ?>
参考资料