【问题标题】:array_slice() warning in php and WordPressphp 和 WordPress 中的 array_slice() 警告
【发布时间】:2009-05-22 02:19:53
【问题描述】:

我写了这段代码:

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

【问题讨论】:

  • fetch_rss 在失败时会做什么?它是否返回一个有效的对象? $rss->items 失败时是数组吗?

标签: php wordpress


【解决方案1】:

从文档看来,$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, */*

注意不同的“主机”标头。当附加端口号时,如在 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

【讨论】:

  • 当我尝试在本地使用 MagpieRSS 加载给定的 URL 时,我得到:警告:MagpieRSS:无法获取 dorar.shamekh.ws/?feed=rss2(HTTP 响应:HTTP/1.1 301 已永久移动
  • NULL -------------
  • 是的,它现在可以工作了,我更改了 rss 链接并且它可以工作,但我仍然感到震惊,因为旧的 rss 链接在我的本地服务器上工作
  • 见上文 - 我不确定哪一端有问题,但这种行为至少是可以解释的。 :)
【解决方案2】:

先将 $rss->items 转换为数组怎么样:

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;

}

【讨论】:

    【解决方案3】:

    在我看来,当它试图获取 RSS 时它失败了。也许fetch_rss 使用了已对 URL 禁用的 file_get_contents。

    由于某种原因,或者由于某种原因,属性 $rss->items 不是数组。

    【讨论】:

      【解决方案4】:

      fetch_rss() 已弃用。见:http://codex.wordpress.org/Function_Reference/fetch_rss

      你必须使用fetch_feed()

      【讨论】:

        猜你喜欢
        • 2018-02-11
        • 2021-05-17
        • 1970-01-01
        • 2019-01-28
        • 1970-01-01
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多