【问题标题】:PHP Project relative paths and urlsPHP 项目相对路径和 url
【发布时间】:2012-12-06 02:41:42
【问题描述】:

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

    • 图片
    • CSS
    • js
    • 模块
      • 用户
      • 类别
      • 等等..
    • index.php
    • config.php

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

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

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

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

【问题讨论】:

  • 抱歉跑题了,但也许你需要比纯 php 更大的东西?也许切换到某个框架? CodeIgniter 最简单、最容易使用,使用它我节省了很多时间。

标签: php relative-path


【解决方案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

【讨论】:

  • w3schools 有一段时间被认为是一个非常糟糕的资源,w3.orgMDN 是更好的资源。
  • @dualed 感谢对偶的评论,我已经更新了我的信息链接。
【解决方案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 的值。

【讨论】:

    【解决方案3】:

    您可能最好定义几个不同的变量,因为拥有 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" />
    

    【讨论】:

    • 谢谢 Mike,但我会用这个常量来改变或创建 img 和锚点?
    • @mauriblint 我已经添加了在链接中使用常量或在我上面的答案中引用 javascript 的示例。
    【解决方案4】:

    这是基于 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);
    

    【讨论】:

      猜你喜欢
      • 2011-12-11
      • 2011-11-15
      • 2010-12-17
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      相关资源
      最近更新 更多