1

我正在做一个项目。它是管理网站的控制面板。文件夹结构是这样的:

    • 图片
    • css
    • js
    • 模块
      • 用户
      • 类别
      • ETC..
    • 索引.php
    • 配置文件

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

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

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

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

4

4 回答 4

3

你不会在你的 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配置文件中的值。

于 2012-12-18T20:10:10.213 回答
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" />
于 2012-12-18T20:21:21.847 回答
1

有几种方法可以做到你所说的,但最简单的一种方法是使用 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

于 2012-12-18T20:09:36.357 回答
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);
于 2015-04-28T18:13:52.497 回答