我的php脚本停止运行,因为它内存不足。 这里是我的代码:php mysql循环内存泄漏?
$files = array_diff(scandir($dir_name), array('..', '.'));
if (!empty($files))
{
foreach ($files as $file)
{
if (pathinfo($file, PATHINFO_EXTENSION) == "csv")
{
$fp = fopen($dir_name.$file, 'r');
while (($line = fgetcsv($fp, 0, $delimiter)) !== FALSE)
insert_update(array_map('addslashes', $line), $connect_id);
fclose($fp);
}
}
mysqli_close($connect_id);
}
我并运行该脚本喜欢上了同一个CSV(超过60万行)的4倍。 使用完全相同的脚本,它会在不同的时刻停止... 停止之前完成的请求数:205 286 // 200 514 // 192 429 // 211 164 (我在每次尝试之前截断表)。 我总是使用相同的变量......如何使用内存可以增加? 它只是一个foreach循环......如果它的工作一次,它应该工作无限次,对吧?
谢谢,
Mickael。
PS:这里是我的功能“INSERT_UPDATE”
function insert_update($row, $connect_id)
{
$table_name = "xxxxxxxx";
$maxcol = 42;
$my_request = "INSERT INTO $table_name VALUES ('$row[0]'";
$i = 1;
while ($i < $maxcol)
{
if (isset($row[$i]))
$my_request = $my_request.", '$row[$i]'";
else
$my_request = $my_request.", ''";
$i++;
}
$my_request = $my_request.")";
if (mysqli_query($connect_id, $my_request) == FALSE)
{
echo "<p>$my_request</p>";
exit();
}
}
你很容易受到[SQL注入攻击(http://bobby-tables.com)。 'addslashes()'是完全没用的垃圾,对保护你自己没有用处。它是用丝网制成的避孕套 – 2014-10-09 14:35:18
是每次都以相同顺序回来的文件吗?如果不是,那么应该解释为什么这两个不同的停止....也许只是增加内存可用,并继续:) ini_set('memory_limit','256M'); – myte 2014-10-09 14:37:03
-MarcB好的但所有的CSV文件都是安全的。 -myte对于测试,我只是使用了一个csv,并且在每次测试后我都截断了表格。其他任何关于如何在不同时刻停止的想法? 'memory_limit'被设置为'-1'。 更重要的是,为什么它停下来的任何想法? – 2014-10-09 14:43:15