我目前正在制作一个控制器来从服务器下载文件。 这一切都发生在索引动作中:
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字节的图像测试它。问题是..图像已损坏,因此无法查看/编辑。我的代码中我做错了什么?
谢谢!
答案 0 :(得分:1)
您应该使用二进制模式。使用&#; rb'旗。
从php手册:如果你没有指定' b'使用二进制文件时,您可能会遇到奇怪的数据问题,包括损坏的图像文件和\ r \ n字符的奇怪问题。