gpt4 book ai didi

php - $_FILES 为空,curl 文件上传

转载 作者:行者123 更新时间:2023-12-04 00:43:30 25 4
gpt4 key购买 nike

在这个问题上,我一直在用头撞墙。我觉得我的问题真的很愚蠢,但我就是想不通是什么。

我有一个代理脚本,它处理一切(POST 数据和上传)。

当我在后端服务器上打印_r($_FILES) 时,它是一个空数组,$_POST 包含文件路径。

$ch = curl_init();
$options = array(
CURLOPT_HEADER => 1,
CURLOPT_HTTPHEADER => array(
"Host: {$host}",
"Cache-Control: no-cache"
),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_URL => "http://{$this->config->ipAddress}{$url}",
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_COOKIE => $cookie_string,
CURLOPT_USERAGENT => $_SERVER["HTTP_USER_AGENT"]
);

if (! empty($_POST)) {
if (! empty($_FILES)) {
//$options[CURLOPT_HTTPHEADER][] = "Content-type: multipart/form-data";

$files = "";
foreach ($_FILES as $fid => $file) {
$files .= "{$fid}=@" . $file["tmp_name"] . ";type={$file["type"]};name={$file["name"]}&";
}
}

$postString = (! empty($files) ? $files : '') . http_build_query($_POST);
$options[CURLOPT_POST] = 1;
$options[CURLOPT_POSTFIELDS] = $postString;
}

curl_setopt_array($ch, $options);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

我使用 http_build_query 而不是仅仅提供数组的原因是因为我们会遇到多维数组。

谢谢!

最佳答案

我敢打赌你的表单 enctype 不是“multipart/form-data” b/c 你没有将帖子字符串作为数组传递。

“如果 value 是一个数组,Content-Type 头将被设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是一个数组。”

您可以通过设置 curl 选项“curl_setopt($ch, CURLOPT_VERBOSE, TRUE);”然后设置“print_r(curl_getinfo($ch));”来了解 curl 发生了什么。在“curl_exec($ch);”之后它将输出有关请求和响应的所有信息。

关于php - $_FILES 为空,curl 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15733074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com