我正在将文件从 FTP 服务器复制到我的本地磁盘。$allFilesList = array_filter(Storage::disk('ftp')->files('HSP'), function ($item) { return strpos($item, 'json');});foreach ($allFilesList as $file) { $newFile = Storage::disk('ftp')->get($file); Storage::disk('public')->put(basename($file),$newFile);}echo "finished"; 该程序有效。文件将在 2-3 秒内复制(约 50 个文件)。但是由于某种原因,它需要 2-3 分钟才能通过 foreach 循环并显示回声。我不知道是什么导致了这种“延迟”。我怎么能检查发生了什么?@Mark Overton 我跑了微时。出于某种原因,它跳到最后:This loop finished at 0.084124088287354This loop finished at 0.11676001548767This loop finished at 0.15384912490845...This loop finished at 1.342885017395This loop finished at 1.3753559589386This loop finished at 1.4076399803162This loop finished at 181.64192605019This loop finished at 181.67514610291This loop finished at 181.70819401741我将添加文件名以查看它在哪个文件中停止并检查文件是否存在。奇怪的是,我在渲染之前以列表方式复制了最后一个文件并且文件没问题。更新 1经过额外的测试,我发现它总是停在第 40 号文件。我将文件移动到另一个目录以排除硬盘驱动器问题。我尝试删除以前停滞的文件。然后我尝试了 39 个文件,效果很快。我尝试使用以前的“有问题”文件,但没有尝试。在第 40 号文件中,它停滞不前。我将尝试重命名文件以查看文件名长度是否有问题。在那之后我不知道可能是什么问题..更新 2在对不同的文件、位置和文件名进行测试后,我在 FTP 连接上设置了超时,结果得到了显着改善,所以我猜这与驱动程序或 FTP 服务器本身有关。无论如何,我将每天使用一次此功能来复制一个文件。偶尔会复制所有文件,所以我不会进一步优化。现在的结果是:Loop: 36 finished at: 1.3631699085236Loop: 37 finished at: 1.3963389396667Loop: 38 finished at: 1.4288220405579Loop: 39 finished at: 1.461541891098Loop: 40 finished at: 5.5195620059967Loop: 41 finished at: 5.5600368976593Loop: 42 finished at: 5.592465877533
1 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
使用微时
它应该告诉您每个循环需要多长时间,这可能就是运行需要多长时间,但是您可能会发现使用此方法可以加快代码的一部分以缩短运行时间。
$start = microtime(true);
$allFilesList = array_filter(Storage::disk('ftp')->files('HSP'), function ($item) {
return strpos($item, 'json');
});
foreach ($allFilesList as $file) {
$newFile = Storage::disk('ftp')->get($file);
Storage::disk('public')->put(basename($file),$newFile);
echo 'This loop finished at ' . (microtime(true) - $start) . '<br />';
}
echo "finished";
- 1 回答
- 0 关注
- 185 浏览
添加回答
举报
0/150
提交
取消