Suppressing an error with fopen() will still log that error in the logs, won't it? If you are following the recommendation of throwing errors as exceptions, then wrap a try...catch around your fopen().