我需要使用curl命令行实用程序将多个文件上传到服务器。对于单个文件我使用时没有问题:
curl -F "image=@file1.gif" http://localhost:8888/web/Upload.php
如何使用多个文件执行此操作,以便php变量$ _FILES [“image”] [“error”]将返回一个数组?
我试过
curl -F "image=@file1.gif" -F "image=@file2.gif" http://localhost:8888/web/Upload.php
curl -F "image=@file1.gif,image=@file2.gif" http://localhost:8888/web/Upload.php
但这些都是在黑暗中刺伤。
答案 0 :(得分:38)
诀窍是将文件上传参数命名为唯一。
curl -F "image=@file1.gif" -F "image2=@file2.gif" http://localhost:8888/web/Upload.php
这将显示在$_FILES
超级全球中$_FILES['image']
和$_FILES['image2']
。
要将文件分组在一个$_FILES
索引下,您需要将参数命名为数组:
curl -F "image[]=@file1.gif" -F "image[]=@file2.gif" http://localhost:8888/web/Upload.php
答案 1 :(得分:0)
您可以使用curl_multi_init()
。我当时正在从事一个项目,由于我是新手,甚至不到一年,所以这对我来说很难。我需要使用api(anonfiles.com)上传到服务器
注意:我的脚本基于用户输入的多个文件。代码如下。
<?php
if (isset($_POST['btnUpload'])){
$total = count($_FILES['file']['name']);
for( $i=0 ; $i < $total ; $i++ ) {
$filename = $_FILES['file']['name'][$i];
$filedata = $_FILES['file']['tmp_name'][$i];
$filetype = $_FILES['file']['type'][$i];
$chfile = new CURLFile($filedata, $filetype, $filename); //creating a CURL object
$request[]=['file'=>$chfile]; //making an asscoiative array with [1]=>['file'=>'curlobject'] and so on
$urls[] = "https://api.anonfiles.com/upload?token=ced2abXXXXXXX";//added this each time because this was the only one url
}
print_r($request);//just for verification
echo "<br>";
print_r($urls);//verification
echo "<br>";
echo "<br>";
$mh = curl_multi_init(); //initialise multi curl
foreach ($urls as $key => $url) {
$chs[$key] = curl_init($url);
//set your own opts, these are the minimum required
curl_setopt($chs[$key], CURLOPT_RETURNTRANSFER, true);
curl_setopt($chs[$key], CURLOPT_POST, true);
curl_setopt($chs[$key], CURLOPT_POSTFIELDS, $request[$key]);//adding file data
curl_setopt($chs[$key], CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));//make sure this header is there for it to act like data
curl_multi_add_handle($mh, $chs[$key]);//add them to the handle that we initialised
}
//running the requests
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);
//getting the responses
$responsearray = array();//Just to store the responses
foreach(array_keys($chs) as $key){
$error = curl_error($chs[$key]);
$last_effective_URL = curl_getinfo($chs[$key], CURLINFO_EFFECTIVE_URL);
$time = curl_getinfo($chs[$key], CURLINFO_TOTAL_TIME);//response time
$response = curl_multi_getcontent($chs[$key]); // get results
array_push($responsearray, $response);
curl_multi_remove_handle($mh, $chs[$key]);//removing it as a handle
}
// close current handler
curl_multi_close($mh);
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
print_r($responsearray);
}