对于Ajax调用,PHP文件位置不同。初始加载

时间:2010-09-15 16:27:01

标签: php

我有一个名为fileCabinet.php的文件,用于加载我的所有类等。当我的网站从index.php加载时,它的工作正常:

require_once('../includes/fileCabinet.php');

我的问题是当我进行Ajax调用时,我想使用相同的类并且希望使用相同的文件来加载它们,但是ajax处理脚本的位置与index.php的位置不同所以我最终得到了这样的东西:

if($admin){
    $path = '../';
}else if($ajax){
    $path = '../../';
}

@require_once($path . 'admin/includes/generalFunctions.php');
@require_once($path . 'admin/corModules/PageAdmin.php');
@require_once($path . 'admin/corModules/SEOManager.php');

我有两种不同的路径,具体取决于我从哪里调用(admin或ajax)。我想知道是否有一种顽固的方法来定位您的文件,无论它的来源来自何处。

思想?

3 个答案:

答案 0 :(得分:0)

文件是否仍然位于同一个地方?或者你有2套这些文件吗?

如果它们只在一个位置,请使用一些常量来设置这些位置。

define('ROOT_PATH', '/path/to/root/folder');

此外,您应该设置一些可能有用的常量:Web根,根路径,图像目录,以及您将要反复使用的任何内容。 此外,您可以使用$ _SERVER变量来设置这些常量,这样您每次执行新项目时都不需要手动定义这些常量并将这些内容放入配置文件中。

然后你可以做

require_once(ROOT_PATH . '/admin/blah/file.php');

要继续沿着此路径继续,您应该使用require而不是require_once(更好的性能),您应该查看SPL库并使用自动加载。这是一条很好的途径,可以简化并提高性能。

答案 1 :(得分:0)

内部fileCabinate.php仅包含相对于该文件的内容:

require_once(__DIR__.'admin/includes/generalFunctions.php');
require_once(__DIR__.'admin/corModules/PageAdmin.php');
require_once(__DIR__.'admin/corModules/SEOManager.php');

__DIR__魔术常量是当前文件的目录,因此在这种情况下,假设三个子文件位于admin子文件夹中。

/ 
/ fileCabinate.php
/ admin / includes /
                   / generalFunctions.php
/ admin / corModules /
                     / PageAdmin.php
                     / SEOManager.php

每个操作点 - 在5.3之前,您需要使用:

require_once(dirname(__FILE__).'admin/includes/generalFunctions.php');

...哦,我们多么快地忘记它在好日子里是如何运作的!

答案 2 :(得分:0)

将您需要定期包含的所有文件放在一个目录中,例如includes。将该目录添加到包含路径。理想情况下,您可以从Apache配置文件(例如.htaccess文件)执行此操作。

php_value include_path ".:/foo/bar/includes"

确保编写完整的包含路径(它可能包含其他目录,例如PEAR)。如果您不能这样做,请在每个文件中更改PHP的包含路径:

set_include_path(get_include_path().PATH_SEPARATOR.'/foo/bar/includes');

如果您执行了其中任何一项操作,则文件现在位于包含路径中,这意味着您只需编写require 'foo.php'即可,无论您身在何处,都会加载includes/foo.php