将PHP输出保存到静态文件的最佳方法是?

时间:2015-07-09 17:14:27

标签: php xml curl rss podcast

我有一个输出XML的PHP​​页面。但出于效率原因,最好是提供XML页面。对?

XML是播客RSS数据。 http://kansaspublicradio.org/widgets/podcasts/retro-cocktail-hour.php还有一个与其他节目类似的东西。 PHP代码从我们的CMS(drupal)收集数据并将其放入特定于itunes的XML标记中。我发现这是一个比任何可用的drupal模块更好的解决方案。

但是使用PHP文件提供XML有点不同寻常。并且PHP代码将在任何人或任何 thing 即itunes或feedburner的任何时候执行,以请求RSS数据。 PHP代码只是查询数据库,然后循环遍历结果以编写XML标记,但每次都会有固有的内存和sql性能。

所以我需要提供一个静态XML文件。如何将PHP的输出保存到文件??

我想我会创建另一个PHP脚本,比如makepodcast.php,它运行原始PHP页面,但将其输出到XML页面。然后我可以做一个每周做一次的cron工作(节目每周录制一次)。

但我失去的是我究竟如何保存PHP的输出并将其写入另一个文件?

2 个答案:

答案 0 :(得分:0)

  

但是使用PHP文件提供XML有点不同寻常。

这实际上非常传统。

  

任何人,或任何东西,例如itunes或feedburner,都会执行PHP代码,并提出RSS数据请求。

考虑缓存输出 - PHP APC可以非常方便,或者您可以使用file_get_contents / file_put_contents创建自己非常简单的基于文件的缓存

答案 1 :(得分:0)

你必须组织你的XML构建:每个时段,每个信号,每个事件? 完成后,您可以编写如下内容:

<?php
    header("Content-type: text/xml");

    define ('XML_FILE_PATH', 'CUSTOMIZE/YOUR/XML/FILE/PATH');

    if ($_MUST_BUILD_XML) {
        // put here your old PHP code that it will build your XML file 
        // i guess that it is something like $xml = '<xml>
        //                                              <videogame>
        //                                                  <ps4>The Best One :) </ps4>
        //                                              </videogame>'
        buildXmlFile('built_file.xml', $xml);
        print $xml;
    }
    else {
        print readXmlFile('built_file.xml'); 
    }

    /**
      * @return string : built XML data
      * @param string  : XML file path and name
      * @throws Exception
      */
    function buildXmlFile($data_s, $file_name_s) {
        $fp = fopen ("XML_FILE_PATH/" . $file_name_s , "w");
        if(!$fp) { 
            /*TODO Error*/ throw new Exception('...');
        }

        fputs($f, $data_s);
        fclose ($f);
    }

    /**
      * @param string  : XML file path and name
      * @return string : built XML data
      * @throws Exception
      */
    function readXmlFile($file_name_s) {
        $fp = fopen ("XML_FILE_PATH/" . $file_name_s , "r");
        if(!$fp) { 
            /*TODO Error*/ throw new Exception('...');
        }

        $contents = fread($fp, filesize("XML_FILE_PATH/" . $file_name_s);
        fclose ($f);
        return ($contents);
    }

希望帮助:)