使用 Yii 提供位于 Web 应用程序文件夹之外的图像,性能问题



>我有以下控制器/操作:

<?php
class ImageController extends CController {
    public function actionView($folder, $name) {
        $ds = DIRECTORY_SEPARATOR;
        $file = Yii::app()->params['images_path'] . $ds . $folder . $ds . $name;
        $content = file_get_contents($file);
        Yii::app()->request->sendFile($file, $content);
    }
}

这将是一个基本的图像服务操作。我的图像位于 Web 根文件夹之外。问题是如何优化文件的读取。似乎每个请求执行整个 Yii 应用程序只是为了提供一个图像。网站上有很多图像,这是一个很大的性能问题。有什么想法可以解决这个问题吗?

实际上sendFile()用于提供下载服务,而不是查看文件内容。老实说,我不明白你想做什么,但从我的做法来看 - 带有sendFile()的文件可能会损坏。有不同的原因,其中 1 个是日志记录,它还会导致一些性能问题。删除除 CFileLogRoute 之外的所有记录器。可以在配置或基本控制器中完成:

public function disableProfilers()
{
    if (Yii::app()->getComponent('log')) {
        foreach (Yii::app()->getComponent('log')->routes as $route) {
            if (in_array(get_class($route), array('CProfileLogRoute', 'CWebLogRoute', 'YiiDebugToolbarRoute','DbProfileLogRoute'))) {
                $route->enabled = false;
            }
        }
    }
}

然后您的下载操作将是

    public function actionDownloadFile()
    {
        $this->disableProfilers();        
        $file = '/path/to/file/some_file.txt';
        Yii::app()->request->sendFile(basename($file),file_get_contents($file));
    }

使用 php 和 file_get_contents 提供文件是有效的操作,所以如果你有很多图像要提供 - 通过 HTTP 服务器提供它们。

最新更新