Ошибка разбора PHP в функции разбора rss - PullRequest
0 голосов
/ 26 августа 2010

У меня есть клиент, которому срочно нужен веб-сайт, но у меня нет доступа к такой информации, как панель управления.

Версия PHP - 4.4. Это неприятно, так как я привык к 5.

Первая проблема в том, что я продолжаю получать:

Parse error: parse error, unexpected T_OBJECT_OPERATOR, expecting ')' in D:\hshome\*******\********\includes\functions.php on line 37

Это рассматриваемая функция:

function read_rss($display=0,$url='') {
    $doc = new DOMDocument();
    $doc->load($url);
    $itemArr = array();

    foreach ($doc->getElementsByTagName('item') as $node) {
        if ($display == 0) {
            break;
        }

        $itemRSS = array(
            'title'=>$node->getElementsByTagName('title')->item(0)->nodeValue,
            'description'=>$node->getElementsByTagName('description')->item(0)->nodeValue,
            'link'=>$node->getElementsByTagName('link')->item(0)->nodeValue);

         array_push($itemArr, $itemRSS);

        $display--;
    }
    return $itemArr;
}

И соответствующая строка:

'title'=>$node->getElementsByTagName('title')->item(0)->nodeValue,

Ответы [ 5 ]

2 голосов
/ 26 августа 2010

PHP4 не поддерживает разыменование объектов. Так что $obj->something()->something не будет работать. Вам нужно сделать $tmp = $obj->something(); $tmp->something ...

0 голосов
/ 02 марта 2012

DOMDocument - это функция php 5. Вы не можете ее использовать.вам может понадобиться использовать функции DOM XML (PHP 4)

0 голосов
/ 26 августа 2010

Вам нужно разбить эту строку на отдельные переменные. PHP 4 не любит -> следующие скобки. Сделайте это вместо:

    $title = $node->getElementsByTagName('title');
    $title = $title->item(0);
    $description = $node->getElementsByTagName('description');
    $description = $description->item(0);
    $link = $node->getElementsByTagName('link');
    $link = $link->item(0);

    $itemRSS = array(
        'title'=>$title->nodeValue,
        'description'=>$description->nodeValue,
        'link'=>$link->nodeValue);

Два объявления переменных для каждого могут быть избыточными и сжатыми, я не уверен, что ответит PHP4. Вы можете попробовать сжать их, если хотите.

0 голосов
/ 26 августа 2010

Вы не можете связывать вызовы объектов в PHP 4. Вам нужно будет делать каждый вызов отдельно для переменной и сохранять все это.

$titleobj = $node->getElementsByTagName('title');
$itemobj = $titleobj->item(0);
$value = $itemobj->nodeValue;

...

'title'=>$value,

вам придется делать это навсе эти цепные вызовы

Что касается .htaccess ... вам нужно поговорить с кем-то, кто контролирует реальный сервер.Похоже, что .htaccess не может изменить настройку, которую вы пытаетесь изменить.

0 голосов
/ 26 августа 2010

Вы не можете сделать это в PHP 4.

Нужно сделать что-то вроде

   $nodes = $node->getElementsByTagName('title');
   $item = $nodes->item(0);
   $value = $item->nodeValue,

Попробуйте, и это будет работать.

...