2013-11-15 77 views
0

我在php中的相对路径有点麻烦。在我的课程之一,我有以下代码:确定应用程序的根目录

$iniPath = $_SERVER['DOCUMENT_ROOT'] . "/movies/config.ini"; 
$ini_array = parse_ini_file($iniPath, true); 

此代码的工作完美,因为它返回“/var/www/movies/config.ini”。

但问题是代码不可携带。如果它安装在另一台服务器上,则它们可能不会安装在/ movies /中。

tl; dr如何在php中将应用程序目录指定为根目录?

+0

'$ _ SERVER [ 'DOCUMENT_ROOT']'会给你的根目录。你的意思是当前脚本运行的目录(相对于根目录)? – BenM

+1

您应该为潜在用户使用的文件夹/子文件夹设置另一个变量,然后用变量名称替换'/ movies /'。甚至可能添加一个'if'条件来启动。这个变量可能是'$ folder =“change_this”;' –

+0

@BenM的影响的东西,但是应用程序正在运行。我把所有的php类放在一个名为classes的文件夹中。因此,它相对于应用程序目录,而不是在那里特定的脚本运行 – triunenature

回答

1

您可以使用__DIR__dirname(__FILE__)来确定相对于您的应用程序的当前路径。

您可以定义称为第一文件中的常数(或配置或启动文件中):

<?php 
    define('ROOT_DIR', __DIR__.'/'); 
    // and define some other base path 
    // you can also define everything in a separate file 
    define('MOVIE_DIR', ROOT_DIR.'movies/'); 
    // and define absolute path 
    define('CLASS_DIR', '/usr/local/share/something/that/will/never/change/'); 
    // then your code will looks like 
    $iniPath = MOVIE_DIR . '/config.ini'; 
    $ini_array = parse_ini_file($iniPath, true); 

编辑:的其他替代(你的问题阅读您的意见后)是使用set_include_path但是,这并不常用。

+0

我从来没有真正使用的定义,我只是试过。在我的index.php中,我做了定义语句,然后在我的类文档中做了APP_ROOT。 '/config.ini',它表示找不到“APP_ROOT/config.ini”。 如何将定义从一个php页面传递给另一个?饼干? – triunenature

+0

不,你必须把你所有的定义放在一个文件中(让我们把它称为define.php)。然后在每个必须使用它们的文件中包含该文件。一个基本模式是让index.php第一行包含'require_once('config.php')',其中包含define()和其他初始化过程,必须在所有其他.php文件中完成 – Asenar

+0

有趣!谢谢!!!有效 – triunenature

相关问题