【问题】
写了几行PHP代码:
/** * add newline for print */ function printAutoNewline($contentToPrint) { print_r($contentToPrint."<br />"); } /** * get url reponse html */ function getUrlRespHtml($url) { printAutoNewline("input url=".$url); $respHtml = ""; //resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] ) $res = fsockopen($url); printAutoNewline($res); return $respHtml; } $yellEntryUrl = "http://www.yell.com/"; $yesllRespHtml = getUrlRespHtml($yellEntryUrl); printAutoNewline("yesllRespHtml=".$yesllRespHtml);
结果运行出错:
Warning: fsockopen() [function.fsockopen]: unable to connect to http://www.yell.com/:-1 (Unable to find the socket transport "http" – did you forget to enable it when you configured PHP?) in xxx.php on line 27 |
【解决过程】
1. 参考了:
fsock: Unable to find the socket transport “http”
看到其解释说fsockopen不支持Laye5+,所以不能直接给url地址,而只能给ip地址。
然后其建议用curl extension。
2.所以去找找php的curl extension。
然后找到:
好像是用其实现url的访问,很是麻烦,需要类似于这样的代码:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_NOBODY, TRUE); // remove body curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $head = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch);
3.重新参考官网的解释:
去把代码改改为:
$fp = fsockopen($url, 80);
结果还是同样错误:
Warning: fsockopen() [function.fsockopen]: unable to connect to http://www.yell.com/:80 (Unable to find the socket transport "http" – did you forget to enable it when you configured PHP?) in xxx.php on line 27 |
4.把代码改为:
$testHostname = "www.yell.com"; $fp = fsockopen($testHostname, 80);
然后就可以了。
然后可以看到打印输出了:
Resource id #2 |
【总结】
把对应的url地址:
改为
xxx.xxx.com
然后再去调用fsockopen,记得port设置为80(默认是-1),就可以正常访问了:
$testHostname = "www.yell.com"; $fp = fsockopen($testHostname, 80);
总之,使用fsockopen去获得网页内容,极其的不方便。还是尽量去想别的办法去获得网页内容吧。
转载请注明:在路上 » 【已解决】PHP代码运行出错:Warning: fsockopen() [function.fsockopen]: unable to connect to xxx:-1 (Unable to find the socket transport "http" – did you forget to enable it when you configured PHP?) in xxx.php on line xx