Windows系统下如何用PHP的cURL单请求发送文件夹所有文件及文本字段?
需求可行性及实现代码
当然可行!PHP的cURL扩展完全支持在单个POST请求中同时发送指定文件夹内的所有文件,以及用户名、密码这类普通文本字段,Windows系统下也能正常运行。
实现思路
- 遍历目标文件夹,筛选出所有文件(排除子文件夹和系统默认的
./..目录) - 使用
CURLFile类(PHP 5.5+推荐使用,替代旧版已弃用的@语法)封装每个文件,准备上传参数 - 将文本字段(用户名、密码)和文件对象一起放入POST请求的参数数组
- 配置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
相关产品推荐
相关产品推荐

