我正在使用WAMP服务器编写localhost
上的脚本。我想让我的网站多语言,所以我定义了一个函数,你可以在下面看到:
function p($name,$langIn = 'fa_IR')
{
switch ($langIn) {
case 'en_US':
require('/inc/languages/en_US/all_lang_en_US.php');
break;
default:
require('/inc/languages/fa_IR/all_lang_fa_IR.php');
}
if(isset($lang[$name]))
echo $lang[$name];
else
echo '<span style="color: red;">Error!</span>';
}
存储在localhost/aroozi/inc/functions/global_func.php
中的函数。所需的地址在localhost/aroozi
上正常工作,但当我将注册表值发布到localhost/aroozi/processors/register.php
时,它不起作用,脚本将停止工作,因为我在localhost/aroozi/inc/header.php
的页面标题中使用了p()
函数:
<!Doctype html>
<head>
.
.
.
<title><?php p('title',$lang); ?></title>
.
.
.
我的基本问题是如何设置一个地址,以便在脚本的所有目录中工作?
我的基本问题是我如何设置一个地址,以便在所有的脚本的目录?
问题是您依赖于相对路径-如require('/inc/languages/…)
-这不是一个好的做法。你可能会发疯,试图平衡/
或../
甚至../../
的设置位置。避免它的最好方法是在主配置中设置一个基本路径。
你可以在配置文件中这样设置:
$BASE_PATH = '/full/path/to/your/codebase/here/';
如果你不知道你的文件系统的基本路径是什么,就把这行代码放在你的PHP代码中;如index.php
:
echo "Your path is: " . realpath(dirname(__FILE__)) . "<br />";
然后加载该页面。在靠近顶部的地方会有这样的文本:
你的路径是:/full/path/to/Your/codebase/here/
有了这个集合,你就可以像这样修改你的代码:
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
为include_once
。把它放在代码中有意义的地方。 - 在函数内设置
global $BASE_PATH;
,以便$BASE_PATH
可以轻松加载到函数中。 - 将
require
调用更改为require_once
,因为这只是更好的实践&帮助代码避免多个require
调用可能导致脚本爆炸的情况。 - 在
require_once
调用中设置$BASE_PATH . 'inc/languages/
以实际使用$BASE_PATH
概念。
是的,设置通过相对路径加载的config.php
,然后在下一行使用$BASE_PATH
,似乎需要更多的工作,但好处是,一旦设置了这些config.php
行,您就不再需要担心它了。然后可以设置$BASE_PATH
以满足您所处的任何设置的需要。
EDIT:根据评论,原来的海报不理解文件系统路径之间的区别&web服务器URL。为了尽可能清楚,这是Windows中原始海报报告的文件系统路径:
C:'wamp'www'aroozi
这是通过web浏览器访问WAMP URL的web URL:
http://localhost/aroozi
当对http://localhost/aroozi
的文件发出请求时,web服务器查看文件系统上的C:'wamp'www'aroozi
内部。因此,该路径被认为是文件系统上的基本路径。
所以使用我上面的例子,这将设置为Apache PHP使用如下:自PHP &Apache在WAMP中通过Unix/Linux路径设置工作:
$BASE_PATH = '/wamp/www/aroozi';
或者使用constants.php
中的原始海报配置设置:
定义(' BASE_PATH ', '/里面/www/aroozi ');
然后在require
/include
前面加上$BASE_PATH
或BASE_PATH
,就像这样:
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');