0

我有一个网站。就是这样设置的:

/public_html
    index.php
    common.php
    db.php
    /dev
      index.php
      common.php
      db.php

common.php包含重复的功能。 Db.php包含数据库连接信息。

common.php还包含确定当前正在访问的页面处于“开发”或“生产”状态的功能。然后它使用此信息相应地调用包含文件。

问题是,我也有一些 Cron Jobs 设置,它调用位于外部的 Php 脚本public_html。但是没有一个包含工作,因为确定路径的函数,使用$_SERVER变量,并依赖于 URL 的片段(比如单词“/dev”的存在)。

那么,我是否最好为我的 Cron 作业(数据库连接和函数)提供一组单独的文件,即使它们可能在站点的其他部分复制相同的文件?

4

3 回答 3

0

您可以确定相对于 common.php 的路径,dirname(__FILE__)用于获取 common.php 的完整路径,然后相对于该路径确定所有其他路径。以我的经验,这是确定路径的最便携的方式,因为它不需要服务器或操作系统的合作。

从 PHP 5.3 开始,您可以使用__DIR__而不是dirname(__FILE__)获取当前文件所在的目录。

于 2012-10-05T16:16:06.073 回答
0

您可以使用操作系统环境变量来设置脚本的执行环境。

crontab:

MYAPP_ENV=production
# min hr dom mon dow command
  0   *  *   *   *   php /var/www/myapp/scripts/cron.php

你的脚本:

$environment = env('MYAPP_ENV');
于 2012-10-05T16:17:43.373 回答
0

我会改变你为初学者确定环境的方式。服务器(环境)变量是一种很好的方法。您可以使用 apache 在 vhost 级别轻松设置它们,甚至可以在 htaccess 文件中进行设置。

相对路径和 chdir(dirname(__FILE__)); 可以解决您的路径问题。

似乎你理解这个问题并且你在这里请求允许做一些让你感到肮脏​​的事情:) 不要不必要地重复事情。而是重构您的代码。

于 2012-10-05T16:17:56.893 回答