2014-04-03 2 views
0

나는 메일 첨부 파일을 얻으려면 imap_fetcheader을 사용하고 있습니다. 여기 코드는 -imap_fetchheader bytes 대 실제 파일 크기

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입니다.

답변

2

이는 대개 약 33 % 더 커집니다. 추가 base64 인코딩이 추가되기 때문입니다.

다른 인코딩이 있지만 base64는 첨부 파일 중 가장 일반적인 인코딩입니다.

+0

그래서 실제로 첨부 파일을 다운로드하지 않고 사용자에게 크기를 보여줄 때 33 %까지 줄여서 사용자에게 보여 주거나 너무 좋지 않을까요? –

+0

대부분의 경우 합리적이지만 그 크기는 실제로 데이터 사용을 반영합니다. 대신 따옴표 붙이기 - 인쇄 가능한 인코딩 된 또는 전혀 인코딩되지 않은 경우가 있습니다 (일반 ascii.txt 문서). 조정하기 전에 인코딩을 찾아야합니다. base64라면 합리적인 가정입니다. – Max

+1

PHP 수학도 마찬가지입니다.) 33 %가 아니라 25 % 줄여야합니다. 3에 33 %를 추가하면 4가됩니다. 이제 25 % 줄이면 3이 다시 생깁니다. – arnt