Home > Article > Backend Development > Perfect solution to failed to open stream: HTTP request failed!_PHP tutorial
When using the file_get_contents method that comes with php5 to obtain remote files, sometimes the warning message file_get_contents(): failed to open stream: HTTP request failed! will appear.
Google or Baidu, there are many such problems, the solution is to modify php.ini, enable allow_url_fopen, change it to allow_url_fopen = On
This can solve some people’s problems. Some people say that in php.ini, there are two options: allow_url_fopen =on (indicating that remote files can be opened through url), user_agent="PHP" (indicates which The script accesses the network. By default, remove the " ; " in front of it. Just restart the server.
But some people still have this warning message. There is still one step left to achieve a perfect solution. You have to set the user_agent in php.ini. The default user_agent in php is PHP. We change it to Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) to simulate the browser
user_agent=”Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)”
I encountered this problem at work and solved it perfectly, so I share it with everyone.
I grabbed the structural formula of chemblink in batches and found that some pictures could not be displayed after the loop, but the remote files existed.
When grabbing remote files, a warning message similar to Warning: readfile(http://www.BkJia.com/logo.gif) [function.readfile]: failed to open stream: HTTP request failed! appears. I am using
ob_start();
readfile("http://www.BkJia.com/logo.gif");
$img = ob_get_contents();
ob_end_clean();
In this way, the above error will appear from time to time during operation. I also changed other functions such as file_get_contents, but it didn't work. After checking on the Internet, I found that using the CURL method to capture will not cause errors
$url = "http://www.BkJia.com/logo.gif";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,10);
$img = curl_exec($ch);