通过PHP Curl上传CSV文件

5

我相信这个问题已经被问过很多次了,但我无法弄清楚为什么我的php脚本不起作用。我有一个CSV文件,当我使用以下命令行curl上传它时,我知道它可以完美地工作:

curl -H 'Content-Type: text/csv' --data-binary @/Users/johndoe/Downloads/payables.csv -H "Authorization: Bearer [some_token_key]" 'https://example.com/api/v1/imports.json'

以下是我尝试将此命令转换为PHP Curl时的PHP脚本:

$file = "/Users/johndoe/Downloads/payables.csv";
$authorization = "Authorization: Bearer [some_token_key]";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://example.org/api/v1/imports.json");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, [$authorization, 'Content-Type: text/csv']);
$cfile = new CurlFile($file,  'text/csv');
$data = array('data-binary' => realpath($cfile));
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($curl);
curl_close($curl);

有人能看出我的PHP脚本有什么问题吗?我正在使用PHP 5.5版本,接收站点尝试处理CSV文件时显示的错误是找不到CSV导入标头。这没有任何意义。有任何想法吗?


我认为你的php脚本无法从/Users/johndoe/Downloads/payables.csv读取文件,将其放在根目录即php脚本所在的位置,并尝试。 - sumit
@sumit那个方法不起作用。我把文件放在应用程序的根目录下,但仍然没有反应。出现了同样的错误。 - user1370897
1个回答

3

不要试图访问您的下载文件夹,而是将文件上传到您的项目目录中,然后将其传递给curl。

move_uploaded_file($_FILES['file']['tmp_name'], __DIR__.'/uploads/'. $_FILES["image"]['name']);

$file = "uploads/payables.csv";
$authorization = "Authorization: Bearer [some_token_key]";

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://example.org/api/v1/imports.json");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, [$authorization, 'Content-Type: text/csv']);
$cfile = new CurlFile($file,  'text/csv');
//curl file itself return the realpath with prefix of @
$data = array('data-binary' => $cfile);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$curl_response = curl_exec($curl);
curl_close($curl);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接