php - 通过 PHP 文件下载使用 Content-Length 时如何修复“下载不完整”错误
问题描述
我创建了一个 downloadt.php 文件来直接从电子邮件服务器下载我的电子邮件附件,而不将其保存在我的网站空间中。我单击提交按钮将数据发布到我的 save_attachment.php 文件。
它工作得很好,但如果我添加“内容长度”行,它不会每次都有效。所以我发现,并不是所有的智能手机浏览器都能在这条线上正常工作。所以我检查是否有智能手机,如果没有,我添加内容长度。因为我想知道桌面浏览器中的文件大小和下载过程。
现在可以了。但是,如果我尝试下载更大的文件(超过 1-2MB),则下载开始,但因“下载不完整”而关闭。小文件效果很好(50 KB)。
编辑:在 chrome 中工作。问题仅在IE中...
我试图改变 Content-type, header("Pragma: public"); header("过期时间:0"); header('HTTP/1.1 206 部分内容');
<?php
session_start();
If ((Isset($_POST['uid']) == false) or (Isset($_SESSION['user']) == false) or (Isset($_SESSION['pw']) == false)) {
echo ("Keine Zuordnung vorhanden");
return;
}
$get_username = $_SESSION['user'] ;
$get_pw = $_SESSION['pw'] ;
$get_server_in = $_SESSION['server_in'];
$get_uid = $_POST['uid'];
$get_partNum = $_POST['data-attachment_partNum'];
$get_encoding = $_POST['data-enc'];
$imap_open= imap_open($get_server_in, $get_username, $get_pw);
$msgno = imap_msgno($imap_open, $get_uid);
function downloadAttachment($imap, $uid, $partNum, $encoding) {
$partStruct = imap_bodystruct($imap, imap_msgno($imap, $uid), $partNum);
$filesize = $partStruct->bytes;
$filename = $partStruct->dparameters[0]->value;
$message = imap_fetchbody($imap, $uid, $partNum, FT_UID);
$path_info = pathinfo($filename);
switch ($encoding) {
case 0:
case 1:
$message = imap_8bit($message);
break;
case 2:
$message = imap_binary($message);
break;
case 3:
$message = imap_base64($message);
break;
case 4:
$message = quoted_printable_decode($message);
break;
}
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . $filename);
header("Content-Transfer-Encoding: binary");
header("Pragma: public");
header("Expires: 0");
header('HTTP/1.1 206 Partial Content');
if ($_SESSION['mobile'] != "true"){
header("Content-Length: ".$filesize);
header("Content-Range: 0-".($filesize-1)."/".$filesize);
}
echo $message;
//echo $filesize;
// echo ini_get ( 'memory_limit');
}
downloadAttachment($imap_open, $get_uid, $get_partNum, $get_encoding);
?>
谢谢您的帮助
解决方案
推荐阅读
- android - Android 支持库必须使用完全相同的版本
- python - 关于继承先前模型的意见
- typescript - 如何在打字稿中使用装饰器修改描述符
- python - [Python Falcon]:gunicorn 在终端中工作,但不在 PyCharm 中
- c# - 如何组合来自多个测试运行的范围报告?(C#,NUnit)
- php - Magento - PayPal标准付款不起作用
- mysql - 在 NetBeans (Mac OS) 上创建 MySQL 连接
- python - 在 Sublime Text 3 中只构建一行 - python
- linux - 这个带有多个 eval 的语句是如何工作的?
- mongodb - 确保 MongoDB 聚合中的查询顺序?