我正在尝试在php中发布带有curl的文件,但该文件永远不会被服务器上传/接受。我已经搜索并尝试了几个小时,但我找不到什么错误,每个人的例子和代码似乎都有效,但不是这个。
以下是代码:
<?php
$url = "http://jpptst.ams.se/0.52/default.aspx";
$headers = array(
"Content-Type: text/xml; charset=iso-8859-1",
"Accept: text/xml"
);
$data = array("file" => "@documents/xmls/1298634571.xml");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
curl_close($ch);
var_dump($response);
?>
我得到的结果:
string(904) "HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Mon, 25 Jul 2011 19:13:41 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 659"
这就是我得到的......服务器永远不会接受该文件。 如果有人可以帮助我解决这个问题,将非常感谢:) 谢谢!
答案 0 :(得分:1)
您尝试通过HTTP帖子上传文件,因此发送Content-type: text/xml
标头是不合适的。 HTTP文件上传实际上是以multipart/form-data
完成的,实际上与MIME编码的电子邮件附件完全相同。 PHP的curl会自动填写标题详细信息。同样,也不需要Accept标头。
检查您尝试上传的.xml文件的路径是否正确。您没有为其指定前导/
,因此该路径与您的PHP脚本执行位置相关。
答案 1 :(得分:0)
替换:
$data = array("file" => "@documents/xmls/1298634571.xml");
有了这个:
$data = array("file" => "@".realpath('documents/xmls/1298634571.xml'));
尝试一下,可能有用,我不确定。
编辑:
试试这个:
<?php
$xmldatafile="documents/xmls/1298634571.xml"; // Make sure the file path is correct
function postData($postFields,$url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST ,1);
curl_setopt($ch, CURLOPT_POSTFIELDS ,$postFileds);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_HEADER ,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$xmlData = file_get_contents($xmldatafile);
$postFileds = 'data='.$xmlData;
$result = postData($postFields,"http://jpptst.ams.se/0.52/default.aspx");
?>