php - set_include_path() 不适用于相对 require()

标签 php

我正在“要求”一个文件,该文件有自己的 require() 调用。但是调用 set_include_path() 并不适用于 require() 中的相对路径。不幸的是,我无法控制所需的代码文件。

C:/myapp/index.php - 我的代码

set_include_path(get_include_path() . ';C:/app/subfolder');
require('C:/app/subfolder/index.php');

C:/app/subfolder/index.php - 第三方代码(无控制)

require('../config.php'); // Require file located at C:/app/config.php

结果:

打开失败需要'../config.php' (include_path='.;C:/app/subfolder')

这不起作用,即使 C:/app/subfolder 位于包含路径中。我希望 ../config.php 是 C:/app/subfolder/../config.php。也许我做得不对。

在这种情况下,C:/app/subfolder/index.php 最初从未打算包含到另一个 PHP 文件中。但是,我正在它前面构建代码,我希望 C:/app/subfolder/index.php 仍然能够 require/include 文件,就好像它从未离开过它的位置一样。

我读过使用 dirname() 或 __DIR__ 修复了 require() 中的相对路径问题,但我无法更改 C:/app/subfolder/index.php 中的代码。 p>

有没有办法让它工作?

最佳答案

您的问题与 set_include_path() scope 无关。您的 fatal error 也显示了实际的 include_path,您可以在其中看到您添加的路径。

问题是 ../ 调用不查看 include_path,而是查看当前工作目录。这可能很难理解通过 HTTP URL 调用脚本,但如果您可以通过命令行调用脚本就更清楚了。

如果您在 /usr/angelina/myproject/subfolder/index.php 中编写此脚本(注意:在这个解释性示例中,我将使用 Unix filePath/commands):

set_include_path( '/usr/angelina/myproject/subfolder' );
require( '../config.php' );

然后,在终端中,你写:

cd /usr/angelina/myproject/subfolder
php index.php

脚本将被正常执行。但是如果你写:

cd /usr/angelina/myproject
php subfolder/index.php

脚本将失败,即使在您调用的同一脚本中设置了包含路径也是如此。

上面的例子说明你的问题不是包含路径,而是当前工作目录。要解决您的问题,您必须使用 chdir() 更改当前目录。

所以,在 C:/myapp/index.php 中你必须写:

chdir( 'C:/app/subfolder' );
require( 'C:/app/subfolder/index.php' );

并且您的脚本会起作用(或者,至少:在我这边它起作用了...)

关于php - set_include_path() 不适用于相对 require(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35909247/

相关文章:

php - MySQL 到 SQLite 的迁移。我需要更新数据类型吗?

php - 如何保护按许可证销售的 Web 应用程序免受盗版?

php - 保持长时间运行(永远)的 php CLI 进程在 Windows 上运行

php - Curl 在托管服务器上返回 false(已启用curl)

php - Opencart 自定义字段不允许连字符 "-"

php - 使用 Ajax(算法)搜索页面

java - android error org.json.JSONException : Value <! java.lang.String类型的DOCTYPE无法转换为JSONObject

php - “i360: Error in global initialization”在PHP中是什么意思?

php - 如何使用带附件的 PEAR Mail 包通过 PHP 发送电子邮件

PHP:类或全局的数据库连接