2012-05-21 4 views
0

это мой код. но я не знаю, почему этот код не может создать xml-файл и не показывать никаких ошибок!сохранить файл xml на zend

он показывает результат 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); 

    } 

} 

этих 2-х функций в классе контроллера

+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");