gpt4 book ai didi

php - 当使用 include() 包含相对路径时,PHP 检查哪些目录?

转载 作者:可可西里 更新时间:2023-11-01 12:37:53 24 4
gpt4 key购买 nike

很奇怪,有没有人总结过结论呢?

有时它也会检查包含文件的目录。

但有时不是。

D:\test\1.php

<?php

include('sub\2.php');

D:\test\2.php

<?php

include('3.php');

其中 3.php2.php 位于同一目录中。

上面可以,但是为什么呢?当前目录应该是D:\test,但是它仍然可以找到3.php,它在D:\test\sub

更多故事(final)

大约一年前我遇到了这个问题,然后我用下面的硬编码解决了它:

通用.php:

if (file_exists("../../../Common/PHP/Config.inc"))
include('../../../Common/PHP/Config.inc');

if (file_exists("../../Common/PHP/Config.inc"))
include('../../Common/PHP/Config.inc');

if (file_exists("../Common/PHP/Config.inc"))
include('../Common/PHP/Config.inc');

if (file_exists("Common/PHP/Config.inc"))
include('Common/PHP/Config.inc');

其中 Config.incCommon.php 在同一目录下>

最佳答案

如果您查看 main/fopen_wrappers.c 中的 php 源代码,您会发现

/* check in calling scripts' current working directory as a fall back case
*/
if (zend_is_executing(TSRMLS_C)) {
char *exec_fname = zend_get_executed_filename(TSRMLS_C);
int exec_fname_length = strlen(exec_fname);

while ((--exec_fname_length >= 0) && !IS_SLASH(exec_fname[exec_fname_length]));
if (exec_fname && exec_fname[0] != '[' &&
exec_fname_length > 0 &&
exec_fname_length + 1 + filename_length + 1 < MAXPATHLEN) {
memcpy(trypath, exec_fname, exec_fname_length + 1);
memcpy(trypath+exec_fname_length + 1, filename, filename_length+1);
actual_path = trypath;

这似乎是无条件执行的,因此将始终使文件位于与包含/打开文件的脚本相同的路径中可访问...作为在 include_path 中指定的所有可能性之后的最后选择。并且仅当您未在 include() 中定义相对或绝对路径时。

关于php - 当使用 include() 包含相对路径时,PHP 检查哪些目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com