I've got PHP5.2 currently. I ultimately want to use json_decode
, to parse the contents of a JSON file obtained via HTTP request.
json_decode
requires the JSON to be in a string and passed as a parameter, so I'm reading in the file to a string via file_get_contents
.
Think of it as:
$JSON = file_get_contents($URL);
Where $JSON
is the storage string for the file contents, and $URL
is the target URL to fetch the file via HTTP request. Regarding file_get_contents
the PHP manual states:
The function returns the read data or FALSE on failure.
As far as failure goes, I'm assuming this returns FALSE
on either a timeout (could not reach server at $URL
), a 404
(reached server, but file did not exist at $URL
), a 503
(reached server, but was too busy to respond properly), or a 500
(internal server error, generally shouldn't happen).
Anyways, of the errors above I'm most concerned with the 503
, the server I am hitting occasionally throws this on HTTP request. When this happens, I want to try again.
So I came up with this:
$JSON = null; //Initially set to null as we have not fetched it
for($attempt = 0; $attempt < 3; $attempt++) //Try 3 times to fetch it
if($JSON = file_get_contents($URL)) break; //If we fetch it, stop trying to
//Kill the script if we couldn't fetch it within 3 tries
if($JSON == null) die("Could not get JSON file");
This sort of does the job, but I don't think it's very solid. I was reading more about the contexts, but I don't fully follow how to use them in PHP. Is there some way I can handle this type of thing in a much better way?