2012-01-18 70 views
1

我們一直在Magento安裝上使用SimplePie將我們的博客帖子拉入主頁,現在幾個月沒有問題。由於Magento的其他一些問題,我們讓我們的Web主機關閉了APC中的操作碼。一旦我們這樣做了,SimplePie的下一次小時更新停止加載主頁並在Apache中返回以下錯誤:Magento的APC變更使SimplePie不能正常工作

[Wed Jan 18 09:59:57 2012] [error] PHP致命錯誤:Class' Zend_Log'找不到{server root} /lib/SimplePie/simplepie.inc on line 738

我對正在發生的事情以及如何解決這個問題有點不知所措。 SimplePie作爲橫幅/小部件提供,所以如果我將它放在不同的類別頁面上,我會得到相同的結果。 (頁面停在SimplePie命令)我希望這會是簡單的變化是迫使舊的分支RSS保持不能修改,但我不知道。

任何幫助將不勝感激!


SimplePie的代碼不變,版本1.2.1。我有一個頁面/app/design/frontend/default/default/template/page/html/blog.phtml,它有以下代碼。

<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> 

那麼我這就要求旗幟只有以下

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

我包括在我們的主頁左欄的小工具,旗幟,以使其顯示。

中的了SimplePie線的引發錯誤是

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); 
    } 

我認爲這是你需要什麼,但很高興發佈更多。

+0

您能否發佈相關來源? SimplePie不使用任何Zend組件,因此您擁有的版本必須是自定義版本。 – 2012-01-18 15:35:46

+0

我剛剛檢查了SimplePie.inc,它是1.2.1的開發版本。我只是將它更新到當前版本,但獲得相同的結果。我會補充我在主要問題中的交付情況。 – 2012-01-18 16:17:47

+0

SimplePie中[738行](https://github.com/simplepie/simplepie/blob/one-dot-two/simplepie.inc#L738)唯一的事情就是'SimplePie_Sanitize'的實例化,所以這必須是來自其他地方。 (另外,1.2.1已經發布,所以1.2.1-dev已經過時) – 2012-01-18 16:31:20

回答

1

我唯一的想法就是在某處設置Zend_Log作爲錯誤記錄器。檢查代碼中的set_error_handler(),看看它是否在任何地方註冊。 (你可以仔細檢查,通過自己與trigger_error()導致一個錯誤,看看會發生什麼。)

至於爲什麼錯誤發生,我會冒險猜測那是因爲你使用PHP 1.2.1 4,當通過引用分配新的數據時(例如在該行上),將給出E_DEPRECATED錯誤。

+0

所以這裏是真正奇怪的事情。如果我將trigger_error()添加到加載的blogs.phtml頁面,則不會創建錯誤,也不會產生問題。 PHP的版本是5.3.8,但它確實指向了一個設置問題,而不是你的代碼。感謝您將您的想法付諸實踐! – 2012-01-18 18:46:13

+0

刪除它是否會再次創建相同的問題?它可能僅僅是在那裏幫助的操作碼緩存刷新。 (也許你的主機做了一些奇怪的事情,它仍在加載緩存) – 2012-01-19 02:14:51

+0

是的,刪除它會再次導致同樣的問題。如果我的主機關閉了操作碼並且沒有刷新它的緩存,我不會感到驚訝。 – 2012-01-19 14:34:51