PHP - 通过cron job自动检测主目录

3

我有一个php脚本,使用Cpanel界面创建了一个定时任务,每5分钟运行一次这个php脚本。我的问题是,目前我必须手动在脚本的开头设置根目录的路径,类似于:

$root = '/var/home/www/site/';

那么我使用$root作为路径引用任何包含/脚本。问题是我有一个开发盒子用于测试脚本,然后将其上传到主服务器。每次我都必须记住手动更改$root变量以正确的根路径在主服务器上。有没有办法自动执行此操作,以便我不必手动更新脚本?我尝试查看是否可以使用$_SERVER['REMOTE_ADDR']获取IP地址,但该值为空,而$_SERVER['DOCUMENT_ROOT']值显示为 /

4个回答

1

我认为你正在寻找getcwd()。它会返回当前工作目录。


0

你可以在 crontab 文件中定义环境变量。在 crontab 的开头添加:

MY_BASE_DIR = "/var/home/www/site/"

现在在PHP脚本中,你可以通过查看以下内容来获取:

$_ENV['MY_BASE_DIR']

知道你可以在生产/开发服务器上定义相同的变量,或者如果存在环境变量,则可以让脚本查找并使用它,否则回退到默认值。


0
如果这是一个cron job,我猜最安全的方法应该是使用dirname(__FILE__)(或者像James和Alix说的那样,对于PHP >= 5.3,使用__DIR__)- 它会返回运行脚本所在的目录。

2
自从PHP 5.3.0版本以后,就有了__DIR__,它会返回与dirname(__FILE__)完全相同的结果。 - James C
1
在 PHP 5.3+ 中,您也可以使用 __DIR__ - Alix Axel

-1

您可以使用这两个变量之一来在不同的环境之间切换:

$_SERVER['SERVER_ADDR']

当前脚本正在执行的服务器的IP地址。
$_SERVER['SERVER_NAME']

当前脚本正在执行的服务器主机名。如果脚本在虚拟主机上运行,则该值将为该虚拟主机定义的值。

我不确定这些是否在CRON / php-cli下定义,但另一种方法可能是检查文件夹是否存在:

$root = (is_dir('/var/home/www/site/')) ? '/var/home/www/site/' : '/dev/site/';

@Cfreak:并不完全正确,其中有些是。 - Alix Axel
请注意,此答案不可靠。 - stonyau

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