Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [cURL] основы работы с Curl 
:(
    Опции темы
yalo
Дата 20.1.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



Здравствуйте!
Возможно я не совсем в ту тему обратилась, если что поправьте (просто если бы был раздел типа Curl для начинающих, тогда бы наверно точно не промахнулась;))
Так вот, пишу такой код:

Код

<?
  $security = 0; /* Anybody */
  require_once("lib/base.template.php");      

  print("start<br />");
  $ch = curl_init();
  print("start<br />");
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  curl_setopt($ch, CURLOPT_URL, "example.xml");
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  print("start<br />");
  $resData = curl_exec($ch);
  if (!$resData){
  print("вылетает<br />");
    return 0;
    exit;
  }             
   
  $p =& new xmlParser();
  $p->parseData($resData);
  $p->getVipIPAssoc();

?>


файл example.xml находится в том же каталоге, что и этот php-файл. Файл xml выглядит так:

Код

<?xml version="1.0" encoding="cp-1251"?>
<data>
<grades>
  <grade articul="1">Единица измерения 1</grade>
  <grade articul="2">Единица измерения 2</grade>
  <grade articul="3">Единица измерения 3</grade>
</grades>

<catalogs>
    <catalog articul="1" name="Системы вентиляции">
        <catalog articul="2" name="Воздуховоды">
            <products>
                <product articul="1">
                    <name>воздуховод 1</name> // Наименование товара
                    <grade>1</grade> // Единица измерения
                    <price>1</price>    // Цена
                </product>
            </products>
        </catalog>
        <catalog articul="3" name="Вентиляторы">
            <products>
                <product articul="2">
                    <name>вентилятор 1</name> // Наименование товара
                    <grade>2</grade> // Единица измерения
                    <price>2</price>    // Цена
                </product>
                <product articul="3">
                    <name>вентилятор 2</name> // Наименование товара
                    <grade>1</grade> // Единица измерения
                    <price>3</price>    // Цена
                </product>
            </products>
        </catalog>
        <catalog articul="4" name="Решетки">
            <products>
                <product articul="4">
                    <name>решетка 1</name> // Наименование товара
                    <grade>3</grade> // Единица измерения
                    <price>4</price>    // Цена
                </product>
                <product articul="5">
                    <name>решетка 2</name> // Наименование товара
                    <grade>1</grade> // Единица измерения
                    <price>5</price>    // Цена
                </product>
            </products>
        </catalog>
        <catalog articul="5" name="Крепежные элементы">
            <products>
                <product articul="6">
                    <name>элемент 1</name> // Наименование товара
                    <grade>3</grade> // Единица измерения
                    <price>4</price>    // Цена
                </product>
                <product articul="7">
                    <name>элемент 2</name> // Наименование товара
                    <grade>3</grade> // Единица измерения
                    <price>7</price>    // Цена
                </product>
            </products>
        </catalog>
    </catalog>

    <catalog articul="6" name="Сантехника">
        <catalog articul="7" name="Канализация">
            <products>
                <product articul="8">
                    <name>канализация 1</name> // Наименование товара
                    <grade>2</grade> // Единица измерения
                    <price>8</price>    // Цена
                </product>
            </products>
        </catalog>
        <catalog articul="8" name="Полипропилен">
            <products>
                <product articul="9">
                    <name>полипропилен 1</name> // Наименование товара
                    <grade>1</grade> // Единица измерения
                    <price>9</price>    // Цена
                </product>
                <product articul="10">
                    <name>полипропилен 2</name> // Наименование товара
                    <grade>3</grade> // Единица измерения
                    <price>10</price>    // Цена
                </product>
            </products>
        </catalog>
        <catalog articul="9" name="Мебель для ванных комнат">
            <products>
                <product articul="11">
                    <name>мебель 1</name> // Наименование товара
                    <grade>2</grade> // Единица измерения
                    <price>11</price>    // Цена
                </product>
                <product articul="12">
                    <name>мебель 2</name> // Наименование товара
                    <grade>3</grade> // Единица измерения
                    <price>12</price>    // Цена
                </product>
                <product articul="13">
                    <name>мебель 3</name> // Наименование товара
                    <grade>1</grade> // Единица измерения
                    <price>13</price>    // Цена
                </product>
            </products>
        </catalog>
    </catalog>
    <catalog articul="10" name="Фурнитура">
        <products>
            <product articul="14">
                <name>фурнитура 1</name> // Наименование товара
                <grade>2</grade> // Единица измерения
                <price>14</price>    // Цена
            </product>
            <product articul="15">
                <name>фурнитура 2</name> // Наименование товара
                <grade>1</grade> // Единица измерения
                <price>15</price>    // Цена
            </product>
        </products>
    </catalog>
</catalogs>
</data>


При запуске скрипт вылетает на следующем месте:

Код

if (!$resData){
  print("вылетает<br />");
    return 0;
    exit;
  }


В чем проблема? Застряла на этом месте, никак не могу сдинуться с этой мертвой точки при изучении курлов smile 

Это сообщение отредактировал(а) yalo - 20.1.2007, 10:01
PM MAIL ICQ   Вверх
Aliance
Дата 20.1.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



Цитата

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

откуда берется переменная?
PM MAIL WWW ICQ Skype   Вверх
yalo
Дата 20.1.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



нда, действительно, переменная случайно забрела из другого чужого скрипта..
а вообще скрипт рабочий такой (теперь я в него вложила описание функций из base.template.php):
Код

<?

/**
 * XML Парсер
 *
 */
class xmlParser{
   var $xml_obj = null;
   var $output = array();
     var $assoc = array();
   var $attrs;

   function xmlParser(){
       $this->xml_obj = xml_parser_create();
       xml_set_object($this->xml_obj,$this);
       xml_set_character_data_handler($this->xml_obj, 'dataHandler');
       xml_set_element_handler($this->xml_obj, "startHandler", "endHandler");
   }

   function getVipIPAssoc(){
        $this->assoc = $this->_getVipIPAssoc($this->output[0]);
   }

   function _getVipIPAssoc($arr = null){
        $res = array();
        if (isset($arr['child']) && is_array($arr['child'])){
            foreach ($arr['child'] as $k => $v){
                $tmp = $this->_getVipIPAssoc($v);
                foreach ($tmp as $kk => $vv){
                    $res[$arr['name']][$kk][] = $vv;
                }
            }
        }elseif (isset($arr['content'])){
            $res[$arr['name']] = $arr['content'];
        }
        return $res;
   }

   // Парсим файл. Передается имя файла
   function parseFile($path){
       if (!($fp = fopen($path, "r"))) {
           die("Cannot open XML data file: $path");
           return false;
       }

       while ($data = fread($fp, 4096)) {
           if (!xml_parse($this->xml_obj, $data, feof($fp))) {
               die(sprintf("XML error: %s at line %d",
               xml_error_string(xml_get_error_code($this->xml_obj)),
               xml_get_current_line_number($this->xml_obj)));
               xml_parser_free($this->xml_obj);
           }
       }

       return true;
   }

   // Парсим сами данные. передаются XML данные
   function parseData($data){
       if (!xml_parse($this->xml_obj, $data)) {
           die(sprintf("XML error: %s at line %d",
              xml_error_string(xml_get_error_code($this->xml_obj)),
              xml_get_current_line_number($this->xml_obj)));
           xml_parser_free($this->xml_obj);
       }

       return true;
   }

   function startHandler($parser, $name, $attributes)
   {
       $data['name'] = $name;
       if ($attributes) { $data['attributes'] = $attributes; }
       $this->output[] = $data;
   }

   function dataHandler($parser, $data)
   {
       if ($data = trim($data)) {
           $index = count($this->output) - 1;
           // begin multi-line bug fix (use the .= operator)
           $this->output[$index]['content'] .= $data;
           // end multi-line bug fix
       }
   }

   function endHandler($parser, $name)
   {
       if (count($this->output) > 1) {
           $data = array_pop($this->output);
           $index = count($this->output) - 1;
           $this->output[$index]['child'][] = $data;
       }
   }
}


  
  $ch = curl_init();  
  curl_setopt($ch, CURLOPT_HEADER, 0);  
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_URL, "http://www.blabla.ru/bla"); 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    
  $resData = curl_exec($ch);
  if (!$resData){
print("вылетает" . "<br />");
    return 0;         
    exit;
  }             
   
  $p =& new xmlParser();
  $p->parseData($resData);      
  $p->getVipIPAssoc();  
             
?>


Т.е. вообще я хочу научиться принимать и распарсивать xml-файлы. Для чего мне был дан вот этот чужой рабочий код. Для этого я должна так понимаю:
1) разобраться с курлами
2) научиться распарсивать xml-файл
Пока что я застряла на первом этапе. Причем скрипт уже не вылетает, но теперь такая ошибка в браузере:
XML error: syntax error at line 1
Самой интересное, что если я в этот код вставляю обращение к тому файлу, к которому обращается человек давший скрипт, то у меня все работает, хоть есть строка 
Код
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
, хоть ее нет. Я кстати не понимаю зачем она нужна, может мало читала про курловские константы, попробую еще почитать. А если я обращаюсь уже к собственному файлу xml (неважно как путь писать абсолютно или физически, все равно ошибка). Возникло естесно подозрение, что мой файл некорректный, тогда я в строке браузера набрала абсолютный путь xml-файла человека, давшего скрипт (т.е. того файла, на котором скрипт не застревает), после открытия выделила все, скопировала и вместо прошлого подозрительного содержимого моего xml-файла вставила это новое и корректное, все равно в результате XML error: syntax error at line 1
И еще заметила, что если я вообще удалю файл, то скрипт не выдает что-то типа ФАЙЛ НЕ НАЙДЕН,  а опять же пишет XML error: syntax error at line 1
Такое чувство, что дело даже не в содержимом файла, а в чем не знаю..
Меняла права каталогов и файла соответствующим образом, ничто не помогает..




Это сообщение отредактировал(а) yalo - 20.1.2007, 15:25
PM MAIL ICQ   Вверх
Mal Hack
Дата 20.1.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 5
Всего: 261



1. Сначала оразбираемся с cURL.
2. Опция CURLOPT_URL должа быть URL'ом.
PM ICQ   Вверх
AeroWave
Дата 20.1.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.1.2007

Репутация: 1
Всего: 1



$path = "http://www.blabla.ru/bla";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $path);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resData = curl_exec($ch);
curl_close($ch);

$resData - это будет твой XML, потом уже парсишь - $p->parseData($resData);


P.S. XML error: syntax error at line 1, скорее всего от того, что парсер не получает содержимого XML файла.
PM MAIL   Вверх
yalo
Дата 20.1.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 24.5.2006

Репутация: нет
Всего: 2



В общем такой код после совета AeroWave:
Код

<?

 $security = 0; /* Anybody */
 require_once("lib/base.template.php");      

$path = "http://www.mysitename.ru/images/proba.xml";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $path);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$resData = curl_exec($ch);
curl_close($ch);

  
  $p =& new xmlParser();
  $p->parseData($resData);      
  $p->getVipIPAssoc();  
  print_r($p);

           
?>


И все заработало smile)))))))
Спасибо тебе AeroWave   smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.1137 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.