【发布时间】:2013-06-12 13:29:24
【问题描述】:
我有一个 PHP 脚本文件,它将一系列 CSV 文件加载到 MYSQL 数据库中。
当我从命令行运行脚本时一切顺利,但当我从浏览器运行它时,它在中间退出(大约 65000 条记录后)和 4 个文件。
<?
if (isset($argv))
{
$_GET['load_date'] = $argv[1];
}
LoadFile('file1.csv');
LoadFile('file2.csv');
LoadFile('file3.csv');
LoadFile('file4.csv');
LoadFile('file5.csv');
LoadFile('file6.csv');
LoadFile('file7.csv');
function LoadFile($File_Name)
{
//global $serverinfo, $username, $password, $database, $dir_path, $dir_env;
include("datacon.inc.php");
mysql_connect($serverinfo, $username, $password);
@mysql_select_db($database) or die("Unable to select database");
//check if the file is existed
if (file_exists($File_Name) == FALSE) {
ECHO "<FONT COLOR=\"red\"> <b> " . $File_Name . " wasn't found </b> </FONT> <br>";
return;
} else {
ECHO $File_Name . " was found, start loading...<br>";
}
//Import uploaded file to Database
$file_handle = fopen($File_Name, "r");
while (($line_of_data = fgetcsv($file_handle, 0, ",", "\"", "\r\n")) !== FALSE) {
$line_import_query = "INSERT STATEMENT...";
//echo $line_import_query . "<BR><br>";
mysql_query($line_import_query) or die(mysql_error());
}
$Count_records_query =
"SELECT COUNT(*) AS COUNTS FROM `" . $database . "`.`TBL_TABLE`";
$Count_records_query_result = mysql_query($Count_records_query);
$Count_records = mysql_result($Count_records_query_result, 0, "COUNTS");
if ($Count_records <= 0) {
mysql_close();
echo "No records were loaded on " . $File_Name . ", somthing is wrong, check the file location/structure <br>";
} else {
echo "<FONT COLOR=\"red\"> <b> " . $File_Name . " were inserted </b> </FONT> <br>";
# Disconnect from the database.
}
fclose($File_Name, "r");
// close the connection
mysql_close();
return;
}
echo "Disconnected from database successfully! <br><br>
<input type=\"Button\" value=\"Ok, Finished! Back\" onclick=\"history.back()\">";
?>
怎么了?我该如何调试?
【问题讨论】:
-
mysql_* 函数已弃用...请使用 pdo 或 mysqli
-
使用phpinfo()查看:max_execution_time的值请看:stackoverflow.com/questions/6932179/…
-
ini_set('display_errors',1);调试或 set_time_limit(0);ini_set('memory_limit','100M');可能解决终止问题
-
如果您正在从 CSV 大量导入到 mySQL,您应该考虑使用 mySQL 的
LOAD DATA INFILE功能;它会大量比通过 PHP 循环更快(快几个数量级)。你仍然可以使用 PHP 来运行它;但无需加载文件并循环 65000 次插入,您只需进行一次 SQL 查询并为其指定文件名。