Yii2:错误不允许加载本地资源

时间:2016-04-08 20:51:26

标签: php yii yii2

我试图从我的应用程序的后端显示图像

<?php foreach ($img as $key=>$row): ?>
<div class="products_inside_wrapper intro_wrapper">
<div class="classes_inside_item bordered_wht_border">
<?php
foreach (explode(';',rtrim($row['images'],';')) as $key_img => $value_img)
{
?>
<?php echo  Html::img('@backend/web'.'/'.$value_img);?>                  
<?php
}
?>
</div>
</div>
<?php endforeach; ?>

尝试使用上面的代码显示所有图片,但在打开Goog​​le Chrome检查元素时收到错误Not allowed to load local resource

3 个答案:

答案 0 :(得分:2)

我认为您使用的是本地网址,而不是使用此

<?php echo  Html::img('@backend/web'.'/'.$value_img);?>   

尝试使用它

  <?= Html::img(Yii::getAlias('@web').'/images/'.$value_img]);?>

答案 1 :(得分:2)

由于stig-js回答您无法直接加载本地保存的图像,如果您真的对从本地路径加载资源感兴趣,可以使用fopen打开图像作为二进制文件并回显内容它具有适当的标题输出。通常,您可以像这样在模型中添加方法:

public function getImage($imageName)
{
    $imagePath = '@backend/web' . '/' . $imageName;

    $fileInfo = finfo_open(FILEINFO_MIME_TYPE);
    $contentType = finfo_file($fileInfo, $imagePath);
    finfo_close($fileInfo);

    $fp = fopen($imagePath, 'r');

    header("Content-Type: " . $contentType);
    header("Content-Length: " . filesize($imagePath));

    ob_end_clean();
    fpassthru($fp);
}

P.S:你也可以将这个答案的组合与在HTML上显示图像作为base64一起使用。见How to display Base64 images in HTML?

答案 2 :(得分:1)

图片必须可以通过网址访问,例如

yoursite.com/backend/imagedir/IMG'

如果 yoursite.com/backend 指向您的backend/web文件夹。

后端别名指向本地路径,因此您需要自定义别名才能访问图像文件夹。

Yii2别名http://www.yiiframework.com/doc-2.0/guide-concept-aliases.html