通过PHP中的HTTP PUT发送文件

我一直在努力尝试弄清楚如何完成这项工作。 我试图通过HTTP-PUT将文件发送到eXist数据库。 有服务器的用户身份验证,所以我试图做这样的事情:

我有网站的文档将PUTted我有用户名和密码的eXist DB我有需要通过PUT发送的内容

我尝试使用cURL工作,但它会失败默默我试图使用PHP流,但不断得到“错误201 /创建”,但实际上没有创建文件。

任何帮助将非常感谢。

以下是我使用PHP流尝试的一些示例代码

        $data = file_get_contents($tmpFile);                                                                                                    
         $header = array(
             "Authorization: Basic " . base64_encode($this->ci->config->item('ws_login') . ':' . $this->ci->config->item('ws_passwd')),
             "Content-Type: text/xml"
         );  
         $params = array(
             'http' => array(
                 'method' => 'PUT',
                 'header' => $header,
                 'content' => $data));
         $ctx = stream_context_create($params);

         $response = file_get_contents($url, false, $ctx);

啊哈! 在我的办公桌上摆放着一个矮胖的矮娃娃玩偶之后,我发现了一个解决办法:

        $data = file_get_contents($tmpFile);
         $params = array(
             'http' => array(
                 'method' => 'PUT',
                 'header' => "Authorization: Basic " . base64_encode($this->ci->config->item('ws_login') . ':' . $this->ci->config->item('ws_passwd')) . "rnContent-type: text/xmlrn",
                 'content' => file_get_contents($tmpFile)
             )
         );
         $ctx = stream_context_create($params);
         $response = @file_get_contents($url, false, $ctx);

         return ($response == '');

CURL适合我。 这里是我的代码片段,

                $handle = curl_init ($server_url);

                if ($handle)
                {
                    // specify custom header
                    $customHeader = array(
                        "Content-type: $file_type"
                    );
                    $curlOptArr = array(
                        CURLOPT_PUT => TRUE,
                        CURLOPT_HEADER => TRUE,
                        CURLOPT_HTTPHEADER => $customHeader,
                        CURLOPT_INFILESIZE => $file_size,
                        CURLOPT_INFILE => $file,
                        CURLOPT_HTTPAUTH => CURLAUTH_BASIC,
                        CURLOPT_USERPWD => $user . ':' . $password,
                        CURLOPT_RETURNTRANSFER => TRUE
                    );
                    curl_setopt_array($handle, $curlOptArr);
                    $ret = curl_exec($handle);
                    $errRet = curl_error($handle);
                    curl_close($handle);

编辑:只是更新我的代码。 我自己不使用身份验证,因此未经测试。


这适用于我...

function put($_server,$_file,$_data)
{
  $fp = @fsockopen ($_server, 80, $errno, $errstr, 30);
  if ($fp)
  {
    $p = "PUT $_file HTTP/1.0rn";
    $p.= "User-Agent: Mozilla/3.0 (Windows NT 5.0; U) Opera 7.21  [da]rn";
    $p.= "Host: $_serverrn";
    $p.= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1rn";
    $p.= "Accept-Language: da;q=1.0,en;q=0.9rn";
    $p.= "Accept-Charset: windows-1252, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1rn";
    $p.= "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0rn";
    $p.= "Referer: http://www.nasa.gov/secret/flightplans.asprn";
    $p.= "Content-type: application/x-www-form-urlencodedrn";
    $p.= "Content-length: ".strlen($_data)."rn";
    $p.= "rn";
    $p.= $_data;

    //echo($p);
    fputs ($fp, $p);
  }
  else die("dagnabbit : $errstr");

  while ($l=fgets($fp))
    echo($l);
  fclose($fp);
}

许多标题行可能没有必要......但是,当我与我的couchdb聊天时,它很有用,所以我没有开始剔除它们。

链接地址: http://www.djcxy.com/p/87291.html

上一篇: Sending a file via HTTP PUT in PHP

下一篇: How do you compile a managed dll with mono/mcs targeting a specific framework?