<?php
public function beforeFilter(\Cake\Event\Event $event)
{
$user = $this->request->session()->read('Auth.User');
$this->set('username', $user['username']);
$this->set('profile', $user['profile_pic'])
}
?>
在上面的代码中,我可以print
内部元素/文件夹/ nav.ctp中的username
<?php
echo $this->Html->image('users/' .stream_get_contents($profile),array('width'=>'100px','height'=>'100px'));
?>
当我打印图像时,会在下面发出警告信息。
警告(2):stream_get_contents()期望参数1是资源, 给定的整数[APP / Template / Element / folder / nav.ctp,第19行]
答案 0 :(得分:1)
阅读错误信息,非常清楚:
stream_get_contents()期望参数1为资源,给定整数
所以你传递一个int而不是一个资源。在这种情况下,首先要查找方法所期望的内容。请参阅stream_get_contents()的php文档。它显然需要a stream resource。查看stream和resource的内容,然后采取相应措施。
但是,您尝试的方法不会以这种方式工作,因为您没有访问文件系统中的文件。请参阅fopen()上的文档。
您必须在标记中将您的图像作为base64编码的二进制数据进行回显。请参阅此处的答案:Is it possible to put binary image data into html markup and then get the image displayed as usual in any browser?由于base64编码,这将增加图像的大小约30%。
我不会为许多大图片做这件事。从来没有和很多人一起做过,但我很确定浏览器会遇到性能问题。请注意,除了可能的性能问题之外,此解决方案可能存在安全问题。我可以想象,如果没有正确处理数据,可以利用它将不需要的东西注入页面标记。
将图像存储在未明确为此任务制作的数据库中通常被视为不良做法。将其存储在为此目的而制作的存储后端中,并引用数据库中的位置。
对于将来,如果您不了解它们并阅读文档,如果您不知道他们做了什么,请记住阅读和查找错误消息