php异步库
页面1.php里面写具体的执行语句
页面2.php直接使用curl调用页面1.php 并设置超时时间;根据你自己的需求写但是你不一定如果超时时间内 数据库没执行玩 那你可能就获取不到插入结果了
访问2.php应该就是你说的异步了
❷ php 怎样在同一个文件里进行异步执行
PHP是顺序执行的语言,注定无法单独依靠PHP本身去实现异步执行。
但可以借助比如在HTML中ajax的异步请求去实现自己想要的效果。
❸ php的CI框架如何实现异步调用
在你自定义的类库中初始化CodeIgniter资源
要你自定义的类库中访问CodeIgniter的原始资源,你必须使用 get_instance() 函数.这个函数返回一个CodeIgniter super object.
一般来说在你的控制器函数中你可以通过 $this 调用任何可用的CodeIgniter函数:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
//etc.
$this, 只直接作用在你自己的控制器,模型和视图中.当你在自定义类中想使用CodeIgniter原始类时,你可以这样做:
首先,定义CodeIgniter对象赋给一个变量:
$CI =& get_instance();
一旦定义某个对象为一个变量,你就可以使用那个变量名 取代 $this:
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
//etc.
注意: 你将注意到get_instance()这个函数通过被引用的方式被传递:
$CI =& get_instance();
这十分重要. 通过引用的方式赋给变量将使用原始的 CodeIgniter 对象,而不是创建一个副本。
//------------------------------------------------------------------------------------------------//
我想这也许是你需要的.$CI =& get_instance();之后再用$CI->load->library('session');等方法加载你需要的
❹ 在php中如何向数据库中异步插入图片
一般不向数据库插入图片 而是插入图片的src 通过src找到图片然后显示。
(更多异步问题http://bbs.hounwang.com)
<?php
session_start();
//array数组中放图片的格式
$uptypes = array("image/jpg","image/jpeg","image/png","image/pjpeg","image/gif","image/bmp","image/x-png");
$files =$_FILES["uppic"];
if($files["size"]>2097152){ //图片大小判断
echo "上传图片不能大于2M";
echo "<meta http-equiv='REFRESH' CONTENT='1;URL=pic.php'>";
exit;
}
$ftype =$files["type"];
if(!in_array($ftype,$uptypes)){ //图片格式判断
echo "上传的图片文件格式不正确";
echo "<meta http-equiv='REFRESH' CONTENT='1;URL=pic.php'>";
}
$fname = $files["tmp_name"]; //在服务器临时存储名称
$image_info = getimagesize($fname);
$name = $files["name"];
$str_name = pathinfo($name); //以数组的形式返回文件路劲的信息
$extname = strtolower($str_name["extension"]); //把字符串改为小写 extensiorn扩展名
$upload_dir = "upload/"; //upload文件夹
$file_name = date("YmdHis").rand(1000,9999).".".$extname;
$str_file = $upload_dir.$file_name; //文件目录
//存入数据库
$con=mysql_connect("localhost","root","");
if(!$con){
die(("数据库连接失败").mysql_error());
}
mysql_select_db("mywork",$con);
$sql="update user set picpath='$str_file' where user_name='$username'"; //将图片地址插入数据库mywork
mysql_query($sql,$con);
mysql_close($con);
if(!file_exists($upload_dir)){
mkdir($upload_dir); //创建目录 成功则返回true 失败则返回flase
}
if(!move_uploaded_file($files["tmp_name"],$str_file)){ //将上传的文件移动到新的目录 要移动文件 和文件新目录 成功则返回true
echo "图片上传失败";
echo "<meta http-equiv='REFRESH' CONTENT='1;URL=插入失败后希望跳转的页面>";
}
else{
//echo "<img src=".$str_file.">";
echo "图片上传成功";
echo "<meta http-equiv='REFRESH' CONTENT='1;URL=插入成功希望挑战的页面>";
}
❺ 请教PHP的异步处理,pcntl
client:
<?php
$client=newGearmanClient();
$client->addServer('127.0.0.1', 4730);//本机可以直接addServer(),默认服务器端使用4730端口
$client->setCompleteCallback('completeCallBack');//先绑定才有效
$result1=$client->do('say','do');//do是同步进行,进行处理并返回处理结果。
$result2=$client->doBackground('say','doBackground');//异步进行,只返回处理句柄。
$result3=$client->addTask('say','addTask');//添加任务到队列,同步进行?通过添加task可以设置回调函数。
$result4=$client->addTaskBackground('say','addTaskBackground');//添加后台任务到队列,异步进行?
$client->runTasks();//运行队列中的任务,只是do系列不需要runTask()。
echo'result1:';
var_mp($result1);
echo'<br/>';
echo'result2:';
var_mp($result2);
echo'<br/>';
echo'result3:';
var_mp($result3);
echo'<br/>';
echo'result4:';
var_mp($result4);
echo'<br/>';
//绑定回调函数,只对addTask有效
functioncompleteCallBack($task)
{
echo'CompleteCallback!handle result:'.$task->data().'<br/>';
}
worker:
<?php
$worker=newGearmanWorker();
$worker->addServer();
$worker->addFunction('say',function(GearmanJob$job){
$workload=$job->workload();//接收client传递的数据
echo'receive data:'.$workload.PHP_EOL;
returnstrrev($workload);//仅作反转处理
});
//无际循环运行,gearman内部已有处理,不会出现占用过高死掉的情况
while($worker->work()){
if($worker->returnCode() !== GEARMAN_SUCCESS){
echo'error'.PHP_EOL;
}
}
以上client输出:
CompleteCallback!handle result:ksaTdda
result1:string(2) “od”
result2:string(17) “H:iZ943bixttyZ:87″
result3:object(GearmanTask)#2 (0) { }
result4:object(GearmanTask)#3 (0) { }
worker输出:
receive data:do
receive data:doBackground
receive data:addTaskBackground
receive data:addTask
❻ 我想通过PHP异步操作执行一些代码应该怎么做
好的程序应该尽可能少的去读取数据库,而不是像你说的还100毫秒读取一次。这样的需求本身就很有问题哦
❼ php如何实现脚本异步执行的方法具体分析
php语言得用fsockopen()函数,实现脚本异步运行,代码如下
异步请求函数(用debug参数若为true则为用为调试,开启调试可以看到异步的执行情况,但是失去异步的效果)
main.php
<?php
/**
*异步请求
*@rightCopyright(c)HangzhouTechnologyCo.,Ltd.(https://www.5wx.org)
*@author$Author:juny$
*@version$Id:main.php3322018-09-2309:15:08Zjuny$
*/
functionrequest_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)";
returnfalse;
}
$method="GET";
if(!empty($post_data)){
$method="POST";
}
$header="$method$requestPathHTTP/1.1 ";
$header.="Host:$hostname ";
if(!empty($post_data)){
$_post=strval(NULL);
foreach($post_dataas$k=>$v){
$_post[]=$k."=".urlencode($v);//必须做url转码以防模拟post提交的数据中有&符而导致post参数键值对紊乱
}
$_post=implode('&',$_post);
$header.="Content-Type:application/x-www-form-urlencoded ";//POST数据
$header.="Content-Length:".strlen($_post)." ";//POST数据的长度
$header.="Connection:Close ";//长连接关闭
$header.=$_post;//传递POST数据
}else{
$header.="Connection:Close ";//长连接关闭
}
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'successok';
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提交过来的参数,从而进行下一步操作
以上就是php如何实现脚本异步执行的方法具体分析的详细内容.
❽ php redis做mysql的缓存,怎么异步redis同步到mysql数据库
<?phpforeach($_POST as $key => $val) $$key=trim($val); //接收提交的数据?><form method="post" action=""> <input type="text" name="value" value="<?php echo $value ; ?>"/> <input type="submit" name="send" value="send"/></form>action=""表示表单提交到本页面,用php处理一下就行,也可以去后盾人学习一下,看看高清教学视频.
❾ PHP中异步访问
这个推荐你用jquery来实现.
jquery的ajax实现中,直接有对json的处理.
=========
jquery的手册中的例子
=============
从 test.js 载入 JSON 数据,附加参数,显示 JSON 数据中一个 name 字段数据。
jQuery 代码:
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
alert("JSON Data: " + json.users[3].name);
});