我正在尝试循环遍历 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 命令,这将为您提供无限的时间。
此外,您希望在循环内尽可能少地执行操作。对于一个巨大的文件,您也很可能会耗尽内存空间来存储所有这些数据。
所以:
记住,浏览器请求应该很快!如果你花了 10 秒,那么你就在做一些你不应该做的事情,如果 30 秒还不够,那么就有严重错误了!可能在慢速服务器上处理巨大的 CSV 文件,但即使在超快的高端专用托管上,您也不应该这样做,尤其是在前端
添加到 Tom J Nowells 答案,如果使用 CLI 和/或将 CSV 分割成更小的文件不可行,您也可以增加 增加 PHP 执行时间限制。