0
我使用imap_fetcheader獲取郵件的附件,只是內容。下面的代碼 -imap_fetchheader字節與實際文件大小
if (isset($content->ifdparameters) && $content->ifdparameters == 1 && isset($content->dparameters) && is_array($content->dparameters)) {
foreach ($content->dparameters as $object) {
if (isset($object->attribute) && preg_match('~filename~i', $object->attribute)) {
$attachment = new EmailAttachment();
$attachment->attachment_name = $object->value;
$attachment->attachment_size = $this->format_bytes($content->bytes);
$attachment->attachment_part_id = empty($actualpart) ? 1 : $actualpart;
$attachment->attachment_encoding = $content->encoding;
$results[] = $attachment;
}
}
}
的format_bytes
功能是在這裏 -
private function format_bytes($bytes, $precision = 2) {
$units = array('B', 'KB', 'MB', 'GB', 'TB');
$bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0)/log(1024));
$pow = min($pow, count($units) - 1);
$bytes /= pow(1024, $pow);
return round($bytes, $precision) . ' ' . $units[$pow];
}
當用戶點擊附件,我抓住從郵件服務器的附件內容和回聲回覆內容。
的問題是 -
由$content->bytes
屬性報告的字節數基本上是不同的,那麼什麼會下載到客戶端計算機...
這是一個已知的問題?
郵件服務器是託管在CentOS操作系統上的POSTFIX。
因此,當我沒有真正下載附件時向用戶展示尺寸時,我可以將其減少33%並將其顯示給用戶,否則這會太糟糕了嗎? –
大部分時間都合理,但這個大小實際上反映了數據的使用情況。在某些情況下,它可能會被引用 - 可打印編碼,或者可能根本沒有編碼(純粹的ascii.txt文檔)。在調整之前,您需要找出編碼。如果它是base64,那是一個合理的假設。 – Max
另外,這是PHP數學;)你需要減少25%,而不是33%。增加33%到3,你有4。現在減少25%,你又有3。 – arnt