[英]PHP script always exceeds memory limit and maximum execution time - phpseclib
我正在使用 phpseclib 連接 sftp 服務器,並使用$sftp->nlist
列出目錄。 我可以列出所有小目錄,但是當列出一個包含超過 8000 個文件的目錄時,超出了 memory 限制。 我已經設置了ini_set('memory_limit','128M')
和ini_set('max_execution_time', '300');
但不可能等待請求的響應。 有什么辦法可以一點一點的恢復這個數組,釋放memory? 對不起英語不好
ini_set("display_errors",true);
ini_set('memory_limit', '128M');
ini_set('max_execution_time', '300');
set_include_path("/var/www/cremesp.com/_class/API/UnnamedOpenSourceGroup/phpseclib/");
include_once("Net/SFTP.php");
$ftp_server = "*****";
$ftp_username = "*****";
$ftp_password = "*****";
$sftp = new Net_SFTP($ftp_server, *****);
$sftp->login($ftp_username, $ftp_password);
$files_proc = $sftp->nlist("/PROC/");
正如我所說,我可以列出其他目錄,但是 /PROC 是最大的,大約需要 150 秒才能響應
使用分頁掃描目錄並列出帶有偏移量的文件名:
參考: https://www.php.net/scandir
$limit = 1000;
$offset = 0;
$dir = scandir($path);
for ($i = $offset; $i < $limit; $i++) {
echo $dir[$i] . "<br />";
}
使用一些分頁邏輯來增加偏移量。
或者
您可以將 memory_limit 更新為 0:
ini_set("memory_limit", "-1");
set_time_limit(0);
請參閱: PHP - 從目錄中讀取大量文件
上面有使用 RecursiveDirectoryIterator 的答案,這可能會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.