![](/img/trans.png)
[英]barbushin imap-php get attachments how to store attachments on server
[英]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.