我的基本問題是如何設置一個地址,以便在腳本的所有目錄中都可以使用 ?
問題是你依賴於相對路徑,如require('/inc/languages/…)
,這不是很好的做法。你可以堅持努力平衡在哪裏設置/
或../
甚至../../
。避免它的最好方法是在主配置中設置一個基本路徑。
所以,你會設置這樣的一個配置文件:
$BASE_PATH = '/full/path/to/your/codebase/here/';
如果你不知道你的文件系統的基本路徑,只需將下面這行代碼在你的PHP代碼;像index.php
:
echo "Your path is: " . realpath(dirname(__FILE__)) . "<br />";
然後加載該頁面。附近的某處頂部將是這樣的文字:
你的路徑是:/全/路徑/到/你/用那一套代碼庫/位置/
然後你就可以改變你的代碼是什麼像這樣:
include_once 'config.php';
function p($name,$langIn = 'fa_IR')
{
global $BASE_PATH;
switch ($langIn) {
case 'en_US':
require_once($BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');
break;
default:
require_once($BASE_PATH . 'inc/languages/fa_IR/all_lang_fa_IR.php');
}
if(isset($lang[$name]))
echo $lang[$name];
else
echo '<span style="color: red;">Error!</span>';
}
注是我所做的更改如下:
- 設置在這個例子中爲
config.php
。將它放在代碼中任何有意義的地方。
- 設置
global $BASE_PATH;
內的功能,使$BASE_PATH
可以很容易地加載在該功能。
- 更改
require
調用require_once
,因爲它只是更好的做法&幫助代碼避免多個require
調用可能導致您的腳本被炸出的情況。
- 設置
$BASE_PATH . 'inc/languages/
在require_once
調用實際使用$BASE_PATH
概念。
是的,好像更多的工作來設置,其通過相對路徑加載config.php
再下一行使用$BASE_PATH
,但好處是,一旦這些config.php
線設置,你不再需要擔心它。然後$BASE_PATH
可以設置爲滿足您所在的任何設置的需求。
編輯:根據評論,原來的海報並不理解文件系統路徑&一個Web服務器URL之間的區別。爲了儘可能清楚,這是因爲在Windows中報告的原始的海報的文件系統路徑:
C:\wamp\www\aroozi
這是訪問該網頁的網址是WAMP URL通過網絡瀏覽器:
http://localhost/aroozi
當對http://localhost/aroozi
的文件發出請求時,Web服務器將在文件系統中查找C:\wamp\www\aroozi
。所以該路徑被認爲是文件系統上的基本路徑。
因此,使用我上面的例子,這將設置爲如下使用Apache PHP;將Windows路徑有他斜槓,因爲PHP &阿帕奇逆轉WAMP通過Unix/Linux操作系統路徑設置工作:
$BASE_PATH = '/wamp/www/aroozi';
還是使用原來的海報的配置設置在constants.php
:
定義( 'BASE_PATH','/ WAMP /網絡/ aroozi');
然後把剛纔在前面加上要麼$BASE_PATH
或BASE_PATH
到require
/include
SUFF這樣的:
require_once($BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');
或者這樣:
require_once(BASE_PATH . 'inc/languages/en_US/all_lang_en_US.php');
'函數P()'不應該被輸出的文本本身。相反,它應該返回它。 'function p(){... return $ lang [$ name]; ...}' 而在你的HTML文件中,你應該使用'
有什麼區別?它現在在根目錄下認真工作,它不需要'echo'命令。此外,我是測試你的解決方案,不幸的是它不工作。 – AmirHussein
@MarioWerner我認爲這是分裂頭髮一點。該功能旨在雙向工作。 – JakeGould