利用PHP V5开发多任务应用程序(2)_PHP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:详细解析 PHP 向 MySQL 发送数据过程
下面的一段代码是一个很简单的 HTML 表单: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir

只粗略地涉及 PHP 的第三个并发实例是 PHP/TK。PHP/TK 是 PHP 的扩展,用于为核心 PHP 提供可移植图形用户界面(GUI)绑定。PHP/TK 允许用 PHP 编写代码构造桌面 GUI 应用程序。其基于事件的特性将模拟一种易于掌握并且比线程更少出错的并发形式。此外,并发是 “继承” 自一项辅助技术,而不是 PHP 的基本功能。

向 PHP 本身添加线程支持的试验已经做过多次。据我所知,没有一次是成功的。但是,Ajax 框架和 PHP/TK 的面向事件的实现表明事件可能比线程能更好地体现 PHP 的并发。PHP V5 证明事实确实如此。

PHP V5 将提供 stream_select()

使用标准的 PHP V4 和更低版本,必须按顺序执行 PHP 应用程序的所有工作。例如,如果程序需要在两个商业站点检索商品的价格,则请求第一个站点的价格,等待至响应到达,再请求第二个站点的价格,然后再次等待。

如果程序请求同时完成若干项任务会怎么样?总体来看,程序将在一段时间内完成,在这段时间内,将始终进行连续处理。

第一个示例

新的 stream_select 函数及它的几个助手使这成为可能。请考虑以下示例。

清单 1. 同时请求多个 HTTP 页面

<?php
echo "Program starts at ". date('h:i:s') . ".
";
$timeout=10;
$result=array();
$sockets=array();
$convenient_read_block=8192;
/* Issue all requests simultaneously; there's no blocking. */
$delay=15;
$id=0;
while ($delay > 0) {
  $s=stream_socket_client("phaseit.net:80", $errno,
$errstr, $timeout,
STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
  if ($s) {
$sockets[$id ]=$s;
$http_message="GET /demonstration/delay?delay=" .
  $delay . " HTTP/1.0
Host: phaseit.net
";
fwrite($s, $http_message);
  } else {
echo "Stream " . $id . " failed to open correctly.";
  }
  $delay -= 3;
}
while (count($sockets)) {
  $read=$sockets;
  stream_select($read, $w=null, $e=null, $timeout);
  if (count($read)) {
/* stream_select generally shuffles $read, so we need to
compute from which socket(s) we're reading. */
foreach ($read as $r) {
  $id=array_search($r, $sockets);
  $data=fread($r, $convenient_read_block);
  /* A socket is readable either because it has
  data to read, OR because it's at EOF. */
  if (strlen($data) == 0) {
echo "Stream " . $id . " closes at " . date('h:i:s') . ".
";
fclose($r);
unset($sockets[$id]);
  } else {
$result[$id] .= $data;
  }
}
  } else {
/* A time-out means that *all* streams have failed
to receive a response. */
echo "Time-out!
";
break;
  }
}
?>

分享:PHP实现静态发布的方法浅谈
如今很多网站都是静态发布的,PHP当然也可以方便的实现静态发布喽,具体的实现方法很多,下面我就说说我会的两种方法。 方法一:ob_get_contents() 这是一种很方便的方法,也是很常用的方法

来源:模板无忧//所属分类:PHP教程/更新时间:2008-08-22
相关PHP教程