I recently encountered a scenario where one of my site’s login system stopped working. The piece of code that stopped working was the third-party login that leveraged GitHub for the authentication. It was one of those “it worked yesterday” moments for sure.
After some research, I discovered that GitHub had changed their API to make it mandatory to specify the user agent header for all of it’s API calls. This was all well and good and I hopped in to make the change only to realize that the code that was failing was using
file_get_contents() and well, it worked fine for a quick GET of the URL in the past but I had never used it in conjunction of HTTP headers, that’s typically where I’d use cURL.
I didn’t necessary want to rewrite the code to use cURL so I went ahead and consulted the PHP documentation for
file_get_contents() only to discover that you can pass in a custom stream context to set the header’s you’d like to be passed along. It adds a few more lines of code (it could easily be done in one long line if so inclined) and got the job done in resolving my issue.
So that got everything up and running again but it begged the question, what about error handling? As it turns out
file_get_contents() simply returns
false when it fails. That by itself can prove problematic if you forget to use check for equality (
===) but by design the function lacks error reporting. Although using the context fixed the issue I will still be going back and rewriting the code to use cURL so that I can have better error handling in the future thanks to