shoprex-icon-big

Shoprex

Entwickler Seite zum Wordpress Plugin Shoprex

PHP und WordPress: Erhalte XML Objekt von URL mit Cache und Backup Funktion, mit Prüfung ob URL erreichbar


GitHub Link: https://gist.github.com/shoprex

/*
* Erhalte XML Object von URL mit Cache und Backup Funktion
* @return object|false
*/
function get_xml_content_by_url( $url, $do_cache = true ) {

	if($do_cache)
		$transient_id = hash("crc32", $url); // Erzeugt eine eindeutige ID für die WordPress transient Funktion (z.B.: 37531356)
	else
		$transient_id = null;

	$sxi = false;

	if ( ! is_null( $transient_id ) ) {
		// Erhalte Daten vom Cache
		$sxi = get_transient( 'xml_url_get_' . $transient_id );
	}

	if ( $sxi === false ) {
		// Kein Cache verfügbar oder zu alt

		// Prüfe ob URL in gewünschter Zeit erreichbar
		$ch = curl_init();
		curl_setopt( $ch, CURLOPT_URL, $url );
		curl_setopt( $ch, CURLOPT_HEADER, true );
		curl_setopt( $ch, CURLOPT_NOBODY, true );
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
		curl_setopt( $ch, CURLOPT_TIMEOUT, 2 );             // Wartezeit in Sekunden
		$r = curl_exec( $ch );
		curl_close($ch);

		if ( $r == false ) {
			// URL in gewünschter Zeit nicht erreichbar

			// Erhalte Daten vom Backup
			if ( ! is_null( $transient_id ) ) {
				$sxi = get_transient( 'xml_url_get_backup_' . $transient_id  );
			}

			if ( $sxi === false ) {
				// Kein Backup verfügbar, gebe false zurück
				return false;
			} else {
				// Backup verfügbar, erstelle XML Objekt
				$sxi = simplexml_load_string( $sxi, 'SimpleXMLIterator' );
			}
		} else {
			// URL ist erreichbar

			// Erhalte die neuen Daten von URL (Erzeugt XML Objekt)
			$sxi = new SimpleXmlIterator( $url, null, true );

			// Frische Daten in Cache und Backup auf
			if ( ! is_null( $transient_id ) ) {
				set_transient( 'xml_url_get_' . $transient_id , $sxi->asXML(), 60 * 60 * 24 ); // Store 1 Day
				set_transient( 'xml_url_get_backup_' . $transient_id , $sxi->asXML(), 0 );  // Backup, store forever
			}
		}
	} else {
	// Cache ist verfügbar, erzeuge XML Objekt
		$sxi = simplexml_load_string( $sxi, 'SimpleXMLIterator' );
	}

	// Gebe Objekt zurück
	return $sxi;
}