我想找到我的应用程序的基本网址,因此我可以自动引用应用程序树中的其他文件...
因此,在我的应用程序的基础上给出了一个文件config.php,如果子目录中的文件包含它,则知道要为url添加前缀的内容。
application/config.php
application/admin/something.php
application/css/style.css
因此,在访问http://www.example.com/application/admin/something.php
时,我希望它能够知道css文件位于$approot/css/style.css
中。在这种情况下,$approot
是“/application
”,但我想知道应用程序是否安装在其他地方。
我不确定是否可能,许多应用程序(我认为是phpMyAdmin,Squirrelmail)必须先设置一个配置变量。如果它只是知道它会更加用户友好。
答案 0 :(得分:15)
我在自制框架中使用以下内容...将它放在应用程序根文件夹中的一个文件中,然后只包含它。
define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');
$tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME'])));
$tempPath2 = explode('/', substr(ABSPATH, 0, -1));
$tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])));
for ($i = count($tempPath2); $i < count($tempPath1); $i++)
array_pop ($tempPath3);
$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3);
if ($urladdr{strlen($urladdr) - 1}== '/')
define('URLADDR', 'http://' . $urladdr);
else
define('URLADDR', 'http://' . $urladdr . '/');
unset($tempPath1, $tempPath2, $tempPath3, $urladdr);
上面的代码定义了两个常量。 ABSPATH包含应用程序根目录(本地文件系统)的绝对路径,而URLADDR包含应用程序的完全限定URL。它在mod_rewrite情况下有效。
答案 1 :(得分:5)
您可以使用以下代码找到基本网址:
define('SITE_BASE_PATH','http://'.preg_replace('/[^a-zA-Z0-9]/i','',$_SERVER['HTTP_HOST']).'/'.str_replace('\\','/',substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']))).'/');
简短而且最好。
答案 2 :(得分:2)
REQUEST_URI与dirname()结合使用可以告诉您当前目录,与URL路径相关:
<?php
echo dirname($_SERVER["REQUEST_URI"]);
?>
所以http://example.com/test/test.php打印“/ test”或http://example.com/打印“/”,您可以使用它来生成链接以引用相对于当前路径的其他页面。
编辑:刚刚在重新阅读时意识到您可能会询问磁盘路径而不是URL路径。在这种情况下,您需要PHP的getcwd()函数:
<?php
echo getcwd();
?>
答案 3 :(得分:1)
除非你自己跟踪,否则我不相信这会有一个定义。或者更确切地说,您要求PHP跟踪您有些随意定义的内容。
它的长短是,如果我正确地理解你的问题,我不相信你所要求的存在,至少不是“核心”PHP;给定的框架可以提供相对于它理解的目录结构的“根”URL。
这有意义吗?
答案 4 :(得分:1)
将它放在你的config.php中(在你的应用程序的root目录中):
$approot = substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']));
我认为那样做。
答案 5 :(得分:1)
可以找到应用程序的url根目录
$protocol = (strstr('https',$_SERVER['SERVER_PROTOCOL']) === false)?'http':'https';
$url = $protocol.'://'.$_SERVER['SERVER_NAME'].dirname($_SERVER['REQUEST_URI']);
此代码将返回任何应用程序的url路径,无论是在线还是在脱机服务器上。
我没有正确检查'/'。请将其修改为斜杠。
此文件应放在root中。
示例: 如果 申请网址:
http://localhost/test/test/test.php
然后此代码将返回
http://localhost/test/test
由于
答案 6 :(得分:0)
一种解决方案是为所有内容使用相对路径,这样安装应用程序的位置无关紧要。例如,要访问样式表,请使用:
../css/style.css
答案 7 :(得分:0)
如果您想要文件系统上的路径,可以使用$_SERVER['DOCUMENT_ROOT']
如果您只想要在域名$_SERVER['REQUEST_URI']
答案 8 :(得分:0)
我从来没有找到办法让它成功。
我总是最终设置一个配置变量,其服务器路径为web根目录以上的一个级别。那就是:
答案 9 :(得分:0)
在我部署的任何地方,无论是否有重写规则,这对我来说都很有魅力:
$ baseDir ='http://'.$_SERVER ['HTTP_HOST']。(dirname($ _SERVER ['SCRIPT_NAME'])!='/'?dirname($ _ SERVER [“SCRIPT_NAME”])。' /':'/');
答案 10 :(得分:0)
这是我在我的应用程序中使用的工作正常,我也使用自定义端口,所以我也必须允许这样做。
define('DOC_URL', ($_SERVER['HTTPS']=='on'?'https':'http').'://'.$_SERVER['SERVER_NAME'].(!in_array($_SERVER['SERVER_PORT'], array(80,443))?':'.$_SERVER['SERVER_PORT']:'')).dirname($_SERVER['REQUEST_URI']);
然后我输入以下内容使用它......
<img src="<?php echo DOC_URL; ?>/_img/logo.png" />