我正在尝试将6,000行500 KB文件解析为数组,以便将数据导入我们的系统。问题是脚本在3000-4000行之间的某处停止执行。代码中没有中断,我们在其他导入中使用它。关于为什么会发生这种情况的任何想法以及我可以做些什么来阻止它?
/**
* Takes a seperated value string and makes it an array
* @param $delimiter string The delimiter to be seperated by, usually a comma or tab
* @param $string string The string to seperate
* @return array The resulting array
*/
public function svToArray ($delimiter, $string) {
$x = 0;
$rowList = array();
$splitContent = preg_split("#\n+#", trim($string));
foreach ($splitContent as $key => $value) {
$newData = preg_split("#".$delimiter."#", $value);
if ($x == 0) {
$headerValues = array_values($newData);
} else {
$tempRow = array();
foreach ($newData as $rowColumnKey => $rowColumnValue) {
$tempRow[$headerValues[$rowColumnKey]] = $rowColumnValue;
}
$rowList[] = $tempRow;
}
$x++;
}
return $rowList;
}
更新 错误报告已启用。我已经开始使用一个只有130KB,1,500行的文件,它做同样的事情......
当我添加调试代码时,如下例所示,除非我在echo "test<br/>";
public function svToArray ($delimiter, $string) {
$x = 0;
$rowList = array();
$splitContent = preg_split("#\n+#", trim($string));
echo "test<br/>";
foreach ($splitContent as $key => $value) {
$newData = preg_split("#".$delimiter."#", $value);
if ($x == 0) {
$headerValues = array_values($newData);
} else {
$tempRow = array();
foreach ($newData as $rowColumnKey => $rowColumnValue) {
$tempRow[$headerValues[$rowColumnKey]] = $rowColumnValue;
}
$rowList[] = $tempRow;
}
$x++;
}
echo "test";
$this->tru->debug($rowList);
exit;
return $rowList;
}
更新
如果我发表评论$tempRow[] = $rowColumnValue;
,那么它就能很好地回应......
答案 0 :(得分:1)
可能只是超时。它会在X秒后停止吗?
尝试将最长执行时间设置为更高:页面顶部的set_time_limit(900)。
您可以检查phpinfo()中的最长执行时间: 1.创建一个新的php页面 2.搜索max_execution_time
答案 1 :(得分:0)
你看过这些文件了吗?是否有太多分隔符的行?另外,关于“#”的所有内容是什么?
我最好的猜测是,您正在点击未定义$headerValues[$rowColumnKey]
的行。
答案 2 :(得分:0)
$ rowColumnKey和$ rowColumnValue怎么样?
它们未在函数中定义。
答案 3 :(得分:0)
您确定要迭代返回的数组而不是简单地尝试打印它吗? (问题可能在函数之外,而不是在函数内。)
也...
`exit;
return $rowList;`
尝试删除'退出;'行,看看是否有任何改变。
此外,$ splitContent在使用之前未定义为数组,但preg_split将返回一个数组。 (这不应影响您的结果,但这样做是安全的。)
为什么使用$ key =&gt;当你无法确定字符串中的内容时,$ value对?如果我们能看到$ string内容的一个小例子,我们可以调整这个函数以更好地工作。
#应替换为/,但这可能仅仅是格式化问题。
$ newData应该被定义为一个数组,然后才被用来保证安全,即使这不会导致你的问题。
答案 4 :(得分:0)
确保您有错误报告集,将其置于您的php文件之上:
ini_set('display_errors', true);
error_reporting(E_ALL);
此外,您可以延长脚本的执行时间:
ini_set('max_execution_time', 50000);
答案 5 :(得分:0)
关于我唯一一次有一个php脚本死掉,没有输出而且没有错误就是内存不足的时候。它看起来不像你的脚本会占用太多内存,但我会检查以确保php的内存限制足够高。
答案 6 :(得分:0)
如果可以,请增加php.ini中的最大执行时间..同时增加每个实例的最大内存量。检查网络服务器的错误日志也可以提供帮助。
答案 7 :(得分:0)
似乎输出缓冲区的输出太多,导致页面根本没有显示任何内容。