За последние 24 часа нас посетили 18288 программистов и 1600 роботов. Сейчас ищут 854 программиста ...

Обработка XMLReader при zend.ze1_compatibility_mod ON

Тема в разделе "Прочие вопросы по PHP", создана пользователем shalun, 1 май 2009.

  1. shalun

    shalun Активный пользователь

    С нами с:
    1 май 2009
    Сообщения:
    1
    Симпатии:
    0
    Добрый день.

    У меня на сервере включен zend.ze1_compatibility_mod, что приводит к ошибке "Fatal error: Cannot clone object of class XMLReader due to 'zend.ze1_compatibility_mode" при прохождении $reader = new XMLReader();

    Чтобы из браузера скрипт запустить, то достаточно в htaccess написать php_value zend.ze1_compatibility_mode 0. Но дело в том, что скрипт нужно запускать кроном, а тот на htaccess плевать хотел.

    Можно ли как-нибудь переписать код, чтобы и XMLReader() остался и zend.ze1_compatibility_mod обойти?


    Код (Text):
    1. #!/usr/local/bin/php
    2. <?php
    3. $url = 'http://www.examle.com/xml.xml';
    4. $name = 'parced-xml.htm';
    5.  
    6. $handle = fopen($url,'r');
    7. if($handle !== false){
    8.     echo "<p>Источник доступен</p>";
    9.    
    10.     //$limit - кол-во выводимых ссылок от 0 до 10.
    11.     $limit=4;
    12.    
    13.         //сам парсер xml
    14.         $data = array();
    15.         $item = 0;
    16.         $element = '';
    17.        
    18.         $reader = new XMLReader();
    19.        
    20.         $reader->open($url);
    21.        
    22.         while ($reader->read()) {
    23.             if($reader->name == 'item')
    24.             {
    25.                 while($reader->read())
    26.                 {
    27.                     if($reader->localName == 'item') break;
    28.                    
    29.                     if($reader->nodeType == XMLReader::ELEMENT)
    30.                      {
    31.                       $element = $reader->name;
    32.                      }
    33.                     if($reader->hasValue)
    34.                      if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA)
    35.                         {
    36.                         $data[$item][$element] = $reader->value;
    37.                         }
    38.                 }
    39.                 $item++;
    40.                 $element = '';
    41.             }
    42.         }
    43.         $reader->close();
    44.        
    45.         //кончилсо парсер
    46.         //выводим результаты
    47.         $data = array_slice($data, 0, $limit);
    48.         $links = '';
    49.        
    50.                     if(isset($data)){
    51.                     foreach($data as $item):
    52.                
    53.                 $links=$links.'<li><a href="'.$item['link'].'">'.$item['title'].'</a></li>';
    54.                 endforeach; }
    55.        
    56.         $text='<div><ul>'.$links.'</ul></div>';
    57.        
    58.         $fp = fopen ("$name", "w");
    59.         fwrite($fp,$text);
    60.         fclose($fp);
    61. }
    62. else{
    63.     echo "<p>Источник не доступен</p>";
    64. }
    65. ?>
     
  2. PHP:
    1. <?ini_set('zend.ze1_compatibility_mode',0);