执行一个被调用的php脚本,就好像它与调用脚本在同一个工作目录中一样

时间:2016-10-27 11:59:42

标签: php xmlhttprequest directory-structure working-directory

运行php脚本是否有诀窍,就好像它位于与目前所在目录不同的目录中?

我试图将一个小程序的文件结构组织到对我来说具有更多语义含义的文件夹中,但是这样做我似乎正在反对php当前工作目录的概念。 / p>

上下文

文件结构:

| function/
|         function.php
|
| fragment/
|         import.php
|         export.php
|
| index.php

所有php文件都需要function.php

<?php require_once 'function/function.php'; ?>

包括index.php中的片段可以正常工作:

<?php include 'fragment/import.php'; ?>
<?php include 'fragment/export.php'; ?>

由于index.php正在基本工作目录中执行,所以他们都很乐意找到function / function.php。

然而,

如果我通过使用XMLHttpRequest脚本从index.php调用fragment / import.php来获取它,它就再也找不到function.php,因为当前的工作目录现在已经改为fragment /而且它正在寻找片段/功能/ function.php

我目前在每个片段/文件中使用chdir()来导航回到基本目录。但我的强迫症感觉刺痛。

// plus I have to hardcode the target directory
chdir( '/www/code/laboratory/' );

// as this makes bad things happen for the include in index.php
chdir( dirname( __dir__ );
// same as
include '../function/function.php';

简单地说,如果.php文件都在同一个目录中,我就不会遇到任何这些问题。更不用说让我感到厌烦的是程序正在调用一个脚本,它必须明确地告诉自己回到它所调用的目录,这似乎是不必要的。

它造成了如此多的麻烦,我必须做错事。我试着摆弄一个.htaccess文件,但并没有走得太远。似乎RewriteRule只适用于http请求而不是php包含,所以我有点放弃了这个想法。使用&lt; base&gt;来自html的标签,唉,没有成功,因为片段不是完整的html文档而且没有标题。也许有办法设置&lt; base&gt;在XMLHttpRequest中使用setRequestHeader()但我无法找到它。

TLDR;

是否有一个技巧可以使片段内的脚本/认为它们与index.php在同一个工作目录中?或者,是否可以使用XMLHttpRequest标头来让脚本知道我希望它运行在哪个目录中?

或者我应该考虑PHP逻辑,而不是语义,划分我的代码是一个真正的坏主意?

欢迎任何提示和建议。谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

您是否尝试过添加到PHP搜索包含的包含路径

$path = '/www/code/laboratory/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Read more Documentation on that here