使用PHP通过curl上传多个文件

3

我正在尝试使用cURL通过PHP传输两个文件。我知道通过命令行的方法是:

curl -T "{file1,file2,..filex}" ftp://ftp.example.com/ -u username:password

在php中,您可以通过以下代码上传1个文件:

$ch = curl_init();
$localfile = "somefile";
$username = "Someusername@someserver.com";
$password = "somerandomhash";
$fp = fopen($localfile, 'r');
curl_setopt($ch, CURLOPT_URL, "ftp://ftp.domain.com/");
curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);
curl_close ($ch);

但是如何使用上述方法处理多个文件?

1个回答

1

如果您可以使用相同的凭据并行连接到FTP,则可以尝试通过curl_multi_*以最小更改的方式执行此操作,代码如下:

$chs = array();
$cmh = curl_multi_init();
for ($i = 0; $i < $filesCount; $i++)
{
    $chs[$i] = curl_init();
    // set curl properties
    curl_multi_add_handle($cmh, $chs[$i]);
}

$running=null;
do {
    curl_multi_exec($cmh, $running);
} while ($running > 0);

for ($i = 0; $i < $filesCount; $i++)
{
    $content = curl_multi_getcontent($chs[$t]);
    // parse reply
    curl_multi_remove_handle($cmh, $chs[$t]);
    curl_close($chs[$t]);
}
curl_multi_close($cmh);

那会很好,但不幸的是我需要使用相同的连接按顺序上传这两个文件。所以先上传File1,然后上传File2,但是文件3和文件4可以使用不同的连接上传,这实际上是我想要实现的。因此,总结一下,先上传文件1,然后上传文件2,同时并行上传文件3和文件4,以此类推。 - Mark D
你仍然可以使用我提供的代码,只需在不包括以下行的情况下运行两次:curl_multi_remove_handle($cmh, $chs[$t]);curl_close($chs[$t]);curl_multi_close($cmh); - Ranty
这不是更针对下载文件而不是上传文件吗?我需要能够上传多个文件。 - Mark D
这只是一个工具,你如何使用它取决于你。在上传时,您可能需要减少线程数量,但这仅仅是因为需要更多的资源。 - Ranty
嗨@Ranty,我正在尝试上面的代码,但对于多个文件不起作用,它只上传单个文件到远程服务器。 - faizanbeg

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