PHP。将下载的csv传输到mysql数据库 - 如何将下载的csv文件存储在php内存中

时间:2014-11-02 11:51:03

标签: php mysql csv

我想将从网站下载的数据存储到我的mysql数据库中。

我使用我的功能" CallAPI(" GET",$ url,$ data = false)"使用" http://www.xflow1.com/xGlobalHist.csv/" ...

等网址访问数据库

所以我的调用$ results = CallAPI($ method,$ url,$ data = false);返回一个逗号分隔的数组,该数组保存在变量" $ results"中。我可以在网页上回显$ results,它会显示数据,所有逗号分隔。一切都好 - 直到这里。

要将csv上传到我的mysql数据库,我想使用" LOAD DATA INFILE"功能如此:

$upload = <<<eof
LOAD DATA INFILE $results
INTO TABLE X_Adjusted_All
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(Cusip, Date, Price)
 eof;  

障碍出现在&#34; LOAD DATA INFILE $ results&#34;因为LOAD DATA INFILE只需要文件名,所以我想将$ results作为csv文件存储在内存中,以避免一直创建和删除文件。我认为这可行:

$fp = fopen('php://memory', 'w');
fputcsv($fp, $results);

唉不。有没有人知道如何获取下载的csv文件并将其作为csv文件保存到phps内存,以便在LOAD DATA INFILE函数中使用?

1 个答案:

答案 0 :(得分:0)

MySQL无法直接从PHP的内存中读取。您需要使用tempnam()创建外部文件。然后MySQL可以读取该文件。您还可以创建一个临时文件,并找出this question中提到的文件名。

tempnam()的示例显示了如何写入该文件:

<?php
$tmpfname = tempnam("/tmp", "FOO");

$handle = fopen($tmpfname, "w");
fwrite($handle, $results);
fclose($handle);

// do something

unlink($tmpfname);

这会将$results的内容存储到名为$tmpfname的文件中,您可以使用LOAD DATA INFILE $tmpfname将其存储在mysql中。

如评论中所述,如果性能有问题,您可以创建一个ram驱动器来存储该文件。