PHP语言实现脚本异步执行

php语言得用fsockopen()函数,实现脚本异步运行,代码如下

//异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果)

main.php

<?php
function request_by_fsockopen($url,$post_data=array(),$debug=false){
    $url_array = parse_url($url);
    $hostname = $url_array['host'];
    $port = isset($url_array['port'])? $url_array['port'] : 80;
    @$requestPath = $url_array['path'] ."?". $url_array['query'];
    $fp = fsockopen($hostname, $port, $errno, $errstr, 10);
    if (!$fp) {
        echo "$errstr ($errno)";
        return false;
    }
    $method = "GET";
    if(!empty($post_data)){
        $method = "POST";
    }
    $header = "$method $requestPath HTTP/1.1\r\n";
    $header.="Host: $hostname\r\n";
    if(!empty($post_data)){
        $_post = strval(NULL);
        foreach($post_data as $k => $v){
        $_post[]= $k."=".urlencode($v);//必须做url转码以防模拟post提交的数据中有&符而导致post参数键值对紊乱
        }
        $_post = implode('&', $_post);
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";//POST数据
        $header .= "Content-Length: ". strlen($_post) ."\r\n";//POST数据的长度
        $header.="Connection: Close\r\n\r\n";//长连接关闭
        $header .= $_post; //传递POST数据
    }else{
        $header.="Connection: Close\r\n\r\n";//长连接关闭
    }
    fwrite($fp, $header);
    //-----------------调试代码区间-----------------
    //注如果开启下面的注释,异步将不生效可是方便调试
    if($debug){
    $html = '';
    while (!feof($fp)) {
    $html.=fgets($fp);
    }
    echo $html;
    }
    //-----------------调试代码区间-----------------
    fclose($fp);
}

$data=array('name'=>'guoyu','pwd'=>'123456');
$url='http://localhost/test/other.php';
request_by_fsockopen($url,$data,true);//

other.php

<?php
header("content-type:text/html;charset=utf-8");
//error_reporting(0);
//ini_set('html_errors',false);
//ini_set('display_errors',false);
$name = isset($_POST['name'])?$_POST['name']:'';
$pwd = isset($_POST['pwd'])?$_POST['pwd']:'';
echo $name.$pwd;
echo 'success ok';
die;
?>

使用实例:

[运行的main.php主脚本文件]

$data=array(‘name‘=>‘guoyu‘,‘pwd‘=>‘123456‘);

$url=‘http://localhost/test/other.php‘;

request_by_fsockopen($url,$data,true);//把应用B的用户表异步-同步数据

[导步执行文件other.php]

在other.php中便可以用$_POST接收main.php提交过来的参数,从而进行下一步操作

时间: 2024-10-11 06:23:32

PHP语言实现脚本异步执行的相关文章

异步执行js脚本——防止阻塞

JS允许我们修改页面中的所有方面:内容,样式和用户进行交互时的行为. 但是js同样可以阻塞DOM树的形成并且延迟页面的渲染. 让你的js变成异步执行,并且减少不必要的js文件从而提高性能. JavaScript可以查询和修改DOM和CSSOM JavaScript的执行阻塞了CSSOM的执行 JavaScript 阻塞了DOM的形成,除非特殊声明js异步执行 js是一个同步语言可以修改网页的任何方面: <html> <head> <meta name="viewpo

多线程异步执行脚本

获取远程计算机信息: $d=get-date $servers="10.4.34.41","10.4.34.40","10.4.34.36","10.4.34.37","10.4.34.39" $serverpass="Dell1950" $UserName="Administrator" #定义线程数量$throttleLimit = 5$SessionState

TCC研究(2) 把C语言当作脚本,解释执行,并嵌入各类程序

Tiny C Compiler(简称TCC, 或Tiny CC)是世界上最小的C语言编译器. TCC有一个突出的特点:就是可以把C语言当作脚本使用.试用记录如下: 首先,安装好TCC. 在Windows下, 下载执行程序: tcc-0.9.26-win32-bin.zip. 解压到c:\tcc, 将c:\tcc添加到PATH目录中. 测试安装是否成功,在命令行窗口中打入命令   tcc -v , 看到TCC版本号即是成功 方式一: 以TCC解释执行C语言文本 解释执行,就是不编译,直接运行. 写

异步执行脚本

异步执行脚本 script 元素的 async 属性可以使关联脚本相对于页面的其余部分进行异步加载和执行. 也就是说,在继续对页面进行解析的同时,在后台加载并执行脚本.如果页面使用了要占用大量处理时间的脚本,那么使用 async 属性可以显著提高页面加载性能. async 属性. async 属性是万维网联合会 (W3C)  HTML5 规范的一部分,它是为以下情形设计的:对于脚本不存在依赖关系,但是脚本仍需要尽快运行.在以下假设示例中,如果不使用 async(或 defer)属性,则脚本可能会

php 异步执行脚本

这里说的异步执行是让php脚本在后台挂起一个执行具体操作的脚本,主脚本退出后,挂起的脚本还能继续执行.比如执行某些耗时操作或可以并行执行的操作,可以采用php异步执行的方式.主脚本和子脚本的通讯可以采用外部文件或memcached的方式.原理就是通过exec或system来执行一个外部命令.注意:本文所述的是针对Linux环境. 在Linux下要让一个脚本挂在后台执行可以在命令的结尾加上一个 "&" 符号,有时候这还不够,需要借助nohup命令,关于nohup,可以参考http

【转】Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图所示

(转)Unity3D中脚本的执行顺序和编译顺序(vs工程引用关系)

自:http://www.cnblogs.com/champ/p/execorder.html 在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行.与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题. 事件函数的执行顺序 先说一下执行顺序吧. 官方给出的脚本中事件函数的执行顺序如下图:  我们可以做一个小实验来测试一下: 在Hierarchy视图中创建三个游戏对象,在Project视图中创建三条脚本,如下图

linux 限制两个shell脚本同时执行

问题出现的原因,由于现在发版是用通过执行脚本,都会都过mvn打包,同时执行导致问题. 解决方案在脚本执行前,检查.加锁... #!/bin/bash { flock -n 3  if [ $? -eq 1 ] then     echo "other sh running"     while [ 1 ]     do         flock -n 3          [ $? -ne 1 ]&&break;         sleep 1            

关于shell脚本的执行

最近比较迷恋shell,对其十分感兴趣,今天主要说一下我一个初学者在执行shell脚本的时候遇到的问题: 同所有语言一样,linux语言的学习也是从hellworld开始的,所以,现在我编写了一个HelloWorld的脚本如下: 那么重点来了,怎么执行呢?现在普及一下shell脚本执行的几种方式: 1.直接用bash 脚本名 执行脚本,如下: 2.使用"." 来执行脚本,如下: 3.直接"./" 脚本名来执行脚本,如下: 这个时候报错了,请注意看提示信息,提示权限不