0

これは私のコードです。しかし、なぜこのコードが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);

    }

}

これらの2つの関数はコントローラークラスにあります

4

2 に答える 2

1

何を返すか

$this->view->serverUrl()

URLを返すので、http://www.xxxx.xxのようなものだと思います。

これはおそらく問題ですか?次のようなものが必要です

$xml->save("foo.xml");
于 2012-05-21T11:10:50.453 に答える
0
$xml->save($this->view->serverUrl() . "/sitemap.xml");

完全な HTTP URL に保存しようとしています。サーバーがPUTメソッドのアップロードをサポートしていない限り (これは疑問ですが、それは良いことです)、これは機能しません。

DOMDocument::saveXML()ローカル ファイル システム パスが必要です。これをドキュメントルートに保存したいと思われるので、単純に次のように考えています。

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

...仕事をします。

于 2012-05-21T11:10:24.207 に答える