gpt4 book ai didi

php - 带有 PHP 和 cURL 的 PUT 文件(内容)

转载 作者:行者123 更新时间:2023-12-04 05:32:18 26 4
gpt4 key购买 nike

我正在尝试使用 cURL 和 PUT 方法上传文件,我已经有一个使用 fsockopen 工作的函数,但我想将它迁移到 cURL。

使用 fsockopen 的函数接收文件内容、文件名和身份验证凭据并发出请求:

function put_file($content, $filename, $username, $pass)
{
$header = "PUT /upload?username=".urlencode(user_name)."&passwd=".urlencode($pass)."&filename=".urlencode($file_name)." HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($content) . "\r\n\r\n";
$fp = @fsockopen("ssl://URL", 443, $errno, $errstr, 30);
if(!$fp)
{
return "ERROR";
}
else
{
fputs ($fp, $header.$content);
while (!feof($fp))
{
$res .= fread ($fp, 1024);
}
fclose($fp);
}
}

我一直在尝试将该函数迁移到 cURL,但我不知道如何在不需要在我的文件系统上拥有“真实”文件的情况下执行此操作。我知道的唯一 cURL 选项是 CURLOPT_INFILE 和 CURLOPT_INFILESIZE,但我没有该文件(并且不想将其写入磁盘并在打开它之后)。

我需要的是发送文件的“内容”,就像 fsockopen 版本一样。如何使用 cURL 实现这一点?

先谢谢了。

最佳答案

您可以使用 php://temp包装器,它是 PHP 中的临时文件流。

首先将数据写入流(不要忘记使用 rewind() 这样 cURL 将读取所有数据):

$fp = fopen("php://temp", "r+");
fputs($fp, $content);
rewind($fp);

然后在设置 cURL 时只需使用:
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($content)); #adding missing bracket

最后关闭临时文件处理程序(可选):
fclose($fp);

关于php - 带有 PHP 和 cURL 的 PUT 文件(内容),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12421247/

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