我正在尝试编写一个 PHP 脚本以从包含单个 CSV 文件的 Web 服务器下载一个 zip 文件,然后将提取的 CSV 文件的内容加载到现有的 MySQL 数据库表中。
$targetFile = 'data-' . md5(microtime()) . '.zip';
$url = 'http://www.address.com/data.zip';
$out = fopen('/path/to/zip/save/folder/' . $targetFile , 'wb');
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $out);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
$info = curl_getinfo($ch);
if($info['http_code'] == 200 && $info['content_type'] == 'application/x-zip-compressed') {
$zh = zip_open('/path/to/zip/save/folder/' . $targetFile);
}
else {
exit('Download of ZIP file failed.');
}
上面的代码确实设法将文件下载到服务器上具有唯一名称的目录中。但是我无法提取内容。
我试过使用 PHP 的 zip_open
命令来解压缩 zip,但它总是返回错误代码 19
而不是句柄。我检查了传递给 zip_open 函数的路径,它是一个完整的系统路径,即 /path/to/zip/save/folder/data-5384e2306718492958f20e68de95c6fa.zip
。
注意:
CSV 文件压缩后为 2.5 MB,未压缩时为 30 MB。
最佳答案
请记住在将内容保存为文件之前去除响应 header 。此外,您还可以检查是否有 HTTP/1.1 200 OK 响应,或 301/302 重定向跟随
关于php - 如何下载并提取压缩的 CSV 文件并将 CSV 文件的内容放入 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134337/