php 异步调用方法

2023-05-16

php 异步调用方法

客户端与服务器端是通过HTTP协议进行连接通讯,客户端发起请求,服务器端接收到请求后执行处理,并返回处理结果。

有时服务器需要执行很耗时的操作,这个操作的结果并不需要返回给客户端。但因为php是同步执行的,所以客户端需要等待服务处理完才可以进行下一步。


因此对于耗时的操作适合异步执行,服务器接收到请求后,处理完客户端需要的数据就返回,再异步在服务器执行耗时的操作。


1.使用Ajax 与 img 标记

原理,服务器返回的html中插入Ajax 代码或 img 标记,img的src为需要执行的程序。

优点:实现简单,服务端无需执行任何调用

缺点:在执行期间,浏览器会一直处于loading状态,因此这种方法并不算真正的异步调用。

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">


2.使用popen

使用popen执行命令,语法:

// popen — 打开进程文件指针 
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));
优点:执行速度快

缺点:1.只能在本机执行

           2.不能传递大量参数

           3.访问量高时会创建很多进程。

3.使用curl

设置curl的超时时间 CURLOPT_TIMEOUT 为1 (最小为1),因此客户端需要等待1秒

<?php
$ch = curl_init();
$curl_opt = array(
    CURLOPT_URL, 'http://www.example.com/doRequest.php'
    CURLOPT_RETURNTRANSFER,1,
    CURLOPT_TIMEOUT,1
);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
?>

4.使用fsockopen

fsockopen是最好的,缺点是需要自己拼接header部分。

<?php

$url = 'http://www.example.com/doRequest.php';
$param = array(
    'name'=>'fdipzone',
    'gender'=>'male',
    'age'=>30
);

doRequest($url, $param);

function doRequest($url, $param=array()){

    $urlinfo = parse_url($url);

    $host = $urlinfo['host'];
    $path = $urlinfo['path'];
    $query = isset($param)? http_build_query($param) : '';

    $port = 80;
    $errno = 0;
    $errstr = '';
    $timeout = 10;

    $fp = fsockopen($host, $port, $errno, $errstr, $timeout);

    $out = "POST ".$path." HTTP/1.1\r\n";
    $out .= "host:".$host."\r\n";
    $out .= "content-length:".strlen($query)."\r\n";
    $out .= "content-type:application/x-www-form-urlencoded\r\n";
    $out .= "connection:close\r\n\r\n";
    $out .= $query;

    fputs($fp, $out);
    fclose($fp);
}

?>
注意:当执行过程中,客户端连接断开或连接超时,都会有可能造成执行不完整,因此需要加上

ignore_user_abort(true); // 忽略客户端断开
set_time_limit(0);       // 设置执行不超时

Tips:关于fsockopen的介绍与用法可以参考我之前写的《php 利用fsockopen GET/POST 提交表单及上传文件》与《PHP HTTP请求类,支持GET,POST,Multipart/form-data》


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php 异步调用方法 的相关文章

  • Java:利用递归方法求鸭子数

    问题描述 xff1a 一个人赶着鸭子去每个村庄卖 xff0c 每经过一个村子卖去所赶鸭子的一半又一只 这样他经过了七个村子后还剩两只鸭子 xff0c 问他出发时共赶多少只鸭子 xff1f 经过每个村子卖出多少只鸭子 xff1f 题目分析 x
  • 登录授权验证之OAuth2.0

    实际应用项目 xff1a http github crmeb net u long 本文将从几个方面了解和学习使用OAuth2 0 对不对就不管了 xff0c 反正我也几乎不会用到 ps 有个项目用到了 xff0c 所以才会有本文 OAut
  • PostgreSQL的视图以及物化视图的特点

    1 视图 PostgreSQL视图其实和mysql视图是一样的 xff0c 视图其实是个虚拟的表 xff0c 实际上是一个SQL拼接而成的虚拟表 xff08 假表 xff09 xff0c 可能是有一个表或者多个表 视图关联而成的复杂的SQL
  • 尚硅谷---Vue3同步笔记

    一 初识Vue3 Vue3带来了什么 xff1f 1 性能上的提升 xff1a 更快 占用内存更少 2 源码的升级 xff1a 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree Shaking Tre
  • 移动mgv2000_JL代工_s905l2_MT7668_emmc_免拆卡刷固件包

    移动mgv2000 JL代工 s905l2 MT7668 emmc 免拆卡刷固件包 特点 xff1a 1 适用于卡刷 xff1b 2 开放原厂固件屏蔽的市场安装和u盘安装apk xff1b 3 修改dns xff0c 三网通用 xff1b
  • 魔百和CM311-1A_YST、(YM)_安卓9_S905L3A_默认开启ADB_纯净精简语音_完美线刷包

    魔百和CM311 1A YST YM 安卓9 S905L3A 默认开启ADB 纯净精简语音 完美线刷包 固件特点 xff1a 1 修改dns xff0c 三网通用 xff1b 2 开放原厂固件屏蔽的市场安装和u盘安装apk xff1b 3
  • C++11:变长模板的迭代与递归扩展

    迭代的运行效率始终强于递归 xff0c 递归始终比迭代方便开发 变长模板属于C 43 43 11中比较复杂的技术 xff0c 在此简单介绍下 include lt iostream gt using namespace std templa
  • 虚拟机Secure Boot安全启动

    概述 Secure Boot 作为 UEFI 的一个选项 xff0c 它可以被设置为开启或关闭 Secure Boot 所需要的公钥证书被保存在计算机的主板的 FLASH 里面 xff0c FLASH 里面保存着 PK xff0c KEK
  • 端口被占用的原因及解决办法

    运行软件或者项目的时候 xff0c 出现以下问题 xff1a panic blademaster listen tcp 0 0 0 0 8080 listen tcp 0 0 0 0 8080 bind An attempt was mad
  • Rust 学习,与 node.js 交互

    1 背景 近期 xff0c 参与了一个活动 xff1a 学 Rust xff0c 免费拿树莓派 主要内容为开发应用 xff0c 在 node js 中调用 Rust 函数 实际上我认为在很多地方都能用上 Rust xff0c 鉴于活动要求
  • Zeal--一款支持207个离线文档的浏览器

    小编作为一个全栈工程师 xff0c 每个语言都会一点 xff0c 在写前端和后端的时候 xff0c 时长会打开好几个开发文档 xff0c 比如java css html 等 xff0c 有没有打开一个软件 xff0c 就能打开所有的帮助文档
  • Linux之间图像界面的传输 ssh -X username@{remote ip}

    之前用windows平台连接Linux平台 xff0c 总是通过Xshell 43 Xming来传输Linux系统的界面 现在在linux系统平台下 xff0c 通过ssh连接另一个Linux系统 xff0c 如何将远程Linux的图形界面
  • 利用图片Etag判断用户

    原理 xff1a 不使用Javascript xff0c SESSION xff0c COOKIES xff0c FLASH 利用图片Etag识别用户 1 根据用户的 REMOTE ADDR 与 HTTP USER AGENT 生成唯一Et
  • 音视频基础知识---封装格式介绍

    音视频基础知识汇总 xff1a 音视频基础知识 协议相关RTSP RTMP HLS 音视频基础知识 封装格式 音视频基础知识 视频编码格式 音视频基础知识 音频编码格式 音视频基础知识 像素格式RGB 音视频基础知识 像素格式YUV 1 什
  • php output_buffering 缓存使用

    buffer是一个内存地址空间 xff0c linux系统默认大小一般为4096 4kb 主要用于存储速度不同步的设备或优先级不同的设备之间传递数据的区域 通过buffer可以使进程之间的相互等待变少 例如 xff0c 当你打开一个文本编辑
  • 同一域名对应不同IP,访问指定主机文件内容的方法

    PHP获取远程主机文件内容方法很多 xff0c 例如 xff1a file get contents xff0c fopen 等 lt php echo file get contents 39 http demo fdipzone com
  • php 实现BigPipe分块输出

    原理 xff1a 利用 ob flush 与 flush 将缓冲区的内容提前输出 xff0c 浏览器可提早加载这部分的内容 xff0c 无需等待所有输出完成再加载 将页面内容划分为一个个小块 xff0c 输出一个后再输出下一个 xff0c
  • php 利用fsockopen GET/POST 提交表单及上传文件

    php 利用 fsockopen GET POST 提交表单及上传文件 1 GET get php lt php host 61 39 demo fdipzone com 39 port 61 80 errno 61 39 39 errst
  • php 过滤html标记属性类

    php 过滤html标记属性类 HtmlAttributeFilter class php lt php HTML Attribute Filter Date 2013 09 22 Author fdipzone ver 1 0 Func
  • php HTTP请求类,支持GET,POST,Multipart/form-data

    PHP HTTP请求类 xff0c 支持GET POST Multipart form data HttpRequest class php lt php HttpRequest class HTTP请求类 xff0c 支持GET POST

随机推荐

  • HTTP 204 与 205 应用

    HTTP 204 no content 表示响应执行成功 xff0c 但没有数据返回 xff0c 浏览器不用刷新 xff0c 不用导向新页面 HTTP 205 reset content 表示响应执行成功 xff0c 重置页面 xff08
  • apache mod_xsendfile 让php提供更快的文件下载

    服务器提供一个文件下载 xff0c 一般使用一个url指向服务器中的文件即可提供下载 但这样就不能进行统计 xff0c 权限检测等操作 因此 xff0c 一般使用php提供下载 xff0c 代码如下 xff1a lt php file 61
  • HTML5 使用application cache 接口实现离线数据缓存

    1 配置缓存文件 cache manifest MIME TYPE xff1a text cache manifest 文件名称 xff1a name appcache 作用 xff1a 用于配置需要缓存的文件 2 使用方法 在服务器上添加
  • XSS跨站测试代码大全

    XSS跨站测试代码大全 39 gt lt script gt alert document cookie lt script gt 61 39 gt lt script gt alert document cookie lt script
  • 范数、神秘值

    范数 格式 xff1a n 61 norm A p 功能 xff1a norm函数可计算几种不同类型的矩阵范数 依据p的不同可得到不同的范数 下面是Matlab中help norm 的解释 NORM Matrix or vector nor
  • anaconda3 安装(自用,记录用)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 一 anaconda 卸载 二 anaconda3安装 1 Anaconda下载 2 Anaconda配置 三 Anacond
  • mysql 优化 insert 性能

    mysql 的 insert 语句语法 insert into 96 table 96 96 field1 96 96 field2 96 values 39 value1 39 39 value2 39 提高insert 性能的方法 1
  • 使用onbeforeunload事件检测窗口是否刷新或关闭

    onunload xff0c onbeforeunload 在页面刷新或关闭时调用 xff0c 区别在于 xff1a onbeforeunload 是在页面刷新或关闭前触发 xff0c 这时浏览器并未请求服务器读取新页面 xff0c 因此o
  • php 使用异或(XOR)加密/解密文件

    php 使用异或 xff08 XOR xff09 加密 解密文件 原理 xff1a 将文件每一个字节与key作位异或运算 xff08 XOR xff09 xff0c 解密则再执行一次异或运算 代码如下 xff1a lt php source
  • php 如何获取一个变量的名字

    PHP中 xff0c 所有的变量都存储在 34 符号表 34 的HastTable结构中 xff0c 符号的作用域是与活动符号表相关联的 因此 xff0c 同一时间 xff0c 只有一个活动符号表 我们要获取到当前活动符号表可以通过 get
  • PHP扩展开发报错解决[error: ‘PHP_FE_END’ undeclared here (not in a function)] .

    PHP扩展开发报错解决 error PHP FE END undeclared here not in a function 解决方法 xff1a 进到php包的目录 sed i 39 s PHP FE END NULL NULL NULL
  • php 对象克隆 clone

    php 对象复制 xff0c 是复制对象的引用地址 xff0c 因此使用 objA 61 objB 这种写法时 xff0c objA与 objB会指向相同的内存地址 当 objA 发生变化时 xff0c objB也会受到影响 如果我们要 o
  • mysql general log

    mysql 打开 general log 后 xff0c 所有的查询语句都会记录在 general log 文件 xff0c 文件为只读方式 xff0c 但这样general log文件会非常大 xff0c 所以默认是关闭的 但有时需要查错
  • MessagePack 序列化格式

    MessagePack 是一种有效的二进制序列化格式 与JSON一样可以在多语言中转换数据 xff0c 但对比JSON xff0c 速度更快 xff0c 转换后数据更小 安装 1 下载msgpack xff0c 下载地址 xff1a 点击下
  • ubunut 管理开机程序

    安装 sysv rc conf sudo apt get install sysv rc conf 安装完成后输入命令 xff0c 可以管理开机程序 sudo sysv rc conf 带 X 的都是开机启动 xff0c 移动到要修改的位置
  • VC中TRACE()的用法,终于学会了点皮毛,好累!

    个人总结 xff1a 最近看网络编程是碰到了TRACE语句 xff0c 不知道在哪里输出 xff0c 查了一晚上资料也没找出来 xff0c 今天终于在CSDN上找到了 xff0c 真是个高地方啊 xff0c 方法如下 xff1a 1 在MF
  • php Cookies 操作类

    Cookies 操作类 功能 xff1a 1 保存 xff0c 读取 xff0c 更新 xff0c 清除cookies数据 2 可设置前缀 3 强制超时控制 4 cookies数据可以是字符串 xff0c 数组 xff0c 对象等 Cook
  • php 密码生成类

    php 密码生成类 功能 xff1a 1 可设定密码长度 2 可设定要生成的密码个数 xff0c 批量生成 3 可以指定密码的规则 xff0c 字母 xff0c 数字 xff0c 特殊字符等 GeneratePassword class p
  • php main 与 iframe 相互通讯类(同域/跨域)

    main 与 iframe 相互通讯类 之前写过一篇 iframe与主框架跨域相互访问方法 介绍了main与iframe相互通讯的原理 不了解原理的可以先看看 今天把main与iframe相互通讯的方法封装成类 主要有两个文件 JS Fra
  • php 异步调用方法

    php 异步调用方法 客户端与服务器端是通过HTTP协议进行连接通讯 xff0c 客户端发起请求 xff0c 服务器端接收到请求后执行处理 xff0c 并返回处理结果 有时服务器需要执行很耗时的操作 xff0c 这个操作的结果并不需要返回给