2014-08-27 42 views
0

這可能是一個非常簡單的查詢,但我被PHP require_once操作弄糊塗了。PHP require_once超過root

我有一個網站,讓我們把它叫做www.mysite.com,該文件夾c:\websites\mysite.com\wwwroot\

在我www.mysite.com/index.php在IIS服務器上運行,我require_once的includes.php這坐在一個叫通用文件夾中 - 所以require_once("../common/includes.php");

在這個includes.php是require_once到我的數據庫連接文件 - 這住根以上 - 在c:\websites\mysite.com\ 所以,在includes.php,我require_once("dbase_connection.php");

在每個文件夾服務器的,我有一個名爲dbase_connection.php具有1行文件 - require_once("../dbase_connection.php");

這工作...

現在,我一個名爲「管理」文件夾中建立一個簡單的CMS。在www.mysite.com/admin/index.php中,我也要求使用require_once("../common/includes.php")。精細到目前爲止...

從理論上講,如果我在\admin\index.php我,然後要求dbase_connection.php應該走的目錄結構,直到找到最終的dbase_connection.php它具有連接字符串 - 但事實並非如此。

我在做什麼錯?

一個更好的查詢可能是什麼是在程序性PHP網站中包含數據庫連接字符串的最佳方式?

由於

回答

0

路徑嵌套require_once()相對於包含require_once()被叫/第一文件總是評價。所以這就是爲什麼它不適合你。爲了解決這個問題,你必須指定從第一個調用require_once()的文件開始的相對路徑。

您也可以保持include_path的php.ini或使用set_include_path()see documentation

0

您應該嘗試在每個文件中包含一個config.php文件,該文件位於已定義的路徑中。在所有的文件就在這時

define('DBINCLUDE', '/path/to/include/db.php'); 

:它裏面你應該定義一些常量爲您的應用程序的數據庫連接的路徑

require_once(DBINCLUDE); 

您可以爲您的功能和公共做同樣的。您可以使路徑硬編碼或在_FILE_,$_SERVER,getcwd()的幫助下工作,如果您打算將代碼庫移動到其他框,這將非常有效。

此外,將數據庫連接與所有應用程序一起使用,並在所有應用程序中使用它,這是一個不錯的主意,但您可能會在以後的開發路徑中找到它。通常,有一個connect_db();MyDB::Connect(),您可以隨時撥打requireinclude您的DB文件。

希望有所幫助。

請參閱http://php.net/manual/en/function.require-once.php

+0

感謝您的回覆 - 我將使用此方法。我希望能夠使用我的包含文件在1個位置執行所有require_once請求(而不是在每個頁面上重複代碼)... – JezB 2014-08-27 15:48:07