2

cURL と PUT メソッドを使用してファイルをアップロードしようとしています。すでに fsockopen を使用して機能する機能がありますが、それを cURL に移行したいと考えています。

fsockopen を使用する関数は、ファイルの内容、ファイル名、および auth の資格情報を受け取り、要求を行います。

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 でどのように実現できますか?

よろしくお願いします。

4

1 に答える 1

3

PHPの一時ファイルストリームであるphp://tempラッパーを使用できます。

まず、データをストリームに書き込みます( cURLがすべてのデータを読み取るようにrewind()を使用することを忘れないでください)。

$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);
于 2012-09-14T09:23:29.063 に答える