gpt4 book ai didi

php - 包含路径解析如何在 require_once 中工作?

转载 作者:IT王子 更新时间:2023-10-29 00:12:47 24 4
gpt4 key购买 nike

当我遇到一个奇怪的情况时,我正在用 PHP 编写一个网络应用程序。为了说明我的问题,请考虑以下结构的 Web 应用程序:

/
index.php
f1/
f1.php
f2/
f2.php

这些文件的内容:

索引.php:

<?php require_once("f1/f1.php"); ?>

f1.php:

<?php require_once("../f2/f2.php"); ?>

f2.php: 空白

现在,当我尝试在浏览器中打开 index.php 时,出现此错误:

Warning: require_once(../f2/f2.php) [function.require-once]: 
failed to open stream: No such file or directory in /var/www/reqtest/f1/f1.php on line 2
Fatal error: require_once() [function.require]:
Failed opening required '../f2/f2.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/reqtest/f1/f1.php on line 2

有什么明显的我遗漏的东西吗?包含路径如何在 PHP 中工作?


在我问这个问题之前,我试图通过实验找出答案。我设置了另一个测试,如下所示:

/
index.php
f1/
f1.php
f2.php

索引.php:

<?php require_once("f1/f1.php"); ?>

f1.php:

<?php require_once("f2.php"); ?>

f2.php: 空白

令我惊讶(和完全困惑)的是,结果很好!

那么,路径解析背后的 secret 是什么?

PS 我看到了this question , 但它仍然没有回答我在这里陈述的第二种情况。

最佳答案

如果您包含另一个文件,工作目录将保留在包含文件所在的位置。

您的示例按预期工作。

编辑: 第二个示例有效,因为 . (实际目录)在您的包含路径中(请参阅您的错误消息)。

编辑2:在您的第二个示例中,您感兴趣的关键点是这一行:

<?php require_once("f2.php"); ?>

首先它会在当前工作目录 (/var/www/req_path_test) 中查找,但没有找到 f2.php。

作为回退,它会尝试在您的 include_path ('.:/usr/share/php:/usr/share/pear') 中找到 f2.php,以 '.' 开头(相对于实际 文件,而不是包括 文件)。

所以 './f2.php' 有效并且要求不会失败。

关于php - 包含路径解析如何在 require_once 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973813/

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