从命令行运行Web预期的PHP代码

时间:2011-08-10 13:25:40

标签: php command-line

我有requires地址$_SERVER['DOCUMENT_ROOT'].'/subdir/file.php';

以外的其他php文件的PHP代码

首先 - 这是包含事物的最佳方式吗?显然我不想使用'../../subdir/file.php';之类的路径,因为移动文件会破坏它。

但另一个有趣的问题是,如果我通过命令行运行此文件,则不会创建$_SERVER。我可以通过$_SERVER['DOCUMENT_ROOT'] = '.';伪造它,但我很好奇这是否是最好的做法。好像不是。

编辑:显然有很多方法可以为这只猫设置皮肤,尽管我认为最佳做法是定义一个负责include目录的变量(或常量)。如:

define('INC_DIR', $_SERVER['DOCUMENT_ROOT'].'/../includes');

if (PHP_SAPI == 'cli') {
    $_includes = '../includes';
} else {
    $_includes = $_SERVER['DOCUMENT_ROOT'].'/../includes/');
}

在整个代码中使用上述变量或常量。

3 个答案:

答案 0 :(得分:2)

我更喜欢在我的架构中使用文件夹定义系统。像这样:

define( 'DIR_ROOT',dirname(__FILE__) );

在命令行和Web模式下均可使用。在应用程序入口点(大多数情况下为index.php)中使用它,然后从该文件向外加载框架的其余部分。应用程序的所有入站调用都应通过.htaccess或其他方法进行路由,以便它们调用index.php?foo = bar等。

我也讨厌一直输入DIRECTORY_SEPARATOR所以我通常会做出第一个定义:

define( 'DS' , DIRECTORY_SEPARATOR );

这使您以后可以执行以下操作:

require_once( DIR_ROOT.DS.'myfolder'.DS.'myfile.class.php' );

答案 1 :(得分:0)

或者,如果您不想或不需要修改您的php文件而您只需要正常执行的页面,则可以使用curl。大多数Linux和Unix系统都安装了它。

$ curl http://www.example.com/myscript.php &> /dev/null

&> /dev/null部分将输出发送到系统中的黑洞,因此​​您不必查看请求返回的HTML。

答案 2 :(得分:0)

if(PHP_SAPI == 'cli')
{
    $_SERVER['DOCUMENT_ROOT'] = '/path/to/webroot';
}