簡體   English   中英

任何文件獲取的 phpseclib 文件錯誤結束

[英]End of file error for phpseclib for any file get

對於使用 phpseclib 從特定 SFTP 服務器下載的任何文件,我收到NET_SFTP_STATUS_EOF: End of file錯誤。 盡管我認為它沒有任何解決方案,但在這里提出了類似的問題。

奇怪的是,所有文件似乎都正確導入並且文件大小相同,但是,錯誤仍然產生,讓我有點擔心,因為正確導入這些文件至關重要。

我正在使用最新版本的 phpseclib 和 PHP 7.3。 我在此處附加了我要下載的文件(似乎確實下載正確但會產生此錯誤)和使用define('NET_SSH2_LOGGING', 3) here的 SFTP 轉儲。

任何有關為什么 phpseclib 產生此錯誤的幫助將不勝感激。

這不是問題。

phpseclib 以 32kb 的塊下載文件。 SFTP 客戶端發送的每個下載請求都會跟進來自 SFTP 服務器的下載響應。 為了加快速度,phpseclib 發送 32x 下載請求,然后讀取 32x 下載響應。 事實證明,這比交錯它們更快(例如,發送 1x 下載請求並讀取 1x 下載響應)。 這可以通過NET_SFTP_QUEUE_SIZE常量進行配置。

32kb x 32 = 1mb。 所以基本上 phpseclib 以 1mb 為單位發送下載請求。 如果文件不在 x mb - 32kb和 x mb 之間(其中 x 是整數),那么最后一批 32x 下載請求將太多。

理論上,phpseclib 可以在下載文件之前查看文件的大小,以便最后一批的下載請求數是准確的,但是如果您是從設備下載的呢? 例如。 /dev/null/dev/urandom或其他什么? 此時stat會說文件大小為 0。

phpseclib 所做的不是查看文件大小,而是讀取直到響應不是下載響應而是下載“狀態”。 例如。 “文件結束”。

我可以 go 關於為什么下載請求是 32kb 而不是另一個大小,或者為什么一次只下載 32x(相對於 64 或其他),但是,足以說,這是預期的行為,沒什么好擔心的。

暫無
暫無

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

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