You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下如何用PHP的cURL单请求发送文件夹所有文件及文本字段?

需求可行性及实现代码

当然可行!PHP的cURL扩展完全支持在单个POST请求中同时发送指定文件夹内的所有文件,以及用户名、密码这类普通文本字段,Windows系统下也能正常运行。

实现思路

  1. 遍历目标文件夹,筛选出所有文件(排除子文件夹和系统默认的./..目录)
  2. 使用CURLFile类(PHP 5.5+推荐使用,替代旧版已弃用的@语法)封装每个文件,准备上传参数
  3. 将文本字段(用户名、密码)和文件对象一起放入POST请求的参数数组
  4. 配置cURL核心选项,发起POST请求并处理响应

完整示例代码

<?php
// 你的基础配置
$api = "http://localhost/curl/file.php"; // 目标API地址
$username = "project"; // 用户名
$password = "123456"; // 密码
$targetFolder = "D:/your-upload-folder"; // Windows下的文件夹路径,用正斜杠或转义反斜杠

// 初始化POST数据数组,先放文本字段
$postData = [
    'username' => $username,
    'password' => $password
];

// 遍历目标文件夹,添加所有文件到POST数据
if (is_dir($targetFolder)) {
    $files = scandir($targetFolder);
    foreach ($files as $file) {
        // 跳过非文件条目
        if ($file === '.' || $file === '..' || !is_file($targetFolder . '/' . $file)) {
            continue;
        }
        
        // 构建完整文件路径并封装为CURLFile对象
        $filePath = realpath($targetFolder . '/' . $file);
        $curlFile = new CURLFile($filePath);
        // 用数组形式的键名,后端可通过$_FILES['files']批量接收
        $postData['files[]'] = $curlFile;
    }
}

// 初始化cURL会话
$ch = curl_init();

// 配置cURL核心选项
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 若目标API是HTTPS且测试环境需忽略证书验证,可打开以下两行
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

// 执行请求并处理结果
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo "cURL请求出错: " . curl_error($ch);
} else {
    echo "API返回结果: " . $response;
}

// 关闭cURL会话
curl_close($ch);
?>

后端接收示例(file.php)

为了验证数据是否正确接收,后端可以参考以下代码处理:

<?php
// 接收文本字段
echo "用户名: " . $_POST['username'] . "<br>";
echo "密码: " . $_POST['password'] . "<br>";

// 处理上传的文件
echo "<h3>上传文件列表:</h3>";
foreach ($_FILES['files']['name'] as $index => $fileName) {
    echo "文件名: " . $fileName . "<br>";
    echo "临时存储路径: " . $_FILES['files']['tmp_name'][$index] . "<br>";
    echo "文件大小: " . $_FILES['files']['size'][$index] . "字节<br><br>";
    
    // 保存文件到服务器(需确保uploaded目录存在且有写入权限)
    $saveDir = "./uploaded/";
    if (!is_dir($saveDir)) mkdir($saveDir, 0755, true);
    $savePath = $saveDir . $fileName;
    if (move_uploaded_file($_FILES['files']['tmp_name'][$index], $savePath)) {
        echo "文件已保存至: " . $savePath . "<br><br>";
    } else {
        echo "文件保存失败<br><br>";
    }
}
?>

注意事项

  • Windows路径建议用正斜杠(/)或转义反斜杠(\\),避免解析错误
  • 确保PHP对目标文件夹有读取权限,后端保存目录有写入权限
  • 若PHP版本低于5.5,可使用旧版@语法(不推荐):$postData['files[]'] = "@" . $filePath;

内容的提问来源于stack exchange,提问作者Md. Himel Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:59:27