첫째, 관련 답변을 검색했지만 몇 가지가 있습니다. 그러나 찾고자하는 것에 특정적인 것을 찾을 수 없습니다. 나는 더 좋은 방법이 있다고 확신한다!PHP CSV - MYSQL Timing out
기본적으로 저는 조언을 구하고 있습니다. 서버에있는 CSV 파일을 MYSQL 데이터베이스로 변환하는 스크립트가 있습니다. 그러나 CSV 파일은 20MB이고 스크립트는 시간 초과되었습니다. 나는 php.ini 파일을 수정하여 시간 초과하지 말고 대신 500 내부 서버 오류를 발생시킵니다. 페이지를 라이브로 유지할 수있는 방법이 있나요? (jquery는 이와 같은 일을합니다.) 그렇지 않다면, 과거의 큰 SQL 파일에 대해 셸 실행을 사용했음을 알고 있습니다. 이? 조언 정말 감사하겠습니다. 오히려 CSV 수동 프로세스를보다
<?php
$databasehost = "localhost";
$databasename = "test";
$databasetable = "sample";
$databaseusername ="test";
$databasepassword = "";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "filename.csv";
/********************************/
/* Would you like to add an ampty field at the beginning of these records?
/* This is useful if you have a table with the first field being an auto_increment integer
/* and the csv file does not have such as empty field before the records.
/* Set 1 for yes and 0 for no. ATTENTION: don't set to 1 if you are not sure.
/* This can dump data in the wrong fields if this extra field does not exist in the table
/********************************/
$addauto = 0;
/********************************/
/* Would you like to save the mysql queries in a file? If yes set $save to 1.
/* Permission on the file should be set to 777. Either upload a sample file through ftp and
/* change the permissions, or execute at the prompt: touch output.sql && chmod 777 output.sql
/********************************/
$save = 1;
$outputfile = "output.sql";
/********************************/
if(!file_exists($csvfile)) {
echo "File not found. Make sure you specified the correct path.\n";
exit;
}
$file = fopen($csvfile,"r");
if(!$file) {
echo "Error opening data file.\n";
exit;
}
$size = filesize($csvfile);
if(!$size) {
echo "File is empty.\n";
exit;
}
$csvcontent = fread($file,$size);
fclose($file);
$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());
$lines = 0;
$queries = "";
$linearray = array();
foreach(split($lineseparator,$csvcontent) as $line) {
$lines++;
$line = trim($line," \t");
$line = str_replace("\r","",$line);
/************************************
This line escapes the special character. remove it if entries are already escaped in the csv file
************************************/
$line = str_replace("'","\'",$line);
/*************************************/
$linearray = explode($fieldseparator,$line);
$linemysql = implode("','",$linearray);
if($addauto)
$query = "insert into $databasetable values('','$linemysql');";
else
$query = "insert into $databasetable values('$linemysql');";
$queries .= $query . "\n";
@mysql_query($query);
}
@mysql_close($con);
if($save) {
if(!is_writable($outputfile)) {
echo "File is not writable, check permissions.\n";
}
else {
$file2 = fopen($outputfile,"w");
if(!$file2) {
echo "Error writing to the output file.\n";
}
else {
fwrite($file2,$queries);
fclose($file2);
}
}
}
echo "Found a total of $lines records in this csv file.\n";
?>
() fgetcsv 같은 기능을 사용하는 방법에 대해 알아 구문 분석하지 마십시오 –