PHP项目相对路径和URL

时间:2012-12-18 20:06:08

标签: php relative-path

我正在开展一个项目。这是一个管理网站的控制面板。 文件夹结构如下:

    • 图像
    • CSS
    • JS​​
    • 模块
      • 用户
      • 类别
      • 等。
    • 的index.php
    • 的config.php

我在配置文件中设置了一些设置,其中一些是:

$site_url = $_SERVER['SERVER_NAME'];
define ('ABSPATH', 'http://'.$site_url.'/cpanel');

所以,我的问题是:如何相对于ABSPATH常量和所有<a>标记加载所有资源(图像,css,js)?

有了这个,我可以将“cpanel项目”移动到其他目录级别,它仍然可以工作。像Wordpress博客一样,只设置博客URL ..

4 个答案:

答案 0 :(得分:2)

你不能在php视图中做这样的事吗?

<script type="text/javascript" src="<?= ABSPATH ?>/my_js_file.js"></script>
<link rel="stylesheet" type="text/css" href="<?= ABSPATH ?>/my_css_file.css">

<img src="<?= ABSPATH ?>/my_image_file.jpg" />

这样,您可以将目录移动到docroot中的任何位置,只需更改配置文件中ABSPATH的值。

答案 1 :(得分:2)

您可能最好定义几个不同的变量,因为URL不会对包含等有用。你可以这样做:

DEFINE(HOST_NAME, $_SERVER['SERVER_NAME']);
DEFINE(WEB_SERVER_ROOT, $_SERVER['DOCUMENT_ROOT']);
DEFINE(APP_ROOT, __DIR__);
DEFINE(URI_BASE, str_replace(WEB_SERVER_ROOT, '', APP_ROOT);
if ($_SERVER['HTTPS'] == 'on') {
    DEFINE(PROTOCOL, 'http');
} else {
    DEFINE(PROTOCOL, 'https');
}
DEFINE(URL_BASE, PROTOCOL . '://' . URI_BASE);

对于包含,您可以执行以下操作:

include(APP_ROOT . '/modules/somefile.php');

要输出图片,javascript,css等链接,您可以使用以下内容:

<img src="<?php echo URL_BASE; ?>/images/someimage.jpg" />
<a href="<?php echo URL_BASE; ?>/somepage">Some Page</a>
<script type="text/javascript" src="<?php echo URL_BASE; ?>/js/somejs.js" />

答案 2 :(得分:0)

有几种方法可以做你所说的,但最简单的一种方法是使用BASE标签。

<head>
<base href="http://www.yoursitewithimages.com/folder-with-files/" target="_blank">
</head>

然后你可以使用

<img src="img/image.jpg">

,它将被视为

<img src="http://www.yoursitewithimages.com/folder-with-files/img/image.jpg">

此处有更多信息http://www.w3schools.com/tags/tag_base.asp或此处http://www.w3.org/TR/html-markup/base.html

答案 3 :(得分:0)

这是基于Mike Brant解决方案的替代方案。

//APP_ROOT and APP_BASE assumes that the current location of this 
//script is located in the root of your application.  
//Also assumes that the HOST_NAME is what you want in the URL.  
//See https://php.net/manual/en/reserved.variables.server.php for reference 
define('HOST_NAME', $_SERVER['HTTP_HOST']);
(empty($_SERVER['HTTPS'])) ? define('PROTOCOL', 'http') : define('PROTOCOL', 'https');
define('WEB_SERVER_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('APP_ROOT', __DIR__);
$appBase = str_replace(pathinfo(__FILE__, PATHINFO_BASENAME), '', $_SERVER['SCRIPT_NAME']);
define('URL_BASE', PROTOCOL . '://' . HOST_NAME . $appBase);