Page 1 of 1

Having issues loading urlencoded xml files with simplexml...

Posted: Wed Feb 02, 2011 4:02 pm
by phpFTW
Hello fellow developers,

Let me start by saying I'm still a PHP noob so please don't go too hard on me if I my code reflects this noobishness...

So I'm trying to build a (very) simple RSS reader using jQuery and PHP. When the user clicks on an option from a dropdown, an AJAX call is made and passes the url selected from the list to a PHP script.

The PHP script then loads the appropriate xml file from an 'xmlcache' folder. Everything is working just fine for files named as such:

somefilename_1231231231.xml

The problem is that I need it to be able to load files which have been urlencoded such as:

http%3A%2F%2Ffeeds.feedburner.com%2Fajaxian_1235523548

In case you're wondering, the numbers at the end are a timestamp which will determine if the reader will load a cached copy of the desired xml file (if it's less than an hour old) or if it needs to get a fresh version (this part of the code is not written yet). Here is a look at my script thus far:

Code: Select all

<?php

$url = "./xmlcache/" . urlencode($_REQUEST['url']); //access url from AJAX call
echo $url; //outputs -> "./xmlcache/http%3A%2F%2Ffeeds.feedburner.com%2Fajaxian_1235523548.xml", which is the same as the file's name
$curTime = time();
$urlParts = explode('_', $url);
$urlTime = intval($urlParts[1]);
$diff = $curTime - $urlTime;
$urlAge = 60 * 60; //60sec * 60min = 3600sec or 1 hour

if(file_exists($url)){
	if($diff > $urlAge){ //the > will be switched to < to make logical sense once testing is done.
		$xml = simplexml_load_file($url);
		
		//ROOT TAG
		foreach($xml as $key0 => $value){
			echo "$key0: $value";
			foreach($value->attributes() as $attributeskey0 => $attributesvalue1){
			echo "$attributeskey0: $attributesvalue1";
			}
			echo "<br />";
			
			//1 LEVEL BELOW ROOT TAG
			foreach($value as $key => $value2){
				echo "$key: $value2";
				foreach($value2->attributes() as $attributeskey => $attributesvalue2){
					echo "$attributeskey = $attributesvalue2";
				}
				echo '<br />';
				
				//2 LEVELS BELOW ROOT TAG
				foreach($value2 as $key2 => $value3){
					echo "$key2: $value3";
					foreach($value3->attributes() as $attributeskey2 => $attributesvalue3){
						echo "$attributeskey2 = $attributesvalue3";
					}
					echo '<br />';
					//3 LEVELS BELOW ROOT TAG
					foreach($value3 as $key3 => $value4){
						echo "$key3: $value4";
						foreach($value4->attributes() as $attributeskey3 => $attributesvalue4){
						echo "$attributeskey3 = $attributesvalue4";
						}
						echo '<br />';
						//4 LEVELS BELOW ROOT TAG
						foreach($value4 as $key4 => $value5){
							echo "$key4: $value5";
							foreach($value5->attributes() as $attributeskey4 => $attributesvalue5){
								echo "$attributeskey4 = $attributesvalue5";
							}
							echo '<br />';
							//5 LEVELS BELOW ROOT TAG
							foreach($value5 as $key5 => $value6){
								echo "$key5: $value6";
								foreach($value6->attributes() as $attributeskey5 => $attributesvalue6){
									echo "$attributeskey5 = $attributesvalue6";
								}
								echo '<br />';
							}
						}
					}
				}
				echo '<br />';
			}
			echo '<br />';
		}

	}else{
		//need to create the XML file from scratch, do a curl function, or read from a text file
		echo "need a new version";
		//@unlink("$url);
	}
	
}else{
	echo "That file does not exist.<br/>";
}

?>
The error message I'm getting is this:

Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "./xmlcache/http%3A%2F%2Ffeeds.feedburner.com%2Fajaxian_1235523548.xml" in C:\wamp\www\reader\loadfeed.php on line 13

Warning: Invalid argument supplied for foreach() in C:\wamp\www\reader\loadfeed.php on line 16

The second error is obviously thrown because the file doesn't get loaded.

I appreciate any help you gurus have to offer, and if you have any suggestions for the best way to load a fresh version that will be handled by the first else statement, I'm all ears.

Thanks guys!

Re: Having issues loading urlencoded xml files with simplexm

Posted: Wed Feb 02, 2011 4:12 pm
by Jade

Re: Having issues loading urlencoded xml files with simplexm

Posted: Wed Feb 02, 2011 4:25 pm
by phpFTW
Thank you for the reply, however, it doesn't help me much. I'm a noob, remember? ;p Where am I insert the urldecode function?

Since the filename is urlencoded, I have to attempt to load it using the same string, no? It's entirely possible that this concept is just flying right over my head but if I changed this:

$xml = simplexml_load_file($url);

to

$xml = simplexml_load_file(urldecode($url));

then I'm just undoing what I did earlier when I urlencoded it... the url of the file I'm trying to load becomes very different from the url of the file on disk so it obviously will not load.

Any further help is appreciated.