⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 feedcreator.php

📁 Joomla!是一套获得过多个奖项的内容管理系统(Content Management System, CMS)。Joomla!采用PHP+MySQL数据库开发
💻 PHP
📖 第 1 页 / 共 4 页
字号:
			case "PODCAST":				$this->_feed = new RSSCreatorPodcast();				break;			case "2.0":				// fall through			case "RSS2.0":				$this->_feed = new RSSCreator20();				break;			case "1.0":				// fall through			case "RSS1.0":				$this->_feed = new RSSCreator10();				break;			case "0.91":				// fall through			case "RSS0.91":				$this->_feed = new RSSCreator091();				break;			case "PIE0.1":				$this->_feed = new PIECreator01();				break;			case "MBOX":				$this->_feed = new MBOXCreator();				break;			case "OPML":				$this->_feed = new OPMLCreator();				break;			case "ATOM":				// fall through: always the latest ATOM version			case "ATOM1.0":				$this->_feed = new AtomCreator10();				break;			case "ATOM0.3":				$this->_feed = new AtomCreator03();				break;			case "HTML":				$this->_feed = new HTMLCreator();				break;			case "JS":				// fall through			case "JAVASCRIPT":				$this->_feed = new JSCreator();				break;			default:				$this->_feed = new RSSCreator091();				break;		}		$vars = get_object_vars($this);		foreach ($vars as $key => $value) {			// prevent overwriting of properties "contentType", "encoding"; do not copy "_feed" itself			if (!in_array($key, array("_feed", "contentType", "encoding"))) {				$this->_feed->{$key} = $this->{$key};			}		}	}	/**	 * Creates a syndication feed based on the items previously added.	 *	 * @see		FeedCreator::addItem()	 * @param	string	format	format the feed should comply to. Valid values are:	 *			"PIE0.1", "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3", "HTML", "JS"	 * @return	string	the contents of the feed.	 */	function createFeed($format = "RSS0.91") {		$this->_setFormat($format);		return $this->_feed->createFeed();	}	/**	 * Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect	 * header may be sent to redirect the use to the newly created file.	 * @since 1.4	 *	 * @param	string	format	format the feed should comply to. Valid values are:	 *			"PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM", "ATOM0.3", "HTML", "JS"	 * @param	string	filename	optional	the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).	 * @param	boolean	displayContents	optional	send the content of the file or not. If true, the file will be sent in the body of the response.	 */	function saveFeed($format="RSS0.91", $filename="", $displayContents=true) {		$this->_setFormat($format);		$this->_feed->saveFeed($filename, $displayContents);	}	/**	* Turns on caching and checks if there is a recent version of this feed in the cache.	* If there is, an HTTP redirect header is sent.	* To effectively use caching, you should create the FeedCreator object and call this method	* before anything else, especially before you do the time consuming task to build the feed	* (web fetching, for example).	*	* @param   string   format   format the feed should comply to. Valid values are:	*	   "PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".	* @param filename   string   optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).	* @param timeout int	  optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)	*/   function useCached($format="RSS0.91", $filename="", $timeout=3600) {	  $this->_setFormat($format);	  $this->_feed->useCached($filename, $timeout);   }	/**	* Outputs feed to the browser - needed for on-the-fly feed generation (like it is done in WordPress, etc.)	*	* @param	format	string	format the feed should comply to. Valid values are:    * 							"PIE0.1" (deprecated), "mbox", "RSS0.91", "RSS1.0", "RSS2.0", "OPML", "ATOM0.3".	*/   function outputFeed($format='RSS0.91') {		$this->_setFormat($format);		$this->_setMIME($format);		$this->_feed->outputFeed();   }}/** * FeedCreator is the abstract base implementation for concrete * implementations that implement a specific format of syndication. * * @abstract * @author Kai Blankenhorn <kaib@bitfolge.de> * @since 1.4 */class FeedCreator extends HtmlDescribable {	/**	 * Mandatory attributes of a feed.	 */	var $title, $description, $link;	/**	 * Optional attributes of a feed.	 */	var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays, $podcast;	/**	* The url of the external xsl stylesheet used to format the naked rss feed.	* Ignored in the output when empty.	*/	var $xslStyleSheet = "";	/**	 * @access private	 */	var $items = Array();	/**	 * This feed's MIME content type.	 * @since 1.4	 * @access private	 */	var $contentType = "application/xml";	/**	 * This feed's character encoding.	 * @since 1.6.1	 **/	var $encoding = "UTF-8";	/**	 * Any additional elements to include as an assiciated array. All $key => $value pairs	 * will be included unencoded in the feed in the form	 *	 <$key>$value</$key>	 * Again: No encoding will be used! This means you can invalidate or enhance the feed	 * if $value contains markup. This may be abused to embed tags not implemented by	 * the FeedCreator class used.	 */	var $additionalElements = Array();	/**	 * Any additional markup to include as a string.  This can be used in places where	 * $additionalElements isn't sufficient (for example, if you need to add elements with	 * attributes, eg: <element attribute="value" />).	 * @since 1.7.3	 */	 var $additionalMarkup = "";	/**	 * Determines whether or not error messages are displayed by this class.	 * @since 1.7.3	 **/	var $verbose = true;	/**	 * Specifies the generator of the feed.	 * @since 1.7.3	 **/	var $generator = FEEDCREATOR_VERSION;	/**	 * Adds an FeedItem to the feed.	 *	 * @param object FeedItem $item The FeedItem to add to the feed.	 * @access public	 */	function addItem($item) {		$this->items[] = $item;	}	/**	 * Truncates a string to a certain length at the most sensible point.	 * First, if there's a '.' character near the end of the string, the string is truncated after this character.	 * If there is no '.', the string is truncated after the last ' ' character.	 * If the string is truncated, " ..." is appended.	 * If the string is already shorter than $length, it is returned unchanged.	 *	 * @static	 * @param string	string A string to be truncated.	 * @param int		length the maximum length the string should be truncated to	 * @return string	the truncated string	 */	function iTrunc($string, $length) {		if (strlen($string)<=$length) {			return $string;		}		$pos = strrpos($string,".");		if ($pos>=$length-4) {			$string = substr($string,0,$length-4);			$pos = strrpos($string,".");		}		if ($pos>=$length*0.4) {			return substr($string,0,$pos+1)." ...";		}		$pos = strrpos($string," ");		if ($pos>=$length-4) {			$string = substr($string,0,$length-4);			$pos = strrpos($string," ");		}		if ($pos>=$length*0.4) {			return substr($string,0,$pos)." ...";		}		return substr($string,0,$length-4)." ...";	}	/**	 * Creates a comment indicating the generator of this feed.	 * The format of this comment seems to be recognized by	 * Syndic8.com.	 */	function _createGeneratorComment() {		return "<!-- generator=\"".$this->generator."\" -->\n";	}	/**	 * Creates a string containing all additional elements specified in	 * $additionalElements.	 * @param	elements	array	an associative array containing key => value pairs	 * @param indentString	string	a string that will be inserted before every generated line	 * @return	string	the XML tags corresponding to $additionalElements	 */	function _createAdditionalElements($elements, $indentString="") {		$ae = "";		if (is_array($elements)) {			foreach($elements AS $key => $value) {				$ae.= $indentString."<$key>$value</$key>\n";			}		}		return $ae;	}	function _createStylesheetReferences() {		$xml = "";		if ($this->cssStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->cssStyleSheet."\" type=\"text/css\"?>\n";		if ($this->xslStyleSheet) $xml .= "<?xml-stylesheet href=\"".$this->xslStyleSheet."\" type=\"text/xsl\"?>\n";		return $xml;	}	/**	 * Builds the feed's text.	 * @abstract	 * @return	string	the feed's complete text	 */	function createFeed() {	}	/**	 * Generate a filename for the feed cache file. The result will be $_SERVER["PHP_SELF"] with the extension changed to .xml.	 * For example:	 *	 * echo $_SERVER["PHP_SELF"]."\n";	 * echo FeedCreator::_generateFilename();	 *	 * would produce:	 *	 * /rss/latestnews.php	 * latestnews.xml	 *	 * @return string the feed cache filename	 * @since 1.4	 * @access private	 */	function _generateFilename() {		$fileInfo = pathinfo($_SERVER["PHP_SELF"]);		return substr($fileInfo["basename"],0,-(strlen($fileInfo["extension"])+1)).".xml";	}	/**	 * @since 1.4	 * @access private	 */	function _redirect($filename) {		// attention, heavily-commented-out-area		// maybe use this in addition to file time checking		//Header("Expires: ".date("r",time()+$this->_timeout));		/* no caching at all, doesn't seem to work as good:		Header("Cache-Control: no-cache");		Header("Pragma: no-cache");		*/		// HTTP redirect, some feed readers' simple HTTP implementations don't follow it		//Header("Location: ".$filename);		Header("Content-Type: ".$this->contentType."; charset=".$this->encoding."; filename=".basename($filename));		Header("Content-Disposition: inline; filename=".basename($filename));		readfile($filename, "r");		die();	}	/**	 * Turns on caching and checks if there is a recent version of this feed in the cache.	 * If there is, an HTTP redirect header is sent.	 * To effectively use caching, you should create the FeedCreator object and call this method	 * before anything else, especially before you do the time consuming task to build the feed	 * (web fetching, for example).	 * @since 1.4	 * @param filename	string	optional	the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).	 * @param timeout	int		optional	the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)	 */	function useCached($filename="", $timeout=3600) {		$this->_timeout = $timeout;		if ($filename=="") {			$filename = $this->_generateFilename();		}		if (file_exists($filename) AND (time()-filemtime($filename) < $timeout)) {			$this->_redirect($filename);		}	}	/**	 * Saves this feed as a file on the local disk. After the file is saved, a redirect	 * header may be sent to redirect the user to the newly created file.	 * @since 1.4	 *	 * @param filename	string	optional	the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER["PHP_SELF"] with the extension changed to .xml (see _generateFilename()).	 * @param redirect	boolean	optional	send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.	 */	function saveFeed($filename="", $displayContents=true) {		if ($filename=="") {			$filename = $this->_generateFilename();		}		$feedFile = fopen($filename, "w+");		if ($feedFile) {			fputs($feedFile,$this->createFeed());			fclose($feedFile);			if ($displayContents) {				$this->_redirect($filename);			}			return true;		} else {			echo "<br /><b>Error creating feed file, please check write permissions.</b><br />";		}	}	/**	 * Outputs this feed directly to the browser - for on-the-fly feed generation	 * @since 1.7.2-mod	 *	 * still missing: proper header output - currently you have to add it manually	 */	function outputFeed() {		echo $this->createFeed();	}}/** * FeedDate is an internal class that stores a date for a feed or feed item. * Usually, you won't need to use this. */class FeedDate {	var $unix;	/**	 * Creates a new instance of FeedDate representing a given date.	 * Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.	 * @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.	 */	function FeedDate($dateString="") {		if ($dateString=="") $dateString = date("r");		if (is_numeric($dateString)) {			$this->unix = $dateString;			return;		}		if (preg_match("~(?:(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s+)?(\\d{1,2})\\s+([a-zA-Z]{3})\\s+(\\d{4})\\s+(\\d{2}):(\\d{2}):(\\d{2})\\s+(.*)~",$dateString,$matches)) {			$months = Array("Jan"=>1,"Feb"=>2,"Mar"=>3,"Apr"=>4,"May"=>5,"Jun"=>6,"Jul"=>7,"Aug"=>8,"Sep"=>9,"Oct"=>10,"Nov"=>11,"Dec"=>12);			$this->unix = mktime($matches[4],$matches[5],$matches[6],$months[$matches[2]],$matches[1],$matches[3]);			if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {				$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;			} else {				if (strlen($matches[7])==1) {					$oneHour = 3600;					$ord = ord($matches[7]);					if ($ord < ord("M")) {						$tzOffset = (ord("A") - $ord - 1) * $oneHour;					} elseif ($ord >= ord("M") AND $matches[7]!="Z") {						$tzOffset = ($ord - ord("M")) * $oneHour;					} elseif ($matches[7]=="Z") {						$tzOffset = 0;					}				}				switch ($matches[7]) {					case "UT":					case "GMT":	$tzOffset = 0;				}			}			$this->unix += $tzOffset;			return;		}		if (preg_match("~(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(.*)~",$dateString,$matches)) {			$this->unix = mktime($matches[4],$matches[5],$matches[6],$matches[2],$matches[3],$matches[1]);			if (substr($matches[7],0,1)=='+' OR substr($matches[7],0,1)=='-') {				$tzOffset = (substr($matches[7],0,3) * 60 + substr($matches[7],-2)) * 60;			} else {				if ($matches[7]=="Z") {					$tzOffset = 0;				}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -