Обработать запрос на сервере и отправить ответ.
Я отправляю запрос на адрес при помощи курла вот такой функций:
$ch = curl_init($address);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$result=curl_exec($ch);
return $result;
}
Но на адресе($adress), на который я посылаю этот запрос, мне нужно обработать значение $xml.
В гугле выдает сообщения в большинстве своем на тему "как отправить сообщение". Но, грубо говоря, серверной части скрипта нет.
Но вероятно, какой язык такие и кодеры.
Поискать можно на php.net. О том, как обрабатывать входящие данные написано в любом, даже самом дурацком, учебнике по PHP.
Для работы с XML используйте simpleXML, или проще вбейте в поиске на php.net xml.
Ваш пост я читал - там не указано что конкретно вам надо. Под "Но, грубо говоря, серверной части скрипта нет" я очевидно вижу намек на "напишите мне серверную часть". Но может вы имели в виду "как принять файл", а может "как обработать xml", а может ещё хз что?
Полистайте первые 20-30 страниц любого учебника.
Есть два файла index.php и job.php. В скрипте индекс есть форма и скрипты генерации и обработки формы. Скрипт обработки посылает в файл job.php строку $xml. Она там обрабатывается и результатом обработки будет другой код xml.
Внимание вопрос: как отправить из файла job.php в файл index.php xml строку, который запишется в переменную $result функции getans..... ?
P.S. Язык для меня в принципе новый. Вернее отвык от него. Сам я специализируюсь в Java и немного в Delphi. В обоих случаях, я ни разу не получил ответ типа И чё предлагаете? Чтобы за вас код написали?. Обычно или темы остаются без ответа когда задача особенно запутанная, либо люди ссылаются на конкретные примеры, может и не очень полные, но по ним можно что-то сделать, либо же указывают конкретные места в документации где стоит смотреть.
Опять же PHP отличается парадигмой программирования и к примеру классы здесь вообще только начинают набирать обороты. Поэтому язык для меня в принципе не очень приятен.
Если брать конкретно функцию которую я привел как пример. Что за $result? Откуда он берется? Какая строчка в job.php будет отвечать за значение которое получит это переменная?
Может стоит отправить ещё один пост? Или есть какой-то специфичный return?
$result=curl_exec($ch);
return $result;
Есть хмл услуга. Она принимает на вход сгенерированную мной строку хмл, обрабатывает и присылает значение. Мне нужно эту услугу тоже написать самому, чтобы она пользователю на его ввод присылала вывод. Типа такого. Я понимаю что для решения той задачи которая у меня есть мне хмл вообще не нужен, но по заданию требуется чтобы я запрос и ответ на него в виде хмл представлял.
Есть хмл услуга.
XML это расширяемый язык разметки и услугой он быть никак не может.
Значит вы либо должны отправлять данные на сервер которые находятся формате хмл либо по запросу выдавать данные в формате хмл.
В $result будет содержаться всё то что быдет выведено этим скриптом на экран. Тоесть если Вы напишите $address="http://my.site.ru" то в $result html-код сайта.
И вообще я смутно представляю что Вам нужно сделать. Ставьте конкретную задачу. Например: "я отправляю данные в таком формате (пример) нужно получить в таком (пример), как лучше реализовать?".
<SearchCarRQ>
<Country name='Austria'>
<City>Linz</City>
<City>Salzburg</City>
</Country>
<Country name='Portugal'>
<City>Faro</City>
</Country>
</SearchCarRQ>
Выход: для каждой страны для каждого города 5 самый дешевых машин по возрастанию.
<SearchCarRS>
<Country name='Austria'>
<City name='Linz'>
<Car price='34.33'>BMW X3</Car>
<Car price='34.34'>Opel Zafira</Car>
<Car price='34.40'>Renault Laguna</Car>
<Car price='35.00'>Volvo S40</Car>
<Car price='40.00'>Mercedes-Benz E Class</Car>
</City>
<City name='Salzburg'>
<Car price='31.03'>Opel Zafira</Car>
<Car price='32.00'>Skoda Octavia</Car>
<Car price='35.23'>Volkswagen Lupo</Car>
<Car price='47.12'>Fiat Panda</Car>
<Car price='49.11'>Fiat Bravo</Car>
</City>
</Country>
<Country name='Portugal'>
<City name='Faro'>
<Car price='40.12'>BMW Z4 Coupe</Car>
<Car price='42.12'>BMW X3</Car>
<Car price='43.00'>Opel Astra</Car>
<Car price='45.23'>Volvo S40</Car>
<Car price='50.00'>Skoda Octavia</Car>
</City>
</Country>
</SearchCarRS>
Это я отправляю в $xml. Имя изменил на ид, для удобства.
<SearchCarRQ><Country id="2"><City>2</City></Country><Country id="155"><City>3040</City></Country></SearchCarRQ>
До другой страницы доходит лишь:
\"2\"><City>2</City></Country><Country id=\"155\"><City>3040</City></Country></SearchCarRQ>
Теперь я разобрался, что ничего обратно не отсылается, лишь то что печатается. в этом был основной вопрос, а добавочный: почему у меня не все приходит целиком?
P.S. Сейчас, убрав после id= двойные кавычки этот глюк исчез, так что все пучком ;)
Остался вопрос: получается постом я посылаю запрос, в job.php допустим печатается табличка и содержимое этой таблички записывается в $result?
Все никак не до мануала?
[QUOTE="php.net/curl_exec"]Returns TRUE on success or FALSE on failure. However, if the CURLOPT_RETURNTRANSFER option is set, it will return the result on success, FALSE on failure.[/QUOTE][QUOTE="php.net/curl_setopt"]CURLOPT_RETURNTRANSFER TRUE to return the transfer as a string of the return value of curl_exec() instead of outputting it out directly.[/QUOTE]
Из чего следует, что действительно в конкретном примере будет возвращаться данные, отдаваемые страницей.
В xml не забывайте включать заголовочный тег <?xml ... ?> с указанием кодировки, дабы избежать последующих проблем при обработке xml с помощью библиотек.
Из-за двойных кавычек такого быть не должно, код отправки кривой - тут надо смотреть сам php-код с формированием xml для отправки, ибо:
[quote="php.net/curl_setopt"]CURLOPT_POSTFIELDS The full data to post in a HTTP "POST" operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like 'para1=val1¶2=val2&...' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data. As of PHP 5.2.0, files thats passed to this option with the @ prefix must be in array form to work.[/quote]
Что значит отдаваемые страницой?
echo? return? set?
echo? return? set?
это значит
печатается табличка и содержимое этой таблички записывается в $result?
И наконец прочитайте мануал и чем отличаются те конструкции, которые вы упомянули.
Дальше, ХМЛ нужно что бы был валидный это раз (для этого можно просто сохранить этот текст в файл и открыть например в ИЕ он напишет где ошибка), во вторых передача через пост это не значит запихнуть этот ХМЛ в переменную, сама переменная должна быть массивом $xml["request"]="здесь хмл разметка" и в серверном скрипте брать эти данные из $_POST["request"].
Короче если я в job.php сделаю echo $_POST["request"] то в $result будет напечатанная строка?
Как по вашему страница может отдавать return? Протокол http хоть примерно знаете? Так вот, там посылается текстовый запрос и возвращается сервером текстовый ответ. В скрипте все выводится через echo, print и прочими подобными и не очень командами.
Возьмите да проверьте. Должна быть, если отправите корректно данные курлом.
$xml ='<?xml version="1.0" encoding="UTF-8"?>';
$xml.= '<SearchCarRQ>';
$prev_count = 0;
foreach($selects as $current){
$ids = explode("/", $current);
if($ids[0] != $prev_count){
if($prev_count != 0){
$xml.='</Country>';
}
$xml.='<Country id="'.$ids[0].'">';
}
$xml.='<City>'.$ids[1].'</City>';
$prev_count = $ids[0];
}
$xml.='</Country></SearchCarRQ>';
P.S. Практически исправил.
$_xml = array("xml" => $xml);
Теперь только дело в том что доходит со слэшами у кавычек :)
P.P.S. нашел stripslashes, убирающую слэши
$xml ='<?xml version="1.0" encoding="UTF-8"?>';
Вы указали UTF-8, а само содержимое тоже в UTF-8? Я подозреваю что нет...