Hemos estado usando SimplePie en nuestra instalación de Magento para llevar las publicaciones de nuestro blog a nuestra página de inicio sin problemas durante varios meses. Debido a otros problemas con Magento, nuestro servidor web desactivó el código de operación en APC. Una vez que hicimos eso, la siguiente actualización por hora de SimplePie detuvo la carga de la página de inicio y devuelve el siguiente error en Apache:

[Miércoles 18 de enero 09:59:57 2012] [error] Error fatal de PHP: la clase 'Zend_Log' no se encuentra en {raíz del servidor} /lib/SimplePie/simplepie.inc en la línea 738

Estoy un poco perdido sobre lo que está sucediendo y qué hacer para solucionarlo. SimplePie se entrega como un banner / widget, por lo que si lo coloco en una página de categoría diferente, obtengo los mismos resultados. (La página se detiene en el comando SimplePie) Tenía la esperanza de que fuera algo simple, como que el cambio está obligando al antiguo RSS chached a permanecer y no se puede modificar, pero no estoy seguro.

Cualquier ayuda sería muy apreciada!


<div class="col-narrow right sidebar-blog">
<h2>Our Gardening Blog</h2>

<?php

// Make sure SimplePie is included. You may need to change this to match the location of

require_once('lib/SimplePie/simplepie.inc');

// We'll process this feed with all of the default options.
$feed = new SimplePie();

// Set which feed to process.
$feed->set_feed_url('http://blog.americanmeadows.com/feed/');

// Run SimplePie.
$feed->init();

// This makes sure that the content is sent to the browser as text/html and the UTF-8 
$feed->handle_content_type();

    /*
    Here, we'll loop through all of the items in the feed, and $item represents the 
current item in the loop.
    */
    foreach ($feed->get_items(0,2) as $rss_item):
    ?>

<div class="article-teaser">
<p><span><?php echo $rss_item->get_date('F j, Y'); ?></span></p>
<h2 class="article-title"><a href="<?php echo $rss_item->get_permalink(); ?>"><?php echo $rss_item->get_title(); ?></a></h2>

<?php   if ($rss_item->get_item_tags('', 'thumbnail')) {$thumbnail = $rss_item->get_item_tags('', 'thumbnail'); echo "<img src='" . $thumbnail[0]['data'] . "'>";  } ?>
<p><?php echo $rss_item->get_description(); ?> <a class="more" href="<?php echo $rss_item->get_permalink(); ?>" target="_blank">Continue Reading</a></p>
</div>

<?php endforeach; ?>

</div>

Luego tengo un banner que solo llama a lo siguiente

{{block type="page/html" template="page/html/blog.phtml"}}

Incluyo ese banner en el widget de la columna izquierda en nuestra página de inicio para que se muestre.

Las líneas en SimplePie arrojan el error es

    function SimplePie($feed_url = null, $cache_location = null, $cache_duration = null)
{
    // Other objects, instances created here so we can set options on them
    $this->sanitize =& new SimplePie_Sanitize; /* Error is thrown here */

    // Set options if they're passed to the constructor
    if ($cache_location !== null)
    {
        $this->set_cache_location($cache_location);
    }

Creo que eso es lo que necesitas, pero estoy feliz de publicar más.

1
Greg Demetrick 18 ene. 2012 a las 19:12
¿Puedes publicar la fuente relevante? SimplePie no usa ningún componente de Zend, por lo que la versión que tenga debe ser una versión personalizada.
 – 
Ryan McCue
18 ene. 2012 a las 19:35
Acabo de comprobar SimplePie.inc y era una versión de desarrollo de 1.2.1. Acabo de actualizarlo a la versión actual, pero obtengo los mismos resultados. Agregaré cómo tengo la entrega en la pregunta principal.
 – 
Greg Demetrick
18 ene. 2012 a las 20:17
Lo único en línea 738 en SimplePie es la instanciación de SimplePie_Sanitize, por lo que debe provenir de otro lugar. (Además, se ha lanzado 1.2.1, por lo que 1.2.1-dev está desactualizado)
 – 
Ryan McCue
18 ene. 2012 a las 20:31

1 respuesta

La mejor respuesta

Mi único pensamiento aquí es que en algún lugar algo está configurando Zend_Log como un registrador de errores. Busque set_error_handler() en su código y vea si está registrado en alguna parte. (Puede comprobarlo dos veces provocando un error usted mismo con trigger_error() y viendo qué sucede).

En cuanto a por qué ocurre el error, me arriesgaría a adivinar que es porque está usando 1.2.1 con PHP 4, lo que dará E_DEPRECATED errores al asignar nuevos por referencia (como en esa línea) .

1
Ryan McCue 18 ene. 2012 a las 20:54
Así que aquí está lo REALMENTE extraño. Si agrego trigger_error () a la página blogs.phtml que se carga, no se crea un error ni el código genera un problema. PHP está en la versión 5.3.8 pero apunta a un problema de configuración y no a su código en absoluto. ¡Gracias por dedicar tu mente a esto!
 – 
Greg Demetrick
18 ene. 2012 a las 22:46
¿Eliminarlo vuelve a crear el mismo problema? Podría haber sido simplemente un vaciado de la caché de código de operación que ayudó allí. (Tal vez su anfitrión hizo algo extraño y todavía está cargando el caché)
 – 
Ryan McCue
19 ene. 2012 a las 06:14
Sí, quitarlo vuelve a causar el mismo problema. No me sorprendería que mi host desactivara el código de operación y no borrara su caché.
 – 
Greg Demetrick
19 ene. 2012 a las 18:34
Vuelva a verificar con su host y vea si pueden encontrar algún error en su configuración. Reemplace trigger_error() con algo como echo ' '; solo para asegurarse de que los códigos de operación se cambien y ver si todavía ocurre. Además, intente agregar un restore_error_handler() justo antes de hacerlo new SimplePie() y vea si eso ayuda con algo.
 – 
Ryan McCue
20 ene. 2012 a las 07:46