2012-05-21 23 views
0

这是我的代码。但我不知道为什么这个代码不能创建XML文件,也不会显示任何错误!在zend上保存xml文件

它显示完美的XML结果,但不能保存此文件在确定的路径!

public function indexAction() 
{ 

// XML-related routine - <urlset> 
    $xml = new DOMDocument('1.0', 'utf-8'); 
    $masterRoot = $xml->createElement('urlset'); 
    $xml->appendChild($masterRoot); 
    $publicpath = "/public"; 

    $data = array(
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ,'changefreq' =>'daily','priority' =>'1.00'), 
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/about us" ,'changefreq' =>'daily','priority' =>'0.98'), 
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/contact us",'changefreq' =>'daily','priority' =>'0.98'), 
    array('lastmod'=> date("Y-m-d"),'loc' => $this->view->serverUrl().$publicpath ."/useful links",'changefreq' =>'daily','priority' =>'0.98')   
    ); 
    $this->_url($xml,$masterRoot,$data); 
    $output = $xml->saveXML(); 

    $xml->save($this->view->serverUrl() . "/sitemap.xml"); 

    // Both layout and view renderer should be disabled 
    Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setNoRender(true); 
    Zend_Layout::getMvcInstance()->disableLayout(); 

    // Setting up headers and body 
    $this->_response->setHeader('Content-Type', 'text/xml; charset=utf-8')->setBody($output); 
} 

protected function _url($xml,$masterRoot,$allData) 
{ 
    foreach($allData as $data) 
    { 
      // <url> 
       $root = $xml->createElement('url'); 
       $masterRoot->appendChild($root); 
      //<loc>http://www.example.com/</loc> 
       $elem = $xml->createElement('loc'); 
       $root->appendChild($elem); 
       $elemtext = $xml->createTextNode($data['loc']); 
       $elem->appendChild($elemtext); 
      //<lastmod>2005-01-01</lastmod> 
       $elem = $xml->createElement('lastmod'); 
       $root->appendChild($elem); 
       $elemtext = $xml->createTextNode($data['lastmod']); 
       $elem->appendChild($elemtext); 
      //<changefreq>monthly</changefreq> 
       $elem = $xml->createElement('changefreq'); 
       $root->appendChild($elem); 
       $elemtext = $xml->createTextNode($data['changefreq']); 
       $elem->appendChild($elemtext); 
      //<priority>0.8</priority> 
       $elem = $xml->createElement('priority'); 
       $root->appendChild($elem); 
       $elemtext = $xml->createTextNode($data['priority']); 
       $elem->appendChild($elemtext); 

    } 

} 

这两个功能是在控制器类

+0

只是猜测。文件权限问题..也是什么'$ this-> view-> serverUrl()' – Vytautas

+0

也许你的文件路径不可写? – slash197

回答

0
$xml->save($this->view->serverUrl() . "/sitemap.xml"); 

您正试图保存到一个完整的HTTP URL。除非你的服务器支持PUT方法上传(我怀疑,这是一件好事),这是行不通的。

DOMDocument::saveXML()需要本地文件系统路径。既然你似乎想要把它保存在您的文档根目录下,我怀疑这只是:

$xml->save("sitemap.xml"); 

...将做的工作。

1

什么返回

$this->view->serverUrl() 

我觉得这是像http://www.xxxx.xx,因为它返回一个URL。

这可能是问题吗?你需要像

$xml->save("foo.xml");