内联是否需要内容长度?

时间:2014-03-27 16:41:55

标签: php apache yii http-headers

我问这个是因为我的请求在大于4Mb的文件上不断“内容长度不匹配”,即使内容长度和文件大小完全匹配。如果我删除内容长度标题,一切正常。

在内联内容(不是附件)的标题中使用内容长度是否有优势或必要性?

[编辑]代码:

public function actionViewFile($id) {
    $model = File::model()->findByPk($id);
    if(!$model) {
        throw new CHttpException(404, "File not found");   
    }
    $data = file_get_contents($this->storageDir.'/'.$model->fileName);
    header('Content-type: '.$model->mime_type);
    header('Content-length: '.$model->size); //I have tried calling `mb_strlen($data);`
    echo $data;
    Yii::app()->end(); //I have tried calling `die;`
}

我使用的框架是Yii,这对于这个问题的背景并不重要。

1 个答案:

答案 0 :(得分:0)

Content-Length entity-header字段指示实体主体的大小,以十进制数量的OCTET发送给接收者,或者在HEAD方法的情况下,指示实体主体的大小。如果请求是GET,则已发送。

尝试按照以下方式使用filesize():

public function actionViewFile($id) {

    $model = File::model()->findByPk($id);

    if(!$model) {
        throw new CHttpException(404, "File not found");   
    }

    $filepath= $this->storageDir.'/'.$model->fileName;
    $data = file_get_contents($filepath);

    header('Content-type: '.$model->mime_type);
    header("Cache-Control: no-cache, must-revalidate");
    header('Content-Length: ' . sprintf('%u', filesize($filepath)))

    echo $data;

    return Yii::app()->end(); //I have tried calling `die;`

}