2011-12-20 2 views
2

PHP imap을 읽고 imap PHP 함수를 사용하여 첨부 파일을 다운로드하고 있습니다. IMAP 프로토콜 (POP가 아님)을 통해 연결 중입니다. 서버 리소스 사용을 줄이기 위해 메모리에로드하기 전에 첨부 파일의 파일 크기를 알 수 있어야합니다.PHP는 imap 첨부 파일의 파일 크기를 얻습니다.

예를 들어, 첨부 파일 당 5MB의 제한을 원합니다. 서버 리소스를 사용하기 전에 한도를 초과하는 첨부 파일을 삭제할 수 있습니다. 이메일 크기를 찾는 것이 도움이 될지 모르겠지만 그 문제는 첨부 당 한도가 아니라 이메일 당 한도를 원한다는 것입니다.

imap_fetchbody()은 모두 작동하는 첨부 파일을로드 중입니다. 아마 그 기능의 결과의 크기를 읽을 수는 있지만 그것은 첨부 파일을 메모리에 먼저로드하는 것을 의미합니다. 기인되는 첨부 파일

감사

답변

3

I 이것이 이전 게시물 알지만 경우는 크기의 차이이고, 도움이되는 데이터의 대략 33 %의 팽창을 초래하는 64 기수 인코딩. RFC3501에서 : "[본문 크기는] 본문의 크기를 8 진수로 제공하는 숫자입니다.이 크기는 전송 인코딩의 크기이며 디코딩 후의 결과 크기가 아닙니다."

2

이 질문은 3 년이 지나지 않아 실제 답변이 없습니다. 놀랍습니다.

imap_fetchstructure();을 사용하여 이메일 구조를로드하면이 작업에 필요한 모든 정보가 표시됩니다. imap_fetchstructure();을 사용하기 전에 확인하고 싶은 특정 이메일을받는 방법을 알고 있다고 가정합니다.

어쨌든 함수는 "부품"목록을 반환합니다. 이 부분은 IMAP4 사양입니다. 결과는 배열로 주어지며 배열 인덱스 중 하나는 해당 부분의 바이트 수를 나타내는 bytes입니다. 해당 부분에 대한 인코딩 방법을 나타내는 encoding이라는 또 다른 색인이 있습니다.

Paul의 답변에 따르면 Base64 인코딩은 일반적으로 첨부 파일의 원래 데이터 길이를 결정하기에 충분해야하는 원래 크기보다 약 33 % 더 큽니다.

imap_savebody(); 기능을 사용하여 파일 핸들에 직접 데이터를 쓰면 메모리에 데이터를로드하는 번거 로움을 피할 수 있습니다. imap_savebody();을 호출하기 전에 해당 파일 핸들에 스트림 필터를 추가하여 인코딩 문제를 해결할 수 있습니다. 이것은 stream_filter_append(); 기능에 의해 달성됩니다.

시간이 더 많으면 내 대답을 편집하고 작동하는 PHP 코드를 추가 할 수 있습니다.

+0

매우 유용합니다. 예. 필요한 모든 정보는 구조 부분에 있습니다. 나에게 그것은 표준이지만 사례별로 다를 수있다. 다른 대답은 질문에 대답하지 않습니다. – Andrew

관련 문제