2013-01-08 66 views
2

我有這樣的條件:require_once裏面require_once創建路徑問題

  • 文件:/public_html/folderX/test.php有一行:require_once '../functions/sendemail.php'
  • ,另一方面,/public_html/functions/sendemail.php有一行:require_once '../config.php'

config.php在這種情況下完美加載。

,當我嘗試添加出現的問題是functions/sendemail.php上不是在folderX,例如文件(S):

當我試圖在public_html/test.php添加require_once 'functions/sendemail.php'我得到這個錯誤信息:

警告:require_once(../配置-min.php)一次function.require]:未能打開流:在的public_html/test.php的

如何使沒有這樣的文件或目錄內部函數/ sendemail.php獨立工作,因此無論它包含在任何文件中,'require_once'問題都不會再發生。

我試圖改成'include_once',但仍然不起作用。

謝謝!

回答

3

嘗試像

require_once(dirname(__FILE__).'/../config.php') 
+0

用得好好的,兄弟!非常感謝! –

1

相信的相對路徑名在這裏咬你。 (就我所知),相對路徑基於當前活動腳本的目錄。當includingrequiring文件時,PHP不會將chdir轉換爲文件夾。對於這種事情,最好的建議(在我有限的經驗中)是在可能的情況下使用絕對路徑。因此,像:

require_once('../config.php'); 

將成爲:

require_once('/home/myuser/config.php'); // Or wherever the file really is 

dirname功能可以在這種情況下幫助。

+0

你是對的兄弟...我應該使用絕對路徑。謝謝! –

1

您必須瞭解PHP將目錄更改爲最外層腳本的目錄。當您使用相對路徑時(例如那些以./,../或不以/開頭的路徑),PHP將使用當前目錄解析相對路徑。這會導致您在代碼中複製粘貼包含行時出現的問題。考慮這個目錄結構:

/index.php 
/admin/index.php 
/lib/include.php 

假設兩個索引文件包含這些行:

include_once("lib/include.php"); 

上面一行將工作時/index.php被調用而不是當/admin/index.php被調用。

的解決方法是不可複製粘貼代碼,在包括呼叫使用正確的相對文件路徑:

/index.php  -> include_once("lib/include.php"); 
/admin/index.php -> include_once("../lib/include.php"); 
2

嘗試使用__DIR__達到腳本的電流通路。

require_once(__DIR__.'../config.php'); 

__DIR__僅適用於PHP 5.3

__DIR__ 

The directory of the file. If used inside an include, the directory of 
the included file is returned. This is equivalent to dirname(__FILE__). 
This directory name does not have a trailing slash unless it is the root directory. 
(Added in PHP 5.3.0.)