簡體   English   中英

PHP 腳本總是超過 memory 限制和最大執行時間 - phpseclib

[英]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.

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