通过内容类型为Yii的php文件显示图像

时间:2012-01-14 09:17:59

标签: php image header yii

<?php
class TestController extends CController
{
    public function actionIndex()
    {
            $filename = "test.jpg";
            $path=Yii::getPathOfAlias('webroot.protected.images') . '/';
            $file=$path.$filename;

            if (file_exists($file))
            {
                $img=getimagesize($file);
                header('Content-Type: '.$img['mime']);
                readfile($file);
                exit;
            }
    }
    public function actionDisplayimg()
    {
            echo "<img src='".CController::createUrl('test/')."' />";
    }
}
?>

无法在test / index或test / displayimg上显示图像。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

我认为在调用readfile之前必须设置正确的标头和内容类型。

public function actionIndex()
{
        $filename = "test.jpg";
        $path=Yii::getPathOfAlias('webroot.protected.images') . '/';
        $file=$path.$filename;

        if (file_exists($file))
        {

               $request = Yii::app()->getRequest();
               $request->sendFile(basename($file),file_get_contents($file));
        }

答案 1 :(得分:0)

你可以调用view并从action中传递一些参数并在那里显示

例如

(未测试)

<?php
class TestController extends CController
{
    public function actionIndex()
    {
            $filename = "test.jpg";
            $path=Yii::getPathOfAlias('webroot.protected.images') . '/';
            $file=$path.$filename;

            if (file_exists($file))
            {
                $this->render('view',array(
            'filepath'=>$file,
        ));
    }
}
?>

并且view你可以做点什么

echo CHtml::image(filepath, 'image', array('class' => 'banner'));