【问题标题】:running a php page via crontab and having issues with if file_exists通过 crontab 运行 php 页面并遇到问题 if file_exists
【发布时间】:2012-05-08 11:08:41
【问题描述】:

我有一个问题...我每天都通过一个 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');
}

测试所有答案...将在周一结束前投票

【问题讨论】:

    标签: php crontab file-exists


    【解决方案1】:

    您可以改用相对路径

    ../classes/EmailAddressValidator.php
    

    或任何路径。

    【讨论】:

    • 好吧,为什么?它对我有用...你的意思是它应该是./classes/EmailAddressValidator.php 或其他什么?我现在不知道您从哪个文件中包含。
    【解决方案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");
    }
    

    【讨论】:

      【解决方案3】:

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

      环境.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

      【讨论】:

        【解决方案4】:

        您可以使用$_SERVER['SCRIPT_FILENAME'] 变量在运行时操作if else。

        我的意思是,您可以通过对变量执行一些substrexplode 并通过if else 语句中的路径传递它来了解您使用的是testsite 还是livesite

        【讨论】:

          【解决方案5】:

          通常你会做以下事情

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

          这将自动找到当前运行文件的路径,并根据其相对于运行文件的位置包含您想要的文件。

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

          【讨论】:

            猜你喜欢
            • 2012-05-17
            • 2016-01-05
            • 1970-01-01
            • 2016-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-21
            • 1970-01-01
            相关资源
            最近更新 更多