下载文件后,它已损坏

时间:2014-05-27 15:26:25

标签: php file zend-framework

我目前正在制作一个控制器来从服务器下载文件。 这一切都发生在索引动作中:

public function indexAction() {
    $schuurName = $this->_getParam('storageID');
    $fileName = $this->_getParam('fileName');
    $name = explode('.', $fileName)[0];
    $path = '..' . DIRECTORY_SEPARATOR . 'schuren' . DIRECTORY_SEPARATOR . $schuurName . DIRECTORY_SEPARATOR . $fileName;
    if (file_exists($path)) {
        $mimeType = mime_content_type($fileName);
        header('Content-Type: ' . $mimeType);
        header('Content-Length: ' . filesize($path));
        header('Content-Disposition: attachment; filename=' . $name . ';');
        $resource = fopen($path, 'r');
        while (!feof($resource)) {
            $chunk = fread($resource, 4096);
            echo $chunk;
        }
        $this->view->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
    }
    else {
        echo 'file doesn\'t exist';
    }

}

所以现在下载工作,我用725字节的图像测试它。问题是..图像已损坏,因此无法查看/编辑。我的代码中我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

您应该使用二进制模式。使用&#; rb'旗。

从php手册:如果你没有指定' b'使用二进制文件时,您可能会遇到奇怪的数据问题,包括损坏的图像文件和\ r \ n字符的奇怪问题。

http://www.php.net/manual/en/function.fopen.php