In bulk data acquisition in PHP rarely use the file_get_contents function to operate, but if it is a small amount of we can use the file_get_contents function, because it is not only useful and easy to learn, let me introduce file_get_ Contents usage and problem solving in the process of use.
First look at the problem
File_get_contents cannot get URLs with ports
For example:
| The code is as follows |
Copy Code |
| file_get_contents (' http://localhost:12345 '); |
Without any access.
The workaround is: Turn off SELinux
1 Permanent method – Requires server restart
Modify the/etc/selinux/config file to set selinux=disabled, and then restart the server.
2 temporary methods – Set system parameters
Using the command Setenforce 0
Report:
Setenforce 1 setting SELinux to become enforcing mode
Setenforce 0 Setting SELinux to become permissive mode
File_get_contents Timeout
| The code is as follows |
Copy Code |
function _file_get_contents ($url) { $context = stream_context_create (Array ( ' http ' = = Array ( ' Timeout ' = 180//timeout time in seconds ) )); Return @file_get_contents ($url, 0, $context); } |
Okay, we can start collecting after the problem has been solved.
| The code is as follows |
Copy Code |
Nationwide, judging whether the $request_uri contains HTML if (!strpos ($_server["Request_uri"], ". html")) { $page = "http://qq.ip138.com/weather/"; $html = file_get_contents ($page, ' R '); $pattern = "/National major cities, counties and the next five days of weather trend forecast online query(.*?) /si "; The HTML between regular matches Preg_match ($pattern, $html, $PG); echo ""; Regular replace remote address to local address $p =preg_replace ('//weather/(w+)/index.htm/', ' tq.php/$1.html ', $PG [1]); Echo $p; } Province, the judge condition is $request_uri whether contain? else if (!strpos ($_server["Request_uri"], "?")) { Yoyo recommends using split to get data, here is the name of the province to get $province =explode ("/", $_server["Request_uri"]); $province =explode (".", $province [Count ($province)-1]); $province = $province [0]; I write my own regular notes, I feel bad, but the effect is equal to the above Preg_match ('/[^/]+[. ( html)]$/', $_server["Request_uri"], $pro); $province =preg_replace ('/.html/', ', $pro [0]); $page = "http://qq.ip138.com/weather/". $province. " /index.htm "; Try to open the page before getting the HTML data to prevent a malicious input address from causing an error if (! @fopen ($page, "R")) { Die ("Sorry, this address does not exist! Click here to return"); Exit (0); } $html = file_get_contents ($page, ' R '); $pattern = "/five-day weather trend forecast(.*?) Please input city/si "; Preg_match ($pattern, $html, $PG); echo ""; Regular replacement, get province, city $p =preg_replace ('//weather/(w+)/(w+). htm/', ' $2.html?pro=$1 ', $PG [1]); Echo $p; } else { City, pass the province through get $pro =$_request[' Pro ']; $city =explode ("/", $_server["Request_uri"]); $city =explode (".", $city [Count ($city)-1]); $city = $city [0]; Preg_match ('/[^/]+[. ( HTML)]+[?] /', $_server["Request_uri"], $cit); $city =preg_replace ('/.html?/', ', $cit [0]); $page = "http://qq.ip138.com/weather/". $pro. " /". $city.". HTM "; if (! @fopen ($page, "R")) { Die ("Sorry, this address does not exist! Click here to return"); Exit (0); } $html = file_get_contents ($page, ' R '); $pattern = "/five-day weather trend forecast(.*?) Please input city/si "; Preg_match ($pattern, $html, $PG); echo ""; Get the real picture address $p =preg_replace ('//image//', ' http://qq.ip138.com/image/', $PG [1]); Echo $p; } ?> |
If the above method cannot collect the data, we can use it to handle
| The code is as follows |
Copy Code |
$url = "http://www.bKjia.c0m"; $ch = Curl_init (); $timeout = 5; curl_setopt ($ch, Curlopt_url, $url); curl_setopt ($ch, Curlopt_returntransfer, 1); curl_setopt ($ch, Curlopt_connecttimeout, $timeout); Add the following two lines to the Web page that requires user detection curl_setopt ($ch, Curlopt_httpauth, Curlauth_any); curl_setopt ($ch, Curlopt_userpwd, Us_name. ":". US_PWD); $contents = curl_exec ($ch); Curl_close ($ch); Echo $contents; ?> |
http://www.bkjia.com/PHPjc/633074.html www.bkjia.com true http://www.bkjia.com/PHPjc/633074.html techarticle in bulk data acquisition in PHP rarely use the file_get_contents function to operate, but if it is a small amount we can use the file_get_contents function, because it is not only useful and ...