PHP系统编程--01.多进程与多线程

PHP中提供了一个扩展pcntl,可以利用操作系统的fork调用来实现多进程。fork调用后执行的代码将是并行的。PHP官方没有提供多线程的扩展,pecl中有一个pthreads扩展提供了多线程的特性,地址是http://pecl.php.net/package/pthreads,此扩展仅在线程安全版本中可用。多进程使用多进程,子进程结束以后,内核会负责回收资源使用多进程,子进程异常退出不会导致整个进程Thread退出.父进程还有机会重建流程.一个常驻主进程,只负责任务分发,逻辑更清楚.多进程方式更加稳定,另外利用进程间通信(IPC)也可以实现数据共享。共享内存,这种方式和线程间读写变量是一样的,需要加锁,会有同步、死锁问题。消息队列,可以采用多个子进程抢队列模式,性能很好多线程线程是在同一个进程内的,可以共享内存变量实现线程间通信线程比进程更轻量级,开很大量进程会比线程消耗更多系统资源多线程也存在一些问题:线程读写变量存在同步问题,需要加锁锁的粒度过大存在性能问题,可能会导致只有1个线程在运行,其他线程都在等待锁同时使用多个锁,逻辑复杂,一旦某个锁没被正确释放,可能会发生线程死锁某个...

PHP系统编程--02.PHP守护进程

什么是守护进程?一个守护进程通常补认为是一个不对终端进行控制的后台任务。它有三个很显著的特征:在后台运行,与启动他的进程脱离,无须控制终端。常用的实现方式是fork()->setsid()->fork()在glibc里有一个函数daemon。调用此函数,就可使当前进程脱离终端变成一个守护进程,具体内容参见mandaemon。PHP中暂时没有此函数,PHP程序实现守护进程化有2种方法:使用系统命令nohupnohupphpmyprog.php>log.txt&&,这样执行程序虽然也是转为后台运行,但实际上是依赖终端的,当用户退出终端时进程就会被杀掉。需要使用nohup来实现PHP脚本函数实现:<?phpfunctiondaemon(){$pid=pcntl_fork();if($pid<0){die("fork(1)failed!");}elseif($pid>0){exit;//让终端启动的进程退出}chdir("/");//改变当前目录为根目录umask(0);//重设文件权限掩码//建立一个有别于终端的新session以脱离终端$...

Ubuntu12.04 安装LAMP及phpmyadmin

1.安装Apacheapt-getinstallapache22.安装PHP5apt-getinstallphp5libapache2-mod-php53.安装MySQLapt-getinstallmysql-server在安装的时候,如果要求你输入Mysql密码,则输入密码。如果没有要求,则执行下一步。在终端中输入下面命令。mysql-urootmysql>SETPASSWORDFOR'root'@'localhost'=PASSWORD('yourpassword');3.安装MySQL扩展和phpmyadminsudoapt-getinstalllibapache2-mod-auth-mysqlphp5-mysqlphpmyadmincp/etc/phpmyadmin/apache.conf/etc/apache2/sites-enabled/phpmyadmin4.开启rewrite模块sudoa2enmodrewrite5.重启APACHEsudo/etc/init.d/apache2restart 以下是全部脚本##升级软件源apt-getupdate##安...

【laravel5.4】php artisan migrate报错:Specified key was too long; max key length is 767 bytes

1、原因:在进行迁移文件生成时,程序并未给varchar类型字段设置合适的长度,导致报错。2、解决办法:找到database/目标迁移文件,修改其中类型为string的字段长度,建议不要超过255,否则报错【然后再次运行phpartisanmigrate即可成功】 示例: MySQL:ERROR1071(42000):Specifiedkeywastoolong;maxkeylengthis767bytes今天测试遇到了这样的问题:MySQL>usetest;createtabletest(avarchar(512)primarykey,bvarchar(1024));DatabasechangedERROR1071(42000):Specifiedkeywastoolong;maxkeylengthis767bytes相关测试:http://kklinux.com/bbs/archiver/tid-2543.htmldroptableifexiststest;createtabletest(testvarchar(767)primarykey)charset...

laravel5.4】git上clone项目到本地,配置和运行 项目报错:../vendor/aotuload.php不存在

1、一般我们直接使用gitclone将git的项目克隆下来,在本地git库和云上git库建立关联关系2、vendor【扩展】文件夹是不会上传的,那么下载下来直接运行项目,会报错:D:phpStudy/WWW/crm/public/../vendor/aotuload.php不存在3、我们需要cd到项目的根目录,不是public目录哦,运行composerinstall安装对应的扩展配置组件4、再次运行,可能会报:encrypter类不存在,那是因为key没有生成,再次运行:phpartisankey:generate即可。...

【centos6+7】安装redis + phpredis 以及 常用配置参数

1、redis-server和redis-cli安装文章:http://www.cnblogs.com/skyessay/p/6429988.html/------------这里是redis服务器安装start----------------------/1、前置条件:查看是否安装gcc,命令:gcc-v,没有gcc执行yuminstall-ygcc2、编译安装redis:redis下载地址:http://download.redis.io/releases/3、下载好的redis压缩包传到linxu系统中,进行解压.tarzxvfredis-5.0.3.tar.gzcd redis-5.0.3      //进入解压目录(这一步很重要)4、编译安装,执行命令make#执行命令[root@localhostredis-5.0.3]#make #出现以下信息则表示安装完成Hint:It'sagoodideatorun'maketest';)make[1]:Leavingdirectory`/usr/redis/redis-5.0.3/src'5、执行maketest...

【laravel5.4】laravel5.4系列之生成_ide_helper.php文件

在laravle中使用代码自动补全,比较方便开发,于是这边找到了相关的办法在laravel配置完好的情况下,同时安装好了composer。 进入代码的根目录执行composerrequirebarryvdh/laravel-ide-helper然后在config/app.php的providers中添加BarryvdhLaravelIdeHelperIdeHelperServiceProvider::class,然后执行以下命令:phpartisanclear-compiledphpartisanide-helper:generatephpartisanoptimize查看项目根目录是否生成了_ide_helper.php,生成了表面此时支持代码补全功能了。...

【tp5】tp5实现空模块、空控制器、空操作的页面404跳转

写在最开始:本教程适用于tp5路由的【强制模式+半pathinfo模式+pathinfo模式】,通用。比网上的【通过路由去控制空模块更强力、更全面】。PS:路由控制空模块缺点:仅仅在【强制模式下才生效,pathinfo模式下有错误】 1、这里只讲tp5(5.0.18)的空模块跳转,空控制器和空操作官网有。来个正确的空模块处理吧:首先找到thinkApp.php,备份,然后修改:找到【thrownewHttpException(404,'modulenotexists:'.$module);】,在它前面添加【header('Location:/404.html');die;//在此进行跳转】即可,实现控模块跳转404功能。ps:其他已存在页面不影响 2、效果: ...

【php】分享一个php转换微信、QQ、微博 特殊非主流 | 杀马特 网名的 function

1、实现的效果: 2、将上面带有图标、非主流的文字,转换成utf-8格式,能存进去和读出来。3、code:functionemoji_encode($nickname){$strEncode='';$length=mb_strlen($nickname,'utf-8');for($i=0;$i<$length;$i++){$_tmpStr=mb_substr($nickname,$i,1,'utf-8');if(strlen($_tmpStr)>=4){$strEncode.=rawurlencode($_tmpStr);}else{$strEncode.=$_tmpStr;}}return$strEncode;} ...

【TP5.0】tp5.0实现连接多个数据库,实现类似3.2M(‘table’,'prefix_','db_config2')的CURD操作

1、db_connect的name链式操作,类似于3.2的M('table','prefix_','db_config2')/***db_connect的name链式操作,类似于3.2的M('table','prefix_','db_config2')*tags*@param*@returnreturn_type*@authorxzz2018年8月10日*/publicfunctiondb_connect_name_demo(){$id=$this->request->param('id',0,'intval');//节令项目id$post=Db::connect('db_config2')->name('card_ticket')->where('id','=',(int)$id)->find();//find返回一维数组//var_dump($post);die;if(!empty($post)){$post['code']=1;exit(json_encode($post));}else{$post['code']=0;$this->error...

【php+js】用PHP或者JS怎么显示搜索到的关键字高亮,及其文章里包含关键字的一小段

1、想要实现的效果:2、思路:小数据量使用php的正则替换,即【preg_replace()】函数-->>支持多个关键词高亮显示,中间参数1和参数2放入对应的数组即可。$title=preg_replace($pattern,$replacement,$subject);3、具体显示:foreach($_listas$k=>$v){$_list[$k]['desc']=preg_replace($pattern,$replacement,$v['desc']);}print_r($_list);4、附一个tp5的使用案例/***用于高亮搜索关键词*@paramstring$string原文本*@paramstring$needle关键词*@paramstring$classspan标签class名:以下c-red为H-ui框架的样式*@returnmixed*/functionhigh_light($string,$needle='',$class='c-red'){return$needle!==''?str_replace($needle,"<spancla...

【Mysql】php执行脚本进行mysql数据库 备份和还原

一、mysql备份1、这里使用php脚本的形式进行mysql数据库的备份和还原,想看linux的sh版本的,有时间再贴。2、找到mysql的【mysqldump】执行程序,建议phpinfo3、使用linux的定时任务助手crontab,写入里面,采用curl定时访问php脚本文件 4、php脚本文件参考:采用TP3.2示例/***数据库备份代码*@param每月一次*@return*@authorxzz2018年7月27日下午2:40:41*/publicfunctionaotu_save_mysql_month(){//exec("/***/mysql-5.5/bin/mysqldump-u***-p******db_name>/www/***/111.sql");$filename='/***/save_mysql_'.date('Y-m').'.sql.gz';//保存文件.sql$db_user='root';$db_pwd='*****';$db_name='***';$host='localhost';$port='33306';//与端口无关$exec=...

php导出pdf文件】php将html 导出成pdf文件(MPDF60),支持完美分页,注意是完美!!

1、使用MPDF60包2、防止中文乱码:修改MPDF/MPDF60/config.php中 $this->autoLangToFont=true;$this->autoScriptToLang=true;3、引入类文件:mpdf.php方式一:直接放在Application同级,通过include_once引入方式二:放在vendor/下面,引入两种方式均可以,我这里以第一种示例,因为它在其他框架也可以使用 4、代码:(tp3.2.X示例)//PC端,利用php服务端打印pdf文件--addBy徐正宗2018/07/18publicfunctionprintPdf(){header("Content-type:text/html;charset=utf-8");$this->assign('title','下载文件');$id=I('id');if(!$id||!is_numeric($id)){$this->error('参数丢失');}else{//产品详情$list=M("product")->where('statusin(1,...

【PHP采集】php采集、[sS]的使用、正则获取 换行字符串或html块

1、如图,我想要获取红框框中的html内容,但是普通的正则一直获取不到: 2、原因剖析:因为html换行了,所以直接/<h3class="s_name"(.+?)<span>/是获取不到的,必须要进行换行匹配3、换行之后,退而求其次,干脆把整个h3里面的内容都拿来4、代码:preg_match_all('/<h3class="s_name">([sS]+?)</h3>/',$content,$matches);//var_dump($matches);die;if($matches){echo"景点名称=".$matches[1][0]."<br>";}5、我们知道(.+?)这是个很强大的匹配式,嘿嘿,其实[sS]比它还强大,几乎包含了一切。6、如果想隔两行,取值 那怎么办呢?别慌,照样使用这个[sS],它很强大的。 假设我们想要获取上面的【井下探幽来一场地下探索之旅】文字,并且是以【<divclass="intro-info=i"】为开始匹配点,那怎么办解决代码:preg_match_all('...

php+uploadify3.2】上传按钮点击一点反应都没有,原因

原因:代码没有问题,这个原因也困扰我一段时间,是由于浏览器禁用了flash,需要放开,操作方法如下:在谷歌浏览器输入:chrome://settings/content/flash然后添加需要该网站为允许使用,或者全部使用即可。希望对你有帮助!亲测可用!!!...
首页上一页...641642643644645...下一页尾页