當我遇到一種奇怪的情況時,我正在用PHP編寫一個web應用程序。爲了說明我的問題,可以考慮這種結構的Web應用程序:這些文件的如何在require_once中包含路徑解析工作?
/
index.php
f1/
f1.php
f2/
f2.php
內容:
的index.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
的index.php:
<?php require_once("f1/f1.php"); ?>
f1.php:
<?php require_once("f2.php"); ?>
f2.php:空白
令我驚訝(並且完全混淆),這樣做很好!
那麼,路徑分辨率背後的祕密是什麼?
PS我看到this question,但它仍然沒有回答我在這裏陳述的第二種情況。
我已經繞過這個問題(使用dirname)。我想知道的是爲什麼第二個案例不會失敗。它是一個錯誤還是一個功能? – jrharshath 2009-12-29 10:19:53
編輯我的答案覆蓋第二個例子。 – Karsten 2009-12-29 10:29:10
我找不到手冊頁,它記錄了從f1.php成功調用require_once('f2.php')的過程。 Docs表示,如果沒有提供路徑信息,include_path會被忽略(不管怎麼說,從include_path中刪除'。'都沒有效果),getcwd()表明include目錄周圍的工作目錄是相同的。嚴重的是,它看起來像一個無證的功能。 – 2009-12-29 11:37:17