通过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?