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

13 浏览
0 Comments

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

它可以在浏览器中使用,但我不希望用户在浏览时执行它,也就是说,在浏览时应该退出,有没有办法检测当前是否处于命令行模式?

0
0 Comments

在CLI模式下,可以通过$_SERVER变量来判断PHP文件是否可通过CLI模式运行。$_SERVER是一个包含了服务器和执行环境信息的数组,其中的变量在不同的运行环境中有不同的值。

问题的原因是,有时候我们希望限制某些PHP文件只能通过CLI模式运行,而不能通过其他方式访问。这可能是因为这些文件包含敏感信息,或者执行特定的任务,只适合在命令行中运行。

解决方法是使用$_SERVER变量中的一个特定变量来判断是否处于CLI模式。在CLI模式下,$_SERVER['HTTP_USER_AGENT']和$_SERVER['REMOTE_ADDR']等变量是未定义的,因此可以利用这一特点来判断。

下面是一个示例代码,演示了如何判断PHP文件是否可通过CLI模式运行:


在上述代码中,通过判断$_SERVER['HTTP_USER_AGENT']和$_SERVER['REMOTE_ADDR']是否未定义,来确定是否处于CLI模式。如果两个变量都未定义,那么表示该PHP文件可通过CLI模式运行。

通过这种方式,我们可以确保敏感的PHP文件只能通过CLI模式运行,从而提高安全性。同时,这也为我们提供了一种控制PHP文件访问方式的方法,可以根据需要限制特定文件的访问方式。

0
0 Comments

在CLI模式下仅使PHP文件可运行的方法

有时候我们希望将PHP文件设置为只能在命令行界面(CLI)下运行,而不能通过web浏览器访问。下面是一个解决方法:

我们可以通过检查$argc/$argv参数来判断当前是否在CLI模式下。$argc表示命令行参数的个数,$argv是一个包含所有命令行参数的数组。在CLI模式下,这两个参数总是可用的。

以下是一个示例代码:

#!/usr/bin/php

在这段代码中,首先通过ini_set函数将register_argc_argv设置为0,以确保$argc和$argv参数在CLI模式下可用。然后通过判断$argc是否存在或为null来判断当前是否在CLI模式下,如果是则输出"CLI mode",否则输出"Not CLI mode"。

通过以上方法,我们可以将PHP文件设置为仅能在CLI模式下运行。

除了上述方法,还有一种更简单的方式,即使用php_sapi_name()函数。这个函数是专门用于判断PHP运行的方式的。以下是一个示例代码:

#!/usr/bin/php

在这段代码中,我们直接使用php_sapi_name()函数判断当前PHP运行的方式是否为CLI模式,如果不是则直接退出程序并输出提示信息。

需要注意的是,使用上述方法时,在Zend调试模式下,可能会将CLI模式误判为非CLI模式。因此,如果需要在Zend调试模式下进行调试,建议使用第一种方法来判断CLI模式。

参考资料:

- [register_argc_argv](http://fr2.php.net/manual/en/ini.core.php#ini.register-argc-argv)

- [$argc](http://fr2.php.net/manual/en/reserved.variables.argc.php)

0
0 Comments

PHP文件只能在命令行模式下运行的原因是为了限制对该文件的访问方式,只允许通过命令行执行。通过这种方式可以确保脚本只能在命令行环境中运行,而不能通过HTTP请求来执行。

要使PHP文件只能在命令行模式下运行,可以在文件的第一行添加以下代码:

(PHP_SAPI !== 'cli' || isset($_SERVER['HTTP_USER_AGENT'])) && die('cli only');

这段代码的作用是,如果PHP运行的环境不是命令行模式,或者存在`$_SERVER['HTTP_USER_AGENT']`变量(表示通过HTTP请求访问),则终止脚本的执行并输出 "cli only"。

通过这种方式,即使PHP文件被包含在其他脚本中,也能够确保该文件只能在命令行模式下执行。这对于需要在特定环境中运行的脚本非常有用,例如定时任务或命令行工具。

0