繁体   English   中英

如何在 php 文件中包含图像、css 和 javascript 等静态资产

[英]How to include static assets like images, css and javascript in a php file

一个非常重要的细节是,我创建的资产函数返回的是静态资产的完整路径,而不是从 php 文件位置的相对路径

我做了什么

public static function asset($url){
        $file_path = __DIR__.'/../../../resources/assets/'.$url;
        $file_path = str_replace("\\","/",$file_path);
        return $file_path;
    }

在我的 index.php 中,它包含 html 文件:

<img width="500px" alt="<?php echo asset('images/image1.jpg');?>" src="<?php asset('images/image1.jpg');?>"/>

它为我提供了 alt 属性中文件的正确完整 url,但没有显示图像。
它也不适用于 css 和 javascript

资产目录是

"__DIR__.'/../../../resources/assets/'.$url"; 

$url 是用户给出的参数。
这是html页面上返回的文件路径:
c:/xampp/htdocs/project/app/Utilities/View/../../../resources/assets/images/image1.jpg
返回的内容是否有效用作我的 index.php 文件中的图像 src?

目前您在 src 中没有输出。 您需要回显或打印文件路径:

它应该是(注意回声):

<img src="<?php echo asset('images/image1.jpg');?>"/>

这也是一个完整的文件路径,可能与协议相关。 所以可能会被缝合到你的域上。 例如http://example.com/path/from/file/system/root/to/assets/images/image1.jpg 如果您包含file://协议,则在您自己的站点上在某些浏览器上进行本地开发时它可能会起作用,但可能由于来源策略而不起作用。 它肯定不会在公共网络服务器上工作。

例如/var/www/example.com/assets/image.png是一个文件路径,如果文档根目录是/var/www/example.com我们可以只使用/assets/image.png作为网络路径。

我建议让你的所有资产都与你的文档或项目根相关。

您可以在项目引导程序中使用一个简单的常量而不是这样的:

<?php define('ASSET_ROOT', '/assets'); ?>

那么你的 src 就变成了:

<img src="<?= ASSET_ROOT . '/images/image1.jpg'; ?>"/>

(这里使用短 echo <?=而不是<?php echo 。)

这给了你一些灵活性。 您可以稍后将其换成以下内容:

<?php define('ASSET_ROOT', '//cdn.example.com/assets'); ?>

您当前的资产路径也与包含您的函数的脚本相关。 如果你移动它,你必须重写你的函数。 常量的开销较小。

拥有相对于固定根的资产,只沿着树向下移动,远没有那么复杂,也不需要考虑。

资产功能的问题是DIR返回本地文件路径,我应该返回的是服务器 url。 因此,我替换了这一行

"__DIR__.'/../../../resources/assets/'.$url"; 

http://server_host/resources/assets/".$url

在我的情况下是

http://localhost/project/resources/assets/".$url

并返回该行并且它起作用了。
@Progroc,感谢您的贡献

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM