2

PHP を使用して、'< client>...<\client>' のようなデータの文字列を XML サーバー (URL の例:'http://example.appspot.com/examples') に配置する必要があります。(コンテキスト: 新しいクライアントの詳細をサーバーに追加する)。

ファイルと文字列だけで CURLOPT_PUT を使用しようとしましたが (CURLOPT_INFILESIZE と CURLOPT_INFILE が必要なため)、機能しません!

そのようなことを行うために使用できる他の PHP 関数はありますか? 私は周りを見回してきましたが、PUT リクエストの情報はまばらです。

ありがとう。

4

3 に答える 3

3
// Start curl  
    $ch = curl_init();  
// URL for curl  
    $url = "http://example.appspot.com/examples";  

// Put string into a temporary file  
    $putString = '<client>the RAW data string I want to send</client>';

/** use a max of 256KB of RAM before going to disk */  
    $putData = fopen('php://temp/maxmemory:256000', 'w');  
    if (!$putData) {  
        die('could not open temp memory data');  
    }  
fwrite($putData, $putString);  
fseek($putData, 0);  

// Headers  
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  
// Binary transfer i.e. --data-BINARY  
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_URL, $url);  
// Using a PUT method i.e. -XPUT  
curl_setopt($ch, CURLOPT_PUT, true);  
// Instead of POST fields use these settings  
curl_setopt($ch, CURLOPT_INFILE, $putData);  
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($putString));  

$output = curl_exec($ch);  
echo $output;  

// Close the file  
fclose($putData);  
// Stop curl  
curl_close($ch);  
于 2012-06-05T09:47:45.027 に答える
0

これまでcURLを使用したことがないので、そのトピックに実際に答えることはできません。cURLを使用したい場合は、サーバーログを調べて、実際に機能しなかったものを確認することをお勧めします(つまり、リクエストの出力は実際に想定どおりでしたか?)

別のテクノロジー/ライブラリに切り替えてもかまわない場合は、Zend HTTPクライアントを使用することをお勧めします。これは、非常に簡単に使用でき、簡単に含めることができ、すべてのニーズを満たす必要があります。特に、PUTリクエストの実行は次のように簡単です。

<?php 
   // of course, perform require('Zend/...') and 
   // $client = new Zend_HTTP_Client() stuff before
   // ...
   [...]
   $xml = '<yourxmlstuffhere>.....</...>';
   $client->setRawData($xml)->setEncType('text/xml')->request('PUT');
?>

コードサンプルは次のとおりです。ZendFrameworkDocs#RAW-データリクエスト

于 2011-04-28T14:48:57.720 に答える