下载文件时md5校验和不匹配

时间:2018-11-05 20:34:07

标签: php codeigniter http md5

我似乎无法弄清楚这个问题。我正在使用带有HTTP标头的PHP下载文件(Moodle .mbz扩展名)。首先使用aws php sdk将文件从Amazon S3下载到服务器,效果很好。问题是将文件从服务器下载到另一个工作站。无论我似乎要进行什么更改,工作站上的文件和服务器上的文件的md5校验和都不匹配。客户端无法还原已下载到工作站的.mbz文件。似乎文件正在发生某种更改,但是我无法弄清楚是什么。

我引用了: 1. this tutorial 2. This similar SO question 以及Google提供的其他各种资源。我很拼命,如果可以的话请帮助。我确保在httpd.conf文件中关闭了压缩功能。在php.ini中完全关闭了调试功能。我可以在开发和暂存环境中复制该问题。

以下是直接下载的代码:

<?php
    if(!file_exists($filename))
    { 
        // file does not exist
        die('file '.$filename.' not found');
    } else 
    {
	$this->load->model('Job_model', 'job');
	$save_as = $this->job->get_file_name_from_key($filename);
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"$save_as\"");
        header("Expires: 0");
        header("Pragma: public");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Length: " . filesize($filename));
        readfile($filename);
}

将PHP与codeigniter框架一起使用(如果相关)。

谢谢!

编辑:前16个字节的八进制转储表明,使用上述代码与服务器上的文件相比,在使用上述代码下载的文件的开头添加了4个空格。

2 个答案:

答案 0 :(得分:0)

这并不是对实验的建议。

我想知道是否有哑剧问题。我发现this file,在第145行中将“ mbz”的哑剧类型描述为“ application / vnd.moodle.backup”。也许通过更改Content-Type标头,可以获得更好的结果。

据我了解,“ mbz”基本上是一个zip文件。因此,尝试将以下内容添加到 /application/config/mimes.php 的底部。

'mbz' => array('application/vnd.moodle.backup', 'application/zip'),

如果要涵盖所有基础,可以将定义扩展为

'mbz' => array('application/vnd.moodle.backup', 'application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip'),

将所有可能的内容都转换为zip类型,并使其成为“默认”“ application / vnd.moodle.backup”。我会先尝试简单的版本。

尝试使用此标题

 header("Content-Type: application/vnd.moodle.backup");

答案 1 :(得分:0)

所以我找到了this question,特别是MrPanda的回答。我遍历了我在控制器中调用/初始化的所有帮助程序和库(已编写),并在关闭php标记后删除了所有空白。问题解决了。感谢那些试图帮助我的用户!两天的挫折终于结束了。