PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 9
rudiwork Отправлено: 14 Июня, 2013 - 07:08:50 • Тема: Soap - возвратить многомерный массив объектов • Форум: XML и его обработка

Ответов: 2
Просмотров: 3299
caballero пишет:
Цитата:
Подскажите как описать WSDL файл?

только клинические извращенцы вручную описывают wsdl файлы.
Тем более здесь надо не описывать его (он сервером генерится) а сгенерить клиентские PHP классы по wsdl для чего есть куча тулсов.

Хм... а как можно сгенерить WSDL файл?
rudiwork Отправлено: 13 Июня, 2013 - 21:37:00 • Тема: Soap - возвратить многомерный массив объектов • Форум: XML и его обработка

Ответов: 2
Просмотров: 3299
Привет, вопрос по теме SOAP.
Soap установлен как модуль Apache.
Стоит задача, вернуть c сервера данные в виде массива объектов типа stdClass.
Ниже приведу код WSDL файла и код сервера...
Если возвращаю обычный массив, то мой клиент на сервере все прекрасно понимает... а клиент на платформе 1С завершается неудачей при чтении возвращаемых данных.
Покумекав я решил, раз сервер при запросе от 1С получает массив объектов, то и возвращать нужно так же массив объектов.
Но не получается организовать возвращение многомерного массива объектов
Подскажите как описать WSDL файл?

Файл WSDL
CODE (htmlphp):
скопировать код в буфер обмена
  1. <definitions xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:europarts" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:europarts">
  2.     <types>
  3.         <xsd:schema targetNamespace="urn:europarts">
  4.             <xsd:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
  5.             <xsd:import namespace="http://schemas.xmlsoap.org/wsdl/"/>
  6.             <xsd:complexType name="ItemPart">
  7.                 <xsd:sequence>
  8.                     <xsd:element name="number" type="xsd:string"/>
  9.                     <xsd:element name="priority" type="xsd:int"/>
  10.                 </xsd:sequence>
  11.             </xsd:complexType>
  12.             <xsd:complexType name="ArrayOfItemPart">
  13.                 <xsd:sequence>
  14.                     <xsd:element name="password" type="xsd:string"/>
  15.                     <xsd:element name="parts" type="tns:ItemPart" minOccurs="0" maxOccurs="unbounded"/>
  16.                 </xsd:sequence>
  17.             </xsd:complexType>
  18.             <xsd:complexType name="ItemPartPrice">
  19.                 <xsd:sequence>
  20.                     <xsd:element name="number" type="xsd:string"/>
  21.                     <xsd:element name="priority" type="xsd:int"/>
  22.                     <xsd:element name="price" type="xsd:float"/>
  23.                 </xsd:sequence>
  24.             </xsd:complexType>
  25.             <xsd:complexType name="ArrayOfItemPartPrice">
  26.                     <xsd:sequence>
  27.                         <xsd:element name="result" type="tns:ItemPartPrice" minOccurs="0" maxOccurs="unbounded" />
  28.                     </xsd:sequence>          
  29.             </xsd:complexType>
  30.         </xsd:schema>
  31.     </types>
  32.     <message name="getArrayPriceRequest">
  33.         <part name="array" type="tns:ArrayOfItemPart"/>
  34.     </message>
  35.     <message name="getArrayPriceResponse">
  36.         <part name="array" type="tns:ArrayOfItemPartPrice"/>
  37.     </message>
  38.     <portType name="europartsPortType">
  39.         <operation name="getArrayPrice">
  40.             <documentation>get array price</documentation>
  41.             <input message="tns:getArrayPriceRequest"/>
  42.             <output message="tns:getArrayPriceResponse"/>
  43.         </operation>
  44.     </portType>
  45.     <binding name="europartsBinding" type="tns:europartsPortType">
  46.         <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
  47.         <operation name="getArrayPrice">
  48.             <soap:operation soapAction="urn:europarts#getArrayPrice" style="rpc"/>
  49.             <input>
  50.                 <soap:body use="encoded" namespace="urn:europarts" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  51.             </input>
  52.             <output>
  53.                 <soap:body use="encoded" namespace="urn:europarts" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
  54.             </output>
  55.         </operation>
  56.     </binding>
  57.     <service name="europarts">
  58.         <port name="europartsPort" binding="tns:europartsBinding">
  59.             <soap:address location="http://europarts.pro/webservicePrice/server.php"/>
  60.         </port>
  61.     </service>
  62. </definitions>


Сервер
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class PriceService {  
  3.         function getArrayPrice($parts) {       
  4.             //преобразуем объект в массив
  5.             $array = $this->objectToArray($parts);
  6.  
  7.                 $result = array();
  8.                 foreach($array['parts'] as $v) {
  9.                     $tmp = array();
  10.                         $tmp['number']   = $v['number'];
  11.                         $tmp['priority'] = $v['priority'];
  12.                     $tmp['price']    = $this->getPartPrice($v['number'], $v['priority']);    
  13.                     $result['result'][] = $tmp;
  14.                 }
  15.  
  16.                 //Преобразуем массив в объект
  17.                 $objArray = object;
  18.                 $objArray = $this->arrayToObject($result);
  19.        
  20.             return $objArray;
  21.         }
  22.     //------------------------------------------------------------------
  23.         //Запрос авторизации
  24.     function auth($pass){
  25.             $r = mysql_qw("SELECT `password` FROM `modx_web_users` WHERE id=?", $pass);
  26.         $row = mysql_fetch_assoc($r);
  27.         if(md5($pass) !== $row['password'])
  28.                     return false;
  29.         return true;
  30.     }  
  31.         //------------------------------------------------------------------
  32.         //Полцчить цену на товар
  33.         function getPartPrice($number, $priority) {
  34.             $r = mysql_qw("SELECT `price` FROM `modx_catalog` WHERE `number`=? AND `priority`=?", $number, $priority);
  35.                 if(mysql_num_rows($r) < 1) return 0;
  36.                 $row = mysql_fetch_assoc($r);
  37.                 return (float)$row['price'];
  38.         }
  39.         //------------------------------------------------------------------
  40.         /**
  41.     * Преобразование объекта в массив
  42.     * @param    object  $object преобразуемый объект
  43.     * @reeturn  array
  44.     */
  45.     function objectToArray($object) {
  46.         if(!is_object($object) && !is_array($object))
  47.             return $object;
  48.         if(is_object($object))
  49.             $object = get_object_vars($object);
  50.         return array_map(array($this, 'objectToArray'), $object );
  51.     }
  52.         //------------------------------------------------------------------
  53.         /**
  54.     * Преобразование  массива в объект
  55.     * @param    array  $array преобразуемый массив
  56.     * @reeturn  object
  57.     */
  58.         function arrayToObject($array = array()) {
  59.         if (!empty($array)) {
  60.             $data = false;
  61.             foreach ($array as $akey => $aval) {
  62.                 //$data -> {$akey} = $aval;
  63.                                 $data ->{$akey} = is_array($aval) ? $this->arrayToObject($aval) : $aval;
  64.             }
  65.             return $data;
  66.         }
  67.         return false;
  68.     }
  69.         //------------------------------------------------------------------
  70. }
  71.  
  72. ini_set("soap.wsdl_cache_enabled", "0"); // отключаем кэширование WSDL
  73. $server = new SoapServer("price.wsdl");
  74. $server->setClass("PriceService");
  75. $server->handle();
  76. ?>  
rudiwork Отправлено: 30 Мая, 2013 - 23:01:38 • Тема: Сохранить значение в поле при покидании страницы • Форум: Вопросы новичков

Ответов: 5
Просмотров: 215
vanicon пишет:
Пример:
PHP:
скопировать код в буфер обмена
  1. $_SESSION['func1']['var'] = 'value';
  2. $_SESSION['func2']['var'] = 'value';

Спасибо, пробывал...
но когда пытаюсь получить свои данные из массива... их там попросту нету...
в $_SESSION находятся лишь данные сторонней функции...

Скажу подробнее... достался мне проект на Modx Evo
Там есть некий плагин для работы с корзиной, и этот плагин так же активно юзает $_SESSION
имено в $_SESSION он сохраняет положенные в корзину товары, и видать он где то в свой работе обнуляет весь $_SESSION
вот я и спросил... можно ли как то заюзать $_SESSION, при условии что мои данные не потрет стороний плагин... MODX меня порой выбешивает...
(Добавление)
может мне в помощь будет session_name или seesion_id ?
rudiwork Отправлено: 30 Мая, 2013 - 22:48:29 • Тема: Сохранить значение в поле при покидании страницы • Форум: Вопросы новичков

Ответов: 5
Просмотров: 215
и где его хранить для текущего юзера?
rudiwork Отправлено: 30 Мая, 2013 - 22:44:02 • Тема: Сохранить значение в поле при покидании страницы • Форум: Вопросы новичков

Ответов: 5
Просмотров: 215
Привет
. сегодня задача была, есть некое поле textarea куда можно ввести данные...
если юзер ввел данные в это поле и не нажал сохранить а вместо этого перешел на другую страницу , а потом после вернулся назад... то нужно что бы сохранились ввденные им данные...
Решил сделать на javascript событие focusOut - потеря фокуса, и при потере фокуса введенные данные через ajax сохнанять в $_SESSION, но вот беда... работает паралельно некая функция, которая так же работает с $_SESSION
и когда приходит время подтянуть данные из $_SESSION
в ней находятся не мои данные , а данные стороней не моей функции...
Можно ли как то заюзать $_SESSION что бы не пересекаться с $_SESSION иной функции ?
rudiwork Отправлено: 23 Мая, 2013 - 09:53:41 • Тема: Скормить Cron выполение скрипта • Форум: Apache и другие веб-серверы

Ответов: 2
Просмотров: 320
спасибо за ответ
rudiwork Отправлено: 23 Мая, 2013 - 09:31:16 • Тема: Скормить Cron выполение скрипта • Форум: Apache и другие веб-серверы

Ответов: 2
Просмотров: 320
Привет.
Есть некий файл на сервере, запуск которого можно произвести из браузера набрав в адресной строке URL вида:
http://site[dot]ru/script.php?action=start
Вопрос: Можно ли установить запуск данного файла по расписанию из Cron именно с параметрами, что следуют после знака ?.
Спасибо
rudiwork Отправлено: 21 Мая, 2013 - 10:31:59 • Тема: Dbase, отрезает дробную часть... что делать? • Форум: Вопросы новичков

Ответов: 2
Просмотров: 143
Помогла эта команда
setlocale(LC_NUMERIC, 'C');

Тоесть для Windows разделителем дроби считается запятая, а у меня в в файлах dbf точка стоит.
Переопределение локали решило проблему
rudiwork Отправлено: 21 Мая, 2013 - 09:34:22 • Тема: Dbase, отрезает дробную часть... что делать? • Форум: Вопросы новичков

Ответов: 2
Просмотров: 143
Привет.
Есть файл в формате *.dbf
Который содержит 3 поля:
string
string
number

Задача считать данные из данного файла.
Для выполнения данной задачи установил на сервере библиотеку dbase
Проблема в том, что при считывании данных типа float отбрасывается дробная часть, а мне нужно получить значение именно с дробной частью.
Привожу код

CODE (text):
скопировать код в буфер обмена
  1.  
  2. $db = dbase_open("file.dbf", 0);
  3. if(!$db) return false;
  4. //Получить кол. записей
  5. $record_numbers = dbase_numrecords($db);
  6. for ($i = 1; $i <= $record_numbers; $i++) {
  7.       $row = dbase_get_record($db, $i);
  8.       var_dump($row);
  9. }
  10.  

на выходе плучаю
CODE (text):
скопировать код в буфер обмена
  1.  
  2. array(4) {
  3.      ["TEXT1"]=> string(30) "A0220001200 "
  4.      ["TEXT2"]=> string(25) "BETR.ANLEITUNG "
  5.      ["NUMBER"]=> float(25)
  6.      ["deleted"]=> int(0) }
  7.  

Где ["NUMBER"]=> float(25) должно иметь значения типа float, например: 25.43545
а у меня Почему то отбрасывает дробную часть
Как с этим бороться?
данные сервера:
ОС: Linux apus.solidnet.pro 2.6.32-358.6.2.el6.centos.plus.x 86_64 #1 SMP Thu May 16 17:43:34 UTC 2013 x86_64
PHP Version 5.3.14
dbase Version 5.1.0

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB