php抓取网页数据插入数据库(web服务器可以用三种方法来利用PHP用作一个“外壳”)

优采云 发布时间: 2022-04-12 09:13

  php抓取网页数据插入数据库(web服务器可以用三种方法来利用PHP用作一个“外壳”)

  //------------------------------------------------ ----

  数据库永久连接

  持久数据库连接是脚本完成运行时未关闭的连接。收到永久连接请求时。PHP 将检查是否已经存在相同的持久连接(之前已经打开)。如果存在,则直接使用连接;如果它不存在,将建立一个新的连接。所谓“同”连接,是指用相同的用户名和密码连接到同一台主机。

  不完全了解 Web 服务器的工作和分配负载的读者可能会误解持久连接的作用。特别是,持久连接不提供在同一连接上建立“用户会话”的能力,也不提供有效建立事务的能力。事实上,严格来说,持久连接并没有提供非持久连接所不能提供的任何特殊功能。

  为什么?

  这与 Web 服务器的工作方式有关。Web 服务器可以使用 PHP 以三种方式生成网页。

  第一种方法是使用 PHP 作为“外壳”。以这种方式运行,PHP 会为向 Web 服务器发出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程在每个请求结束时结束,因此在该线程中使用的任何资源(例如与 SQL 数据库服务器的连接)都将在线程结束时关闭。在这种情况下,使用永久连接不会改变任何东西——因为它们根本不是永久的。

  第二种也是最常见的方法是使用 PHP 作为多进程 Web 服务器的模块,目前仅适用于 Apache。对于多进程服务器来说,典型的特点是有一个父进程和一组子进程协同运行,而真正生成网页的是子进程。每当客户端向父进程发出请求时,该请求就会被传递给未被其他客户端请求占用的子进程。这意味着当同一个客户端向服务器发出第二个请求时,它很可能由不同的子进程处理。开启持久连接后,后续所有请求SQL服务的页面都可以复用已建立的SQLServer连接。

  最后一种方法是使用 PHP 作为多线程 Web 服务器的插件。目前 PHP4 已经支持 ISAPI、WSAPI 和 NSAPI(在 Windows 环境下),这使得 PHP 可以作为 NetscapeFastTrack (iPlanet)、微软的 Internet Information Server (IIS) 和 O'Reilly's 等多线程 Web 服务器的插件使用。网站专业版。持久连接的行为本质上与前面描述的多进程模型相同。请注意,PHP3 不支持 SAPI。

  如果没有任何附加功能,使用永久连接有什么好处?

  答案很简单——效率。当客户端对 SQL 服务器的连接请求非常频繁时,持久连接更有效。频繁连接请求的标准取决于许多因素。比如数据库的种类,数据库服务和web服务是否在同一台服务器上,SQL服务器如何加载负载等等。但我们至少知道,当连接请求非常频繁时,永久连接会显着提高效率。它允许每个子进程在其生命周期中只进行一次连接操作,而不是每次处理一个页面时都向 SQL 服务器发出连接请求。这意味着每个子进程都将建立自己独立的与服务器的永久连接。例如,

  注意,如果永久连接的子进程数超过设置的数据库连接限制,系统会出现一些缺陷。如果数据库有 16 个同时连接的限制,并且在会话繁忙的情况下,有 17 个线程正在尝试连接,那么一个线程将无法连接。如果此时脚本中出现阻止连接关闭的错误(例如无限循环),那么数据库的 16 个连接将很快受到影响。有关如何处理废弃和空闲连接的信息,请查阅您正在使用的数据库的文档。

  警告

  使用持久连接时需要注意一些特殊问题。例如,在永久连接中使用数据表锁时,如果脚本因任何原因无法释放数据表锁,后续使用同一连接的脚本将被永久阻塞,需要重启httpd服务或数据库服务. 此外,在使用事务时,如果脚本在事务阻塞发生之前结束,阻塞也会影响使用同一连接的下一个脚本。在任何情况下,都可以使用 register_shutdown_function() 函数注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的是,不要在使用表锁或事务的脚本中使用持久连接,

  以下是重要的总结。永久连接旨在建立公共连接的*敏*感*词*分布。这意味着必须能够保证在用非持久连接替换持久连接时脚本的行为不会改变。使用永久连接(非常)可能会改变脚本的效率,但不会改变它的行为!

  请参阅 fbsql_pconnect()、ibase_pconnect()、ifx_pconnect()、ingres_pconnect()、msql_pconnect()、mssql_pconnect()、mysql_pconnect()、ociplogon()、odbc_pconnect()、ora_plogon()、pfsockopen()、pg_pconnect() 和sybase_pconnect ( )。

  //------------------------------------------------ --------------------------------

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线