jrh*_*ath 17 php include require-once include-path
当我遇到一个奇怪的情况时,我正在用PHP编写一个Web应用程序.为了说明我的问题,请考虑这种结构的Web应用程序:
/
index.php
f1/
f1.php
f2/
f2.php
Run Code Online (Sandbox Code Playgroud)
这些文件的内容:
index.php文件:
<?php require_once("f1/f1.php"); ?>
Run Code Online (Sandbox Code Playgroud)
f1.php:
<?php require_once("../f2/f2.php"); ?>
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有什么明显的东西我不见了吗?如何在PHP中包含路径?
在我提出这个问题之前,我试图尝试并找出答案.我设置了另一个测试,如下所示:
/
index.php
f1/
f1.php
f2.php
Run Code Online (Sandbox Code Playgroud)
index.php文件:
<?php require_once("f1/f1.php"); ?>
Run Code Online (Sandbox Code Playgroud)
f1.php:
<?php require_once("f2.php"); ?>
Run Code Online (Sandbox Code Playgroud)
f2.php:空白
令我惊讶的是(并且完全混乱),这很好!
那么,路径解析背后的秘诀是什么?
PS我看到了这个问题,但它仍然没有回答我在这里所说的第二个案例.
Kar*_*ten 12
如果包含另一个文件,则工作目录仍保留包含文件的位置.
您的示例按预期工作.
编辑:第二个例子有效,因为.(实际目录)位于包含路径中(请参阅错误消息).
编辑2: 在你的第二个例子中,你感兴趣的关键点是这一行:
<?php require_once("f2.php"); ?>
Run Code Online (Sandbox Code Playgroud)
首先它将查看当前工作的dir(/var/www/req_path_test
),但找不到f2.php.
作为后备,它将尝试在include_path('.:/usr/share/php:/usr/share/pear'
)中找到f2.php ,以'.'开头.(相对于实际文件,而不是包含的文件).
所以'./f2.php'有效并且要求不会失败.
归档时间: |
|
查看次数: |
40058 次 |
最近记录: |