PHP:引用库范围内的资源

时间:2013-07-07 20:33:11

标签: php html image uri

我正在编写一个小PHP库(一堆PHP类)。 其中一个类创建HTML表,其中布尔值由图标表示,即其输出的一部分可能如下所示:

...<td class="img"><img width="16" height="16" alt="true" src="???/valid_16.png"></td>...

问题是:我不知道如何指定src属性。

当然我知道从PHP类到图像文件(在库中)的相对路径。 但是src属性需要一个URI,我不想对服务器上库的最终位置做出假设。

那么,是否可以引用图像文件使其相对于实际的库位置不变? 或者我应该重新考虑我的设计?

2 个答案:

答案 0 :(得分:0)

您总是可以要求库用户将资产目录的url路径作为参数给出,这样您就可以使用它来为src属性添加前缀。

如果您确定图书馆的工作是为这个特定情况下的用户生成html输出,我会将这些图像设为background-image,因为在css中,相对url() s相对于文件的路径所以,如果您的库的用户只是使用css文件提取资产,它将“开箱即用”(假设他们将css文件添加到他们的站点)。如果您以后决定将这些图标转换为图标字体(如font awesome)以支持高DPI显示或缩放,这将非常方便。

答案 1 :(得分:0)

根据complex857的建议,我提出了这个解决方案:

我在库的主目录中创建了一个类,为库名称空间设置自动加载。 它还确定库位置(假设库和使用它的代码位于同一文档根目录下)。 此类是库用户必须明确包含的唯一类。 它看起来像这样:

<?php

namespace vendor\lib;

class Includer
{
    public static $libUrl;
    public static $libPath;

    public static function getUrl($dir)
    {
        $url = substr($dir, strlen($_SERVER['DOCUMENT_ROOT'])); // remove root prefix from dir
        return str_replace('\\', '/', $url) . '/'; // windows...
    }

    public static function registerNamespaceAutoload($namespace, $path)
    {
        // some code to register autoload for given namespace using given path
    }
}

// determine library location
Includer::$libUrl = Includer::getUrl(dirname(dirname(__DIR__))); // lib's top level dir (two levels up relative to vendor\lib\Includer)
Includer::$libPath = str_replace('/', DIRECTORY_SEPARATOR, $_SERVER['DOCUMENT_ROOT'] . Includer::$libUrl);

// register autoload for library
Includer::registerNamespaceAutoload('vendor\\lib\\', Includer::$libPath);

?>

用于获取位于vendor / lib / images /的图像的URL:

<?php

namespace vendor\lib\images;
use vendor\lib\Includer;

class Image
{
    public static function getUrl($fileName)
    {
        return Includer::$libUrl . 'vendor/lib/images/' . $fileName;
    }
}

?>

缺点:使用别名时(在开发环境中),这不起作用。