如何使一个PHP文件只能在CLI模式下运行?

16

它可以在浏览器中使用,

但我不希望用户浏览时执行它,

比如在浏览时应该退出,

有没有一种方法可以检测当前是否处于命令行模式?

4个回答

12

以下是我长期以来一直在使用的(自 PHP4 以来,如果我没记错的话)...

(PHP_SAPI !== 'cli' || isset($_SERVER['HTTP_USER_AGENT'])) && die('cli only');
作为PHP脚本的第一行。

这一直以来都是最完美的解决方案! - undefined

2

这里有一个技巧:

您可以检查在CLI模式下始终可用的$argc/$argv参数。

#!/usr/bin/php
<?php 

ini_set('register_argc_argv', 0);  

if (!isset($argc) || is_null($argc))
{ 
    echo 'Not CLI mode';
} else {
    echo 'CLI mode';
}

register_argc_argv

$argc


3
为什么要在INI设置中纠缠不清,当php_sapi_name()正是为了这个目的而设计的呢? - Ben Blank
还有一个问题,使用这种方式,在Zend中进行调试时,即使实际上是CLI模式,它也被视为“非CLI模式”。 - omg

2
另一个技巧是,$_SERVER 变量只在CLI模式下设置。

1
if (!defined('STDIN')) {
    // accessed through the web browser
    die();
}

我在创建 PHP CLI 脚本时使用它。效果非常好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接