当前位置:  开发笔记 > 编程语言 > 正文

如何检查服务器是否正在执行PHP脚本?

如何解决《如何检查服务器是否正在执行PHP脚本?》经验,为你挑选了1个好方法。

我正在运行一个需要将数据写入缓存的cronjob.我想把这个cronjob放在我的私人文件夹中,但是,即使在CHMODding私人文件夹中的缓存文件夹之后,它也没有获得写权限.这似乎是一些plesk功能.

所以,现在我把cronjob放在公共文件夹中.但是,我需要确保只有服务器才能执行脚本.在cronjob顶部的下面怎么样?

if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']) die();

这似乎有效.然而,它是否不可开发,例如.用户可以操纵他的remote_addr到我的服务器吗?或者有更好的方法来检查这个?

我遇到的另一个问题是上面的代码返回2个警告,即使它似乎确实有效:

PHP Notice:  Undefined index:  SERVER_ADDR in ... on line 2
PHP Notice:  Undefined index:  REMOTE_ADDR in ... on line 2

知道是什么原因造成的吗?



1> James Socol..:

通过控制台而不是Web服务器执行脚本.

cron看起来像这样:

*/5 * * * * php -f /path/to/cron.php

然后该文件可以这样做:

cron.php:


这将保证它只由服务器运行.

编辑以回应评论

通常,您无法访问私有文件夹中的公用文件夹,如果无法在Web根目录之外添加新目录,则必须以另一种方式保护缓存目录.

我将假设您的所有文件都在Web根目录中,即:/home/site/publichtml.用你的目录替换它.

创建一个新目录/home/site/publichtml/.cache.将以下内容添加为.htaccess文件:

Deny from all

现在,您的脚本应该能够从文件系统访问该文件夹,但它无法通过Web服务器访问.

如果你可以在服务器上设置一个cron作业(通过网络管理员或其他方式,听起来像你可以的话),如上所述,即:php -f /home/site/publichtml/cron.php用作命令,并包括对数组键的检查.

或者,您可以这样检查:

if ( !isset($_SERVER['argc']) )
    die("Must be run from the command line!\n");

$_SERVER['argc'] 仅在从命令行执行脚本时设置.

如果你可以将cron脚本保留在web根目录之外,那就好了.如果没有,那应该是安全的.

最后,要摆脱E_NOTICES,将其添加到cron.php的顶部:

error_reporting(E_ALL ^ E_NOTICE); // Turn off notices

要么

error_reporting(0); // Hide all error reporting

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有