繁体   English   中英

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

[英]PHP. Transferring downloaded csv to mysql database - how can I store downloaded csv file in php memory

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

我使用函数“ CallAPI(“ GET”,$ url,$ data = false)“通过诸如” http://www.xflow1.com/xGlobalHist.csv/ “之类的URL访问数据库。

所以我的电话$ 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;  

出现此问题是因为“ LOAD DATA INFILE $ results”不起作用,因为LOAD DATA INFILE只需要一个文件名,因此我想将$ results作为csv文件存储在内存中,以避免一直创建和删除文件。 我认为这可能有效:

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

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

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

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驱动器来存储该文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM