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

标签 php codeigniter http md5

我似乎无法解决这个问题。我正在使用带有 HTTP header 的 PHP 下载文件(Moodle .mbz 扩展名)。该文件首先使用 aws php sdk 从 Amazon S3 下载到服务器,效果很好。问题是将文件从服务器下载到另一个工作站。无论我似乎做了什么更改,工作站上的文件和服务器上的文件的 md5 校验和都不匹配。客户端无法将下载到工作站的 .mbz 文件还原。文件似乎发生了一些变化,需要以某种方式更改它,但我不知道是什么。

我引用了: 1. this tutorial 2. This similar SO question 以及通过谷歌的各种其他资源。我很绝望,如果可以的话请帮忙。我已确保在 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 个空格被附加到使用上述代码下载的文件与服务器上的文件的开头。

最佳答案

这与其说是一个答案,不如说是一个实验建议。

我想知道是否有 mime 问题。我找到了 this file其中,在第 145 行,将“mbz”的 mime 类型描述为“application/vnd.moodle.backup”。也许通过更改 Content-Type header ,您可以获得更好的结果。

据我了解,“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");

关于php - 下载文件时 md5 校验和不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53161804/

相关文章:

java - 识别路由器/防火墙后面的客户端

c# - 如何在 Startup.cs ASP.NET Core 中删除 WebDav

php - xdebug.so 找不到合适的图像

php - 使用 PHP/MySQL 插入闭包表

ajax - 如何通过 YouTube API v3 更新已上传视频的片段和状态值?

php - PostgreSQL 查询中的 Codeigniter 非法字符串偏移服务器问题

codeigniter - * foreach 里面的 foreach codeigniter 2?

php - 使用 img src 调用 php 文件

JavaScript 未按顺序运行

php - 如何通过检查ajax或php中的文本框值来更新数据库值