file_get_contents 脚本适用于某些网站,但不适用于其他网站
我正在寻找构建一个 PHP 脚本来解析 HTML 中的特定标签。我一直在使用这个代码块,改编自此 教程:
<?php
$data = file_get_contents('http://www.google.com');
$regex = '/<title>(.+?)</';
preg_match($regex,$data,$match);
var_dump($match);
echo $match[1];
?>
该脚本适用于某些网站(例如上面的 google),但是当我在其他网站(例如,freshdirect)上尝试时,我收到此错误:
“警告: file_get_contents(http://www.freshdirect.com) [function.file-get-contents]: 未能打开流:HTTP 请求失败!”
我见过很多很棒的 StackOverflow 上的建议,例如在 php.ini 中启用 extension=php_openssl.dll
。但是 (1) 我的 php.ini 版本中没有 extension=php_openssl.dll
,并且 (2) 当我将其添加到扩展部分并重新启动 WAMP 服务器时,按照此 < a href="http://www.leoganda.net/how-to-enable-xampp-ssl-socket-transport/" rel="nofollow noreferrer">线程,仍然没有成功。
有人介意指出我正确的方向吗?非常感谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
它只需要一个用户代理(实际上“任何”,任何字符串就足够了):
请参阅 更多选项。
当然,你可以设置
user_agent
在你的 ini 中:...但我更喜欢对下一个从事该工作的程序员明确说明。
It just requires a user-agent ("any" really, any string suffices):
See more options.
Of course, you can set
user_agent
in your ini:... but I prefer to be explicit for the next programmer working on it.
或者,如果您更喜欢 preg_match 并且您应该真正使用 cURL 而不是 fgc...
Or if you prefer with preg_match and you should be really using cURL instead of fgc...
另一种选择:某些主机禁用
CURLOPT_FOLLOWLOCATION
因此递归就是您想要的,也会将任何错误记录到文本文件中。还有一个如何使用 DOMDocument() 提取内容的简单示例,显然它并不广泛,但您可以在其上构建应用程序。Another option: Some hosts disable
CURLOPT_FOLLOWLOCATION
so recursive is what you want, also will log into a text file any errors. Also a simple example of how to useDOMDocument()
to extract the content, obviously its not extensive but something you could build appon.