如何在PHP中将文本文件加载到数据库?

时间:2012-04-03 12:58:44

标签: php mysql import

原来$filepath就像这样

$filepath=$_SERVER['DOCUMENT_ROOT']."/".SCRIPTFOLDER."somefile.txt";
$sqlquerynew = "LOAD DATA INFILE '".$filepath."' INTO TABLE mytable FIELDS TERMINATED BY ','";
mysql_query($sqlquery);

有效。它位于服务器上。

但是如果我想将somefile.txt放在同一台服务器外呢?如果我把它放在dropbox中,并重复使用如下代码,它就不会做任何事情。

$sqlquerycreate = / ** Here insert DB scheme code **/
$filepath="http://example.com/somefile.txt";
$sqlquerynew = "LOAD DATA INFILE '".$filepath."' INTO TABLE mytable FIELDS TERMINATED BY ','";
mysql_query($sqlquery);

我该怎么做?文本文件包含表的数据。

感谢。


$data_file = file_get_contents('http://dl.dropbox.com/u/14655573/john/nyccrash.txt');
file_put_contents('C:\xampp\htdocs\import\nyccrash.txt', $data_file);
$filepath = "C:\xampp\htdocs\import\nyccrash.txt";
echo $filepath;
$sqlquery = "LOAD DATA INFILE '".$filepath."' INTO TABLE nyccrash FIELDS TERMINATED BY ',' (crash_year, accident_type, collision_type,weather_condition,light_condition,x_coordinate,y_coordinate)";

好。我现在看到这个文件。但它并没有导入数据库。这是XAMPP。但我最终将转向Ubuntu。这段代码的问题是什么?

4 个答案:

答案 0 :(得分:1)

试试这个:

$file = file_get_contents("http://example.com/somefile.txt");

$filepath=$_SERVER['DOCUMENT_ROOT']."/".SCRIPTFOLDER."somefile.txt";
file_put_contents($filepath, $file);

$sqlquerycreate = / ** Here insert DB scheme code **/
$sqlquerynew = "LOAD DATA INFILE '".$filepath."' INTO TABLE mytable FIELDS TERMINATED BY ','";
mysql_query($sqlquery);

希望有所帮助......

答案 1 :(得分:0)

您可以先使用

导入本地文件中的数据
//read data from remote file
$data_file = file_get_contents($http_url); 

// put data in a local file
$temp_file = tempnam(sys_get_temp_dir(),'TMP');
file_put_contents($temp_file,$data_file);

//now use $temp_file into the SQL query
....

//Delete temp file
unlink($temp_file);

请注意,PHP具有获取系统TEMP路径和生成临时文件名的功能。

在/ tmp中,您不应该有权限问题。

答案 2 :(得分:0)

LOAD DATA INFILE reads来自客户端或服务器的文件,而不是来自互联网。

您可以使用copy()首先将文件下载到临时目录,然后将LOAD DATA INFILE指向该目录。

答案 3 :(得分:0)

首先在服务器上创建一个临时文件:

$tmpFile = tempnam('my-tmp-dir', 'TMP');
$ok = copy('http://example.com/somefile.txt', $tmpFile); 

if ( !$ok ) exit('ERROR!');

// Then use $filepath in your SQL query    
$sqlquerynew = "LOAD DATA INFILE '".$filepath."' INTO TABLE mytable FIELDS TERMINATED BY ','";
mysql_query($sqlquery);    

unlink($tmpFile);