通过crontab运行php页面并遇到if file_exists问题

时间:2012-04-27 17:19:03

标签: php crontab file-exists

我有一个问题......我每天都通过crobtab运行一个php页面,而且在运行此代码时我似乎得到了错误。

include(CLASS_PATH .'EmailAddressValidator.php');

所以我应用了这段代码......

if(file_exists('/var/www/testsite/classes/EmailAddressValidator.php')){
    include('/var/www/testsite/classes/EmailAddressValidator.php');
}else{
    include(CLASS_PATH .'EmailAddressValidator.php');
}

但我也有现场

/var/www/livesite/classes/EmailAddressValidator.php

并且在将代码从testsite更改为livesite之前来回变得很痛苦。有更简单的方法可以做到这一点。

我试过了..

if(file_exists('/var/www/testsite/classes/EmailAddressValidator.php')){
    include('/var/www/testsite/classes/EmailAddressValidator.php');
elseif(file_exists('/var/www/livesite/classes/EmailAddressValidator.php')){
    include('/var/www/livesite/classes/EmailAddressValidator.php');
}else{
    include(CLASS_PATH .'EmailAddressValidator.php');
}

测试所有答案......将在星期一结束日投票

5 个答案:

答案 0 :(得分:2)

您可以使用相对路径

../classes/EmailAddressValidator.php

或无论路径是什么。

答案 1 :(得分:2)

您需要确保使用一致定义的目录位置,特别是如果您经常在生产和开发环境之间进行更改。如果你也在不同的操作系统上工作,那么正确的目录结构可能是一个真正的痛苦,所以如果你集中精力,它会让你的生活变得更轻松。

例如,您确定要将CLASS_PATH定义为常量吗?

我建议您在执行任何其他操作之前找到当前目录的位置:

$current_dir = dirname(__FILE__);

然后使用此变量继续前进:

$test_dir = $current_dir . '../testsite/';
$live_dir = $current_dir . '../livesite/';
$class_dir = $current_dir . '../classes/';

if(file_exists("$test_dir/EmailAddressValidator.php"))
{
    include("$test_dir/EmailAddressValidator.php");
}
elseif(file_exists("$live_dir/EmailAddressValidator.php"))
{
    include("$live_dir/EmailAddressValidator.php");
}
else
{
    include("$class_dir/EmailAddressValidator.php");
}

答案 2 :(得分:1)

1。)您可以使用配置文件或环境变量来设置“环境”:

environment.ini

environment = livesite

cronscript.php:

$config      = parse_ini_file("./environment.ini");
$environment = $config["environment"];

include "/var/www/$environment/classes/EmailAddressValidator.php";

现在将environment.ini添加到您的livesite和testsite,每个都在配置文件中添加相应的条目。

当然,您可以使用其他配置类型,例如常量(define("MY_ENVIRONMENT", "livesite")

2.)另一种方法是使用相对文件路径:

include "../relative/path/to/classes/EmailAddressValidator.php"

3。)使用autoloader

答案 3 :(得分:1)

那么你可以使用$_SERVER['SCRIPT_FILENAME']变量来操作运行时的if else。

我的意思是,您可以通过对变量执行某些testsitelivesite来获取substrexplode,并将其与if else中的路径一起传递1}}陈述

答案 4 :(得分:0)

通常你会做以下

include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'EmailAddressValidator.php';

这会自动找到当前正在运行的文件的路径,并根据其与正在运行的文件相关的位置包含所需的文件。

使用DIRECTORY_SEPARATOR常量将确保您的代码可以在Windows或Linux系统上运行