我有一个输出XML的PHP页面。但是出于效率的考虑,最好还是提供XML页面。对吧?
XML是podcast RSS数据。http://kansaspublicradio.org/widgets/podcasts/retro-cocktail-hour.php在不同的节目中还有一个类似的。PHP代码从CMS (drupal)收集数据,并将其放入itunes特定的XML标记中。我发现这是一个比任何可用的drupal模块更好的解决方案。
但是用PHP文件提供XML有点不合常规。PHP代码将在任何时候执行任何人,或任何的东西即itunes或feedburner,使RSS数据的请求。PHP代码只是查询数据库,然后循环遍历结果以编写XML标记,但是每次仍然存在固有的内存和sql性能问题。
所以我需要提供一个静态XML文件。如何将PHP的输出保存到文件中??
我想我将创建另一个PHP脚本,如makepodcast.php,它运行原始PHP页面,但将其输出打印到XML页面。然后我可以做一个cron工作,每周这样做一次(节目每周录制一次)。
但是我丢失的是我到底如何保存PHP的输出并将其写入另一个文件??
您必须组织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);
}
希望对你有帮助。
但是用PHP文件提供XML有点不合常规。
这是非常传统的。
并且PHP代码将在任何时候执行任何人,或任何东西,如itunes或feedburner,使RSS数据的请求。
考虑缓存输出- PHP的APC非常方便,或者您可以使用file_get_contents
/file_put_contents
来创建您自己的非常简单的基于文件的缓存