‘壹’ mac一键安装php环境(macphp集成环境安装包)
怎样在mac上面配置php环境工具:Apache2.4.16、PHP、MacbookPro、MySQL5.7
步骤:
1、打开终端,输入命令:sudoapachectlstart,启动Apache。
2、打开ie浏览器,在地址栏中输入localhost,出现ItWorks字符串,就说明Apache已经成功启动。
3、在Macbookpro下,Apache的网站服务器根目录在/Library/WebServer/Documents路径下。MacOS同样自带PHP,只需要在Apache的配置文件中添加Apache对PHP的支持就好了。在终端中输入命令:
sudovim?/etc/apache2/httpd.conf
打开httpd.conf文件。
4、去掉注释符号:LoadMolephp5_molelibexec/apache2/libphp5.so
5、重启Apache服务。进入/Library/WebServer/Documents,新建一个测试的裤和衡PHP页面,输胡做入命棚指令:sudovimtest.php
6、在test.php中输入以下代码?phpphpinfo();?
在ie浏览器中打开页面localhost/test.php,测试PHP是否可用即可。
如何在MacbookPro搭建PHP开发环境MacbookPro配置PHP开发环境安装环境如下:MacOS10.10.1Apache2.4.9PHP5.5.14MySQL5.6.22Apache配置在MacOS10.10.1中是自带Apache软件的,我们只需要启手山动毕基中对应的服务就好了,以下命令是操作Apache时常用的几个命令://启锋铅动Apache.
MacM1安装php开发环境
去年年底,苹果推出了新款的M1芯片的mac,最近刚好要换电脑,考虑对比再三,还是选择了M1芯片的mac;刚拿到手以后,担心会有软件不兼容啥的,网上也推荐作为主力开发的笔记本的话,不推荐M1,但是现在已经完全配置好了开发环境,安全下车了。下面就来简单介绍下安装过程中的步骤:
注意:如果没有安装brew,需要先安装brew,使用arch-arm64brewinstall安装
首先搜索没拆明是否包含想要安装的mysql版本,如下图:
此处选择[email protected]这个版本,我本地已经安装完成了
安装完成后,需要添加环境变量,这样才能在任何目枯告录下面直接打mysql访问
先查询有哪些php的版本,之前看网上说的M1,目前还不支持php7.3以下的版本,所有我安装了php7.4
等待安装完成后,可以开始部署项目了,由于我的项目是thinkphp框架开发的,而且用到了redis,所以,这边需要先安装redis依赖
安装phpredis依赖(此处使用pecl安装,网上有很多使用编译安装的方法,那种方法比较麻烦,而且需要配置的地方比较多,pecl安装的话,快捷方便)
这个安装完成后,就只需要去nginx目录下面配置项目文件就OK了。
其他的不多说,主要提一点,就是thinkphp框架,重定向那边的配置,location里面的配置需要修改下,如下图:
修改完成后,重启御中服务器,还要重启php-fpm,这个是关键
‘贰’ predis VS phpRedis
分别顺序执行5W次redis写命令,比较他们的时间(ms)。
虽有一定差别,但差别不大。
写API,读写一定量key,统计时间。并使用ab并发测试,比较两者区别。
phpRedis较predis还有一个有点,就是phpredis实现了pconnect()。pconnect在redis结束后,不会销毁redis连接,直到空闲超时自动断开。pconnect是依赖与php-fpm进程的,进程不死,connect就会存在。
在测试中,当高并发时,pconnect 可能会又更好的效果,但是并发低的话,connect会更快一些。
另外,pconnect连接数是和fpm数目相关联的。
参考文章:
高并发下PHP请求Redis异常处理
phpredis中的connect和pconnect
史上最LOW的PHP连接池解决方案
请手动释放你的资源
深入php redis pconnect
‘叁’ linux中安装扩展出现问题怎么解决
1、安装redisx0dx0ax0dx0a上传phpredis-2.2.4.tar.gz到/usr/local/src目录x0dx0acd /usr/local/src #进入软件包存放目录x0dx0atar zxvf phpredis-2.2.4.tar.gz #解压x0dx0acd phpredis-2.2.4 #进入安装目录x0dx0a/usr/local/php/bin/phpize #用phpize生成configure配置文件x0dx0a./configure --with-php-config=/usr/local/php/bin/php-config #配置x0dx0amake #编译x0dx0amake install #安装x0dx0a安装完成之后,出现下面的安装路径x0dx0a/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/x0dx0a2、配置php支持x0dx0avi /usr/local/php/etc/php.ini #编辑配置文件,在最后一行添加以下内容x0dx0a添加x0dx0aextension="redis.so"x0dx0a:wq! #保存退出x0dx0ax0dx0a3 重启服务x0dx0asudo service nginx restartx0dx0asudo /etc/init.d/php-fpm restart
‘肆’ java subscribe监听超时怎么解决
问题描述
redis提供了pub/sub功能,但在使用phpredis的subscribe时发现这样一个问题,代码如下(sub.php):
<?php/*监听demo频道,打印收到的信息*/function process($redis, $chan, $msg){
var_mp($msg);
}$redis = new Redis();$res = $redis->connect('127.0.0.1', '7979');$redis->subscribe(array('demo'), 'process');123456789
代码运行后,发现如果在一段时间内未收到来自demo频道的消息,则会报如下错误:
PHP Fatal error: Uncaught exception 'RedisException' with message 'read error on connection' in sub.php:11Stack trace:#0 /search/ballqiu/sub.php(11): Redis->subscribe(Array, 'process')#1 {main}
thrown in sub.php on line 1112345
原因分析
为了查找原因,我们使用strace对代码进行了跟踪:
strace php sub.php1
截取部分重要输出如下:
//连接redis
connect(3, {sa_family=AF_INET, sin_port=htons(7979), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)
//发送subscribe命令
sendto(3, "subscribe demo
", 17, MSG_DONTWAIT, NULL, 0) = 17//收到响应
recvfrom(3, "*3
$9
subscribe
$4
demo
:1
"..., 8192, MSG_DONTWAIT, NULL, NULL) = 33poll([{fd=3, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
//套机字超时时间设为60s
poll([{fd=3, events=POLLIN|POLLERR|POLLHUP}], 1, 60000) = 0 (Timeout)
//等待超时,关闭连接
close(3) = 0//输出错误信息
write(2, "PHP Fatal error: Uncaught excep"..., 261PHP Fatal error: Uncaught exception 'RedisException' with message 'read error on connection' 12345678910111213
可见报错的本质是poll设置接收超时所致,从starce结果我们知道这个超时默认是60s。
解决
我们有两种方法改变超时
- 方法1
在代码起始处设置
ini_set('default_socket_timeout', -1);1
方法2
在redis connect后执行
两种方法中的-1均表示永不超时,你也可以将超时设置为自己希望的时间。
无论使用哪种方法,再次strace, 你会发现poll的超时被设为了-1。
个人比较推荐方法2,它只影响到redis本身。而方法1会对其它方法产生影响,比如
file_get_contents等。
总结
使用phpredis的subscribe时,默认60内没有收到消息,sub端就会因超时异常退出。可以自行设置延长超时时间或永不超时。