Проблема при публикации файла с curl в php - PullRequest
0 голосов
/ 25 июля 2011

Я пытаюсь опубликовать файл с curl в php, но файл никогда не загружается / не принимается сервером.Я искал и пытался в течение нескольких часов, но я не могу найти, что не так, все остальные примеры и коды, кажется, работают, но не этот.

Вот код:

<?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"

Это все, что я получаю .. файл никогда не принимается сервером.Если кто-то может помочь мне с этой проблемой, это будет очень ценно :) Спасибо!

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Вы пытаетесь загрузить файл через сообщение HTTP, поэтому отправка заголовка Content-type: text/xml неуместна. HTTP-загрузка файла фактически выполняется как multipart/form-data, и на самом деле она практически идентична вложенному в MIME сообщению электронной почты. PHP curl заполнит детали заголовка для вас автоматически. Кроме того, заголовок Accept также не требуется.

Убедитесь, что путь к XML-файлу, который вы пытаетесь загрузить, правильный. Вы не указали ведущий / к нему, поэтому путь относительно того, откуда ваш PHP-скрипт выполняется.

0 голосов
/ 25 июля 2011

Заменить:

$data = array("file" => "@documents/xmls/1298634571.xml");

С этим:

$data = array("file" => "@".realpath('documents/xmls/1298634571.xml'));

Попробуй, может сработает, я не уверен.

EDIT:

Попробуйте это:

<?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"); 
?> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...