arrays - 来自 csv 文件的循环数组导致致命错误:超过 30 秒的最大执行时间
问题描述
我正在尝试遍历 csv 文件中的数组以插入新信息。但是,一旦程序到达循环,它就会抛出一个时间异常。我完全迷失了这个......任何帮助将不胜感激。先感谢您。
function readAndWriteToCsv(String $fullDirectory, Array $images, String $pageTitle)
{
//echo '<br>';
$newDirectoryPath = $fullDirectory . '\\CSVproducts.csv';
$lines2 = file($newDirectoryPath);
echo 'Directory string made: ' . $newDirectoryPath;
echo '<br>';
//$lines = file('D:\\Dropbox (Personal)\\white-performance\\scrap\\1-PAIR-OF-BBC-HEAD-GASKET-GASKETS-MULTI-LAYERED-STEEL-4.585\\pageTitle.txt');
$csvTests = array_map('str_getcsv', $lines2);
var_dump($csvTests);
echo '<br>';
echo '<h2>'.$csvTests[1][3].'</h2>';
echo '<br>';
echo '<h2>'. sizeof($csvTests).'</h2>';
echo '<br>';
echo '<h2>'.$csvTests[1][28].'</h2>';
echo '<br>';
echo '<h2>'.$csvTests[2][3].'</h2>';
echo '<br>';
echo '<h2>'.$csvTests[2][28].'</h2>';
echo '<br>';
echo '<h2>'.$csvTests[3][3].'</h2>';
echo '<br>';
echo '<h2>'.$csvTests[3][28].'</h2>';
echo '<br>';
$arraySize = sizeof($csvTests);
echo $arraySize;
for($i = 0; i < $arraySize; $i++)
{
$productName = $csvTests[i][3];
if($productName == $pageTitle)
{
//array_fill_keys('images', 'TESTING YOUR MOMA');
$csvTests[i][3][28] = implode(", ", $images);
//array_push($csvTests[1][28], $image);
echo '<br>';
echo 'Images put in key value: ';
echo $csvTests[i][28];
echo '<br>';
}
}
}
解决方案
您的脚本运行时间太长!你最多只有 30 秒的时间来完成你正在做的事情。这里没有抛出异常,这是 PHP 的计时器超时运行程序。没有这个,损坏的 PHP 脚本将永远运行并削弱您的服务器
如果您要输入真正庞大的 CSV,则需要将其拆分为较小的文件,或使用 CLI 命令,这将为您提供无限时间。
此外,您希望在循环内尽可能少地执行操作。也很有可能,对于一个巨大的文件,您可能会用完存储所有这些数据的内存空间。
所以:
- 使用 cli 命令而不是浏览器请求
- 将您的 CSV 拆分为较小的文件
- 在每次循环迭代中做更少的事情
请记住,浏览器请求应该很快!如果你用了 10 秒,那么你就在做你不应该做的事情,如果 30 秒还不够,那你就大错特错了!可能在慢速服务器上处理一个巨大的 CSV 文件,尽管即使在超快的高端专用主机上,你也不应该这样做,尤其是在前端
推荐阅读
- mysql - 为什么这个简单的 sql 事务在持有 X 锁之后还想要一个 S 锁?
- c# - 异步/等待任务不返回值
- python - 如何在 python 调试器中列出/跳过断点?
- python - 使用 Python ftplib 的远程 FTP 服务器中文件的 MD5 值
- javascript - 旋转父元素时 translateZ 元素看起来仍然是扁平的
- django-rest-framework - 如何使用来自社交身份验证的 JWT 来获取 django.contrib.models.user 的相应用户
- python - 如何找到一列的每个值到具有不同行长的其他数据框的列?
- php - 有没有办法可以在按钮单击时在 PHP 中传递变量?
- loops - 由clang优化的简单循环,如何?
- java - 超级基本问题:如何用 Java 代码制作可执行程序?