Предупреждение array_slice () в php и WordPress - PullRequest
0 голосов
/ 22 мая 2009

Я написал этот код:

function get_feed(){

 // Get RSS Feed(s)
include_once(ABSPATH . WPINC . '/rss.php');
$rss = fetch_rss('http://dorar.shamekh.ws/?feed=rss2');
$maxitems = 1;
$items = array_slice($rss->items, 0, $maxitems,false);
return $items;

}

Как часть плагина для WordPress, он отлично работает на моем локальном сервере, но когда я загружаю его в блог, я получаю сообщение:

Предупреждение: array_slice () [function.array-slice]: первый аргумент должен быть массивом в

php версия на моем локальном хосте: 5.2.6

php версия на моем сайте: 5.2.5

Ответы [ 4 ]

1 голос
/ 22 мая 2009

Из документации видно, что $rss->items уже должен быть массивом. Я предполагаю, что получение RSS не удается. Попробуйте:

if (is_array($rss->items)) {
   $items = array_slice($rss->items, 0, $maxitems,false);
} else { var_dump($rss->items); }

MagpieRSS в сочетании с dorar.shamekh.ws '(использование / настройка) Apache 1.3.41 ведет к очень странному поведению:

«Нормальный» HTTP-запрос:

GET /feed/ HTTP/1.0
Host: dorar.shamekh.ws   

Запрос MagpieRSS:

GET /feed/ HTTP/1.0
User-Agent: MagpieRSS/0.72 (+http://magpierss.sf.net)
Host: dorar.shamekh.ws:80
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

Обратите внимание на различные заголовки «Host». Когда добавляется номер порта, как в MagpieRSS, сайт возвращает 301:

HTTP/1.1 301 Moved Permanently
Date: Fri, 22 May 2009 02:45:03 GMT
Server: Apache/1.3.41 (Unix) PHP/5.2.5 mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.7a
X-Powered-By: PHP/5.2.5
X-Pingback: http://dorar.shamekh.ws/xmlrpc.php
Last-Modified: Wed, 20 May 2009 22:03:05 GMT
ETag: "e591693fdf2d27ee7dae19e256db2f46"
Location: http://dorar.shamekh.ws/feed/
Connection: close
Content-Type: text/html
0 голосов
/ 05 ноября 2009

fetch_rss() устарело. Смотри: http://codex.wordpress.org/Function_Reference/fetch_rss

Вы должны использовать fetch_feed()

0 голосов
/ 22 мая 2009

Мне кажется, что когда он пытается получить RSS, он терпит неудачу. Возможно fetch_rss использует file_get_contents, который был отключен для URL.

Либо это, либо по какой-то причине свойство $ rss-> items не является массивом по какой-либо причине.

0 голосов
/ 22 мая 2009

Как насчет приведения $ rss-> элементов в качестве первого массива:

function get_feed(){

 // Get RSS Feed(s)
include_once(ABSPATH . WPINC . '/rss.php');
$rss = fetch_rss('http://dorar.shamekh.ws/?feed=rss2');
$maxitems = 1;
$rss->items = (array) $rss->items;
$items = array_slice($rss->items, 0, $maxitems,false);
return $items;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...