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

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

问题描述:

本来$filepath是这样如何在PHP中将文本文件加载到数据库?

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

工程。它位于服务器上。

但是如果我想把somefile.txt放在同一台服务器之外呢?如果我把它放在保管箱中,并重新使用下面的代码,它什么也不做。

$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。这段代码有什么问题?

+0

使用PHP来下载文件到您的服务器,并使用本地路径。 – Nanne 2012-04-03 13:00:24

+0

@Nanne有权限问题。我的原始脚本应该通过浏览/选择由用户上传脚本。由于我不是root用户,因此我无法更改文件权限...所以我试图避免直接在服务器 – CppLearner 2012-04-03 13:02:11

+0

上工作,如果您的脚本上传文件,脚本可以更改权限。无论如何,sql不能 - 据我所知 - 读低谷http。所以你需要一个本地路径。 php _can_读低谷http,但如果exam​​ple.com是你的域名,不应该是必要的。只是上传后chmod它? – Nanne 2012-04-03 13:05:56

您可以在本地文件首次进口数据与

//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中你不应该有权限问题。

+0

这将创建在哪里?谢谢。 – CppLearner 2012-04-03 13:01:56

+0

我会用更详细的代码 – kappa 2012-04-03 13:03:05

+0

编辑答案,现在更清楚了吗? – kappa 2012-04-03 13:10:15

LOAD DATA INFILEreads来自客户端或服务器的文件,而不是来自Internet的文件。

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

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

$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); 

试试这个:

$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); 

希望它可以帮助..