PHP代码,用于停止从浏览器运行脚本

Abh*_*hvi 5 php browser cron

Envoirnment:Linux,PHP

场景:我编写了一个将被设置为cron的脚本.现在的情况是,我希望脚本只能通过cron而不是通过任何浏览器(包括移动浏览器的任何Web浏览器)运行.所以我正在寻找像browserValidate这样的函数.

该脚本是用MVC框架编写的,将作为

/usr/bin/GET http://xyz.com/abc/pqr
Run Code Online (Sandbox Code Playgroud)

请帮我解决一下这个.

提前致谢.

Dav*_*dom 8

正如@Mob所说,实现这一目标的确定方法是将脚本放在无法通过Web服务器访问的位置.如果无法做到这一点,或者由于某种原因您不想这样做,则需要检测脚本是通过Web服务器还是通过命令行调用的.

我最喜欢的方法(有很多)是:

$isRunningFromBrowser = !isset($GLOBALS['argv']);
Run Code Online (Sandbox Code Playgroud)

这意味着如果$isRunningFromBrowser为true,则只需退出/返回错误消息/等等.


Lin*_*een 6

从crontab中执行脚本时,您可以使用$_SERVERsuperglobal来检查Apache生成的条目(HTTP_*)或 - 因为$_SERVER反映了执行二进制文件的环境 - 在执行之前定义某个环境变量:

# in the crontab
FOOVAR=1 /usr/bin/php5 script.php
Run Code Online (Sandbox Code Playgroud)

然后,在script.php中,检查是否FOOVAR存在:

if (!isset($_SERVER['FOOVAR']))
   die('No browser access.');
Run Code Online (Sandbox Code Playgroud)

如果您的cronjob正在执行wget并且客户端IP是服务器,则可以将其添加到.htaccess文件中:

SetEnvIf Remote_Addr "192.168.0.1" FOOVAR=1
Run Code Online (Sandbox Code Playgroud)

FOOVAR仅当客户端的IP地址为"192.168.0.1"时才会设置此项.