【发布时间】:2010-11-18 03:19:07
【问题描述】:
我有一个 php 脚本,它遍历包含制表符分隔文件的文件夹,逐行解析它们并将数据插入 mysql 数据库。由于服务器上的安全限制,我无法使用 LOAD TABLE,而且我无权访问配置文件。该脚本可以很好地解析 1 或 2 个较小的文件,但是在处理多个大文件时出现 500 错误。似乎没有任何错误日志包含与错误有关的消息,至少我的托管服务提供商没有让我访问。下面是代码,我也愿意接受有关我需要做的替代方法的建议。最终我希望这个脚本每 30 分钟左右触发一次,插入新数据并在完成后删除文件。
编辑:在进行 Phil 建议的更改后,脚本仍然失败,但我现在在错误日志中显示以下消息“mod_fcgid:120 秒内读取数据超时”,看起来脚本正在超时,不知道我在哪里可以更改超时设置吗?
$folder = opendir($dir);
while (($file = readdir($folder)) !== false) {
$filepath = $dir . "/" . $file;
//If it is a file and ends in txt, parse it and insert the records into the db
if (is_file($filepath) && substr($filepath, strlen($filepath) - 3) == "txt") {
uploadDataToDB($filepath, $connection);
}
}
function uploadDataToDB($filepath, $connection) {
ini_set('display_errors', 'On');
error_reporting(E_ALL);
ini_set('max_execution_time', 300);
$insertString = "INSERT INTO dirty_products values(";
$count = 1;
$file = @fopen($filepath, "r");
while (($line = fgets($file)) !== false) {
$values = "";
$valueArray = explode("\t", $line);
foreach ($valueArray as $value) {
//Escape single quotes
$value = str_replace("'", "\'", $value);
if ($values != "")
$values = $values . ",'" . $value . "'";
else
$values = "'" . $value . "'";
}
mysql_query($insertString . $values . ")", $connection);
$count++;
}
fclose($file);
echo "Count: " . $count . "</p>";
}
【问题讨论】: