php抓取网页数据插入数据库(当做网站有一个站要用到WEB网页采集器功能,解决办法 )
优采云 发布时间: 2022-01-31 16:08php抓取网页数据插入数据库(当做网站有一个站要用到WEB网页采集器功能,解决办法
)
当网站有一个使用WEB页面采集器功能的站,当一个PHP脚本请求一个URL时,请求的网页可能会很慢,超过mysql的wait-timeout时间,那么,当检索网页内容,准备插入MySQL,发现与MySQL的连接因超时关闭,出现“MySQL server has gone away”等错误信息。解决这个问题,有以下两点,或许对大家有用:
1),第一种方法:
当然,它是为了增加你的等待超时值。这个参数是在f中设置的(windows下my.ini是down的),而我的数据库负载稍大,所以我设置为10,(这个值的单位是秒,意思是当一个数据库连接10秒内没有任何操作,会被强制关闭。我用的不是永久链接(mysql_pconnect),而是mysql_connect。可以在MySQL中查看这个wait-timeout的效果(show processlist),可以设置这个wait-timeout要大一点,比如300秒,呵呵,一般来说300秒就够了,其实你也可以不用设置,MySQL默认是8小时。这取决于您的服务器和站点。
2),第二种方法:
即检查MySQL的链接状态并使其重新链接。
可能大家都知道有mysql_ping这样的功能。很多资料中都说mysql_ping的API会检查数据库是否连接。如果断开了,它会尝试重新连接,但是在测试过程中,发现不是这样。有条件的一定要通过mysql_options C API传递相关参数,让MYSQL有断开自动链接的选项(MySQL默认不自动连接),测试发现PHP MySQL API没有携带这个功能,你重新编辑MySQL,呵呵。不过mysql_ping函数终于可以用了,不过里面有个小操作技巧:
这是数据库操作类中间的一个函数
function ping(){
if(!mysql_ping($this->link)){
mysql_close($this->link); //注意:一定要先执行数据库关闭,这是关键
$this->connect();
}
}
调用此函数的代码可能如下所示:
$str = file_get_contents('http://www.baidu.com');
$db->ping();//经过前面的网页抓取后,或者会导致数据库连接关闭,检查并重新连接
$db->query('select * from table');
ping()函数首先检测数据连接是否正常。如果关闭,则关闭当前脚本的整个 MYSQL 实例,然后重新连接。
经过这样的处理,可以非常有效地解决MySQL服务器已经消失的问题,并且不会对系统造成额外的开销。
以上内容希望对大家有所帮助。很多PHPer进阶的时候总会遇到一些问题和瓶颈。当他们编写太多业务代码时,他们没有方向感。我不知道从哪里开始改进。整理了一些资料,包括但不限于:分布式架构、高扩展性、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等。多个知识点的进阶、进阶干货,可以免费分享给大家。
PHP Advanced Architect >>> 免费获取视频和面试文件
或关注我们下面的 知乎 栏目
PHP神进阶