Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示水滴图像-symfony_Php_Symfony1 - Fatal编程技术网

Php 显示水滴图像-symfony

Php 显示水滴图像-symfony,php,symfony1,Php,Symfony1,我的数据库中有blob数据,它们是我想作为基本图库显示的图像 我编写了一个方法来显示图像,但是我得到了一个错误,它是一个字符串,而不是返回的blob数据: public function getFilenamePath() { $file_src = false; if (null !== $fp = $this->getFilename()) { $file = stream_get_contents($fp); $file_src = '

我的数据库中有blob数据,它们是我想作为基本图库显示的图像

我编写了一个方法来显示图像,但是我得到了一个错误,它是一个字符串,而不是返回的blob数据:

public function getFilenamePath()
{
    $file_src = false;
    if (null !== $fp = $this->getFilename())
    {
      $file = stream_get_contents($fp);
      $file_src = '/uploads/gallery/'.$this->getId().'.jpg';
    }
    return $file_src;
 }
其中
getFilename()
是我的blob列

行动:

 public function executeSingle(sfWebRequest $request)
 {
    $application_id = $this->getRequestParameter('id');
    $c = new Criteria();
    $c->addJoin(GalleryPeer::APPLICATION_ID, ApplicationPeer::ID);
    $c->addJoin(GalleryImagePeer::GALLERY_ID, GalleryPeer::ID);
    $c->add(GalleryPeer::APPLICATION_ID, $application_id);

    $this->galleries = GalleryImagePeer::doSelect ( $c ); 
 }
模板:

           foreach($galleries as $gallery)
           {

            $path = $gallery->getFilenamePath();
            if($path)
            {
               echo '<img src="'.$path.'" />';
            }

           }
foreach($gallery作为$gallery)
{
$path=$gallery->getFilenamePath();
如果($path)
{
回声';
}
}
我得到的错误是,
stream\u get\u contents
似乎在返回字符串

无论如何,我是否可以获取blob数据,或者不使用模型方法,而是使用操作返回附加到应用程序的所有图像


谢谢

如果您将图像存储在数据库中,您(基本上)有两个选项可以在客户端上显示它们:

第一种解决方案:获取文件内容并使用base64编码对其进行编码。您可以在此处找到一个工作示例:

这种方法不是最好的,因为如果您这样做,客户端将无法缓存这些图像,这意味着更多的流量、更多的处理时间、更多的数据库连接、较慢的页面加载等

第二种解决方案:在Symfony中创建图像加载操作。路由如下所示:

mapimage:
  url: /myimage/:image_id.png
  param: { module: myimagemodul, action: myimageaction }
您必须创建一个控制器操作myimageaction,在那里您可以获得如下所示的图像ID

$request->getParameter('image_id')

并从数据库中获取blob数据,并将其作为具有特定http头的二进制文件返回。您可以通过简单的谷歌搜索找到工作示例,例如:

$this->image = ImagePeer::retrieveByPk ($request->getParameter('image_id'));

$response = $this->getResponse();
$response->clearHttpHeaders();
$response->setContentType ($this->image->getMimeType());
$response->setHttpHeader ('Content-Disposition', 'inline;filename='.$filename);
$content = $this->image->getData();
$response->setContent (stream_get_contents ($content));

$this->setLayout (false);
return sfView::NONE;
因此,在模板中,您可以执行以下操作:

<img src='<?= url_for ('route_to_action_above', array ('image_id' => $image->getId()) ?>'/>
$image->getId())?>'/>
我在家里找到了这个


如果将图像存储在数据库中,则(基本上)有两个选项可在客户端上显示它们:

第一种解决方案:获取文件内容并使用base64编码对其进行编码。您可以在此处找到一个工作示例:

这种方法不是最好的,因为如果您这样做,客户端将无法缓存这些图像,这意味着更多的流量、更多的处理时间、更多的数据库连接、较慢的页面加载等

第二种解决方案:在Symfony中创建图像加载操作。路由如下所示:

mapimage:
  url: /myimage/:image_id.png
  param: { module: myimagemodul, action: myimageaction }
您必须创建一个控制器操作myimageaction,在那里您可以获得如下所示的图像ID

$request->getParameter('image_id')

并从数据库中获取blob数据,并将其作为具有特定http头的二进制文件返回。您可以通过简单的谷歌搜索找到工作示例,例如:

$this->image = ImagePeer::retrieveByPk ($request->getParameter('image_id'));

$response = $this->getResponse();
$response->clearHttpHeaders();
$response->setContentType ($this->image->getMimeType());
$response->setHttpHeader ('Content-Disposition', 'inline;filename='.$filename);
$content = $this->image->getData();
$response->setContent (stream_get_contents ($content));

$this->setLayout (false);
return sfView::NONE;
因此,在模板中,您可以执行以下操作:

<img src='<?= url_for ('route_to_action_above', array ('image_id' => $image->getId()) ?>'/>
$image->getId())?>'/>
我在家里找到了这个


这个代码没有任何意义

为什么要将二进制(读取字符串)数据从
->getFilename()
馈送到仅对
资源
数据类型操作的
流式获取内容()
?它当然会抱怨

将blob输出到浏览器非常简单:

$this->getResponse->setContentType('image/jpeg');
echo $data->getFilename(); // assuming filename column is your blob column

这个代码没有任何意义

为什么要将二进制(读取字符串)数据从
->getFilename()
馈送到仅对
资源
数据类型操作的
流式获取内容()
?它当然会抱怨

将blob输出到浏览器非常简单:

$this->getResponse->setContentType('image/jpeg');
echo $data->getFilename(); // assuming filename column is your blob column

请尝试将getFilenamePath函数切换到此

public function getFilenamePath() {
    $file_src = '/uploads/gallery/'.$this->getId().'.jpg';
    if (file_exists($file_src ) {
        return $file_src;
    } else {
        return false;
    }
}

请尝试将getFilenamePath函数切换到此

public function getFilenamePath() {
    $file_src = '/uploads/gallery/'.$this->getId().'.jpg';
    if (file_exists($file_src ) {
        return $file_src;
    } else {
        return false;
    }
}
$profile\u picture=base64\u编码(stream\u get\u contents($image->getContent());
回声';
$profile\u picture=base64\u encode(stream\u get\u contents($image->getContent());
回声';

如果在本地以及
/uploads/gallery
下都有图像,为什么要将图像作为blob数据存储在数据库中?您在哪里使用了示例中的
$file
。。。搞什么鬼?为什么要将任何内容流式传输到$file中?似乎我使用的代码>使用的是$file中的stream\u get\u内容。所以我想我不小心把它忘在了里面。我使用了$file\u src路径/uploads/gallery,所以在html源代码中我有一个指向图像的路径。我不确定我是否可以用其他方法来完成。如果您在本地也在
/uploads/gallery
下保存图像,为什么要将图像作为blob数据存储在数据库中?您在哪里使用了示例中的
$file
。。。搞什么鬼?为什么要将任何内容流式传输到$file中?似乎我使用的代码>使用的是$file中的stream\u get\u内容。所以我想我不小心把它忘在了里面。我使用了$file\u src路径/uploads/gallery,所以在html源代码中我有一个指向图像的路径。我不确定我是否可以用其他方法,但这是针对多个图像的。我有一个名为application(id)、gallery(id、application\u id)和image\u gallery(id、gallery\u id)的表。因此,我需要图库中与应用程序关联的所有图像,因此需要我的图库。当然,上面的代码只会显示一个图像?无论何时,只要你想显示一个图库,你就可以从数据库中获取所有图像,并在模板中生成一个HTML,对于所有标记源URL,你都可以使用上面描述的控制器。我正在用模板代码更新答案。但是您在上面提供的代码默认情况下将显示图像。我想要一个html模板,一个图像列表。但这是多个图像。我有一个名为application(id)、gallery(id、application\u id)和image\u gallery(id、gallery\u id)的表。因此,我需要图库中与应用程序关联的所有图像,因此需要我的图库。当然,上面的代码只会显示一个图像?无论何时,只要你想显示一个图库,你就可以从数据库中获取所有图像,并在模板中生成一个HTML,对于所有标记源URL,你都可以使用上面描述的控制器。我正在用模板代码更新答案。但是您在上面提供的代码默认情况下将显示图像。我想要一个html模板,一个图像列表