簡體   English   中英

PHP獲取imap附件的文件大小

[英]PHP get filesize of imap attachments

我正在使用imap的核心PHP函數閱讀包含PHP的imap電子郵件並下載附件。 我也通過imap協議(不是POP)進行連接。 我希望能夠在將附件加載到內存之前了解附件的文件大小,以減少服務器資源的使用。

例如,我希望每個附件限制為5mb,這樣我可以丟棄超出限制的所有附件,然后再使用任何服務器資源。 查找電子郵件的大小可能會有所幫助,但是問題是我希望每個附件而不是每個電子郵件都有限制。

imap_fetchbody()正在加載附件,所有附件均有效。 我可能可以讀取該函數結果的大小,但這意味着先將附件加載到內存中。

謝謝

我很驚訝,這個問題剛剛3年多了,沒有真正的答案。

使用imap_fetchstructure();加載電子郵件結構imap_fetchstructure(); 會顯示您完成此任務所需的所有信息。 我假設您知道在使用imap_fetchstructure();之前如何獲取要檢查的特定電子郵件imap_fetchstructure();

無論如何,該函數將返回“零件”列表。 這些部分屬於IMAP4規范。 結果在一個數組中給出,數組索引之一稱為bytes ,它指示該部分的字節數。 還有一個稱為encoding索引,它指示該部分的編碼方法。

保羅回答說,Base64編碼通常比原始大小大33%,這足以確定附件的原始數據長度。

我相信,通過使用imap_savebody();將數據直接寫入文件句柄,可以避免將數據加載到內存的麻煩imap_savebody(); 功能。 您可以通過在調用imap_savebody();之前imap_savebody();文件句柄添加流過濾器來克服編碼問題imap_savebody(); 這是通過stream_filter_append();實現的stream_filter_append(); 功能。

當我有更多時間時,我可以編輯答案並添加一些有效的PHP代碼。

我意識到這是一個較舊的文章,但是如果有幫助,大小上的差異是由於附件是通過base64編碼的,這導致數據擴展了大約33%。 來自RFC3501 :“ [Body size is]一個數字,以八位字節給出主體的大小。請注意,此大小是其傳輸編碼中的大小,而不是任何解碼后的結果大小。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM