温馨提示×

php curlfile能上传多个文件吗

PHP
小樊
89
2024-11-20 07:53:14
栏目: 编程语言

PHP cURL 不支持一次上传多个文件,但您可以通过循环遍历数组中的所有文件并使用 curl_multi_* 函数来实现这个功能。以下是一个示例:

<?php
// 要上传的文件列表
$file_list = ['file1.jpg', 'file2.jpg', 'file3.jpg'];

// 初始化 cURL Multi 资源
$mh = curl_multi_init();

// 初始化 cURL 句柄资源数组
$curl_handles = [];

// 循环遍历文件列表并为每个文件创建一个 cURL 句柄
foreach ($file_list as $i => $file) {
    // 创建一个新的 cURL 句柄
    $curl_handle = curl_init();

    // 设置 cURL 选项
    curl_setopt($curl_handle, CURLOPT_URL, 'https://example.com/upload');
    curl_setopt($curl_handle, CURLOPT_POST, 1);
    curl_setopt($curl_handle, CURLOPT_POSTFIELDS, ['file' => new CURLFile($file, 'image/jpeg', $file)]);
    curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);

    // 将 cURL 句柄添加到 cURL Multi 资源中
    curl_multi_add_handle($mh, $curl_handle);

    // 将 cURL 句柄资源存储到数组中
    $curl_handles[$i] = $curl_handle;
}

// 执行处理的请求
$active = null;
do {
    curl_multi_exec($mh, $active);
} while ($active && curl_multi_select($mh) != -1);

// 获取处理结果并关闭 cURL 句柄和 cURL Multi 资源
$results = [];
foreach ($curl_handles as $i => $curl_handle) {
    $results[$i] = curl_multi_getcontent($curl_handle);
    curl_multi_remove_handle($mh, $curl_handle);
    curl_close($curl_handle);
}

curl_multi_close($mh);

// 输出上传结果
print_r($results);
?>

这个示例中,我们首先创建了一个包含要上传的文件名的数组。然后,我们遍历这个数组并为每个文件创建一个 cURL 句柄。在循环内部,我们使用 CURLFile 类创建一个新的 cURL 文件对象,并将其添加到 POST 字节流中。最后,我们使用 curl_multi_* 函数执行请求并获取处理结果。

0