系统有个php5.5.14 现在需要再安装个php5.6.31

1.php.net 下载php5.6.31并安装

tar zxvf php-5.6.31.tar.gz

cd php-5.6.31

./configure –prefix=/usr/local/php56 –with-config-file-path=/usr/local/php56/etc –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –with-iconv-dir –with-freetype-dir=/usr/local/freetype –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –enable-xml –disable-rpath –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –enable-mbregex –enable-mbstring –with-mcrypt –enable-ftp –with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –with-gettext –disable-fileinfo –enable-opcache –enable-intl –with-xsl

遇到一些错误 参考http://www.bkjia.com/PHPjc/1008013.html

configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

安装 libicu-devel

yum -y install libicu-devel

configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

安装 libxslt-devel
yum -y install libxslt-devel

注意一下make
make ZEND_EXTRA_LIBS=’-liconv’

make install

2
拷贝配置文件
cp -R ./sapi/fpm/php-fpm.conf /usr/local/php56/etc/php-fpm.conf
cp php.ini-development /usr/local/php56/etc/php.ini
cp /etc/init.d/php-fpm /etc/init.d/php-fpm56
php-fpm56修改一下PHP的目录就可以了

4.配置php-fpm 修改php-fpm.conf的侦听端口为9001,因为主版本5.5.14是侦听9000。 killall php-fpm56

/usr/local/php56/etc/php-fpm.conf

listen = 127.0.0.1:9001

配置PHP.ini

# php extensions
echo “Modify php.ini……”
sed -i ‘s/post_max_size =.*/post_max_size = 50M/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/upload_max_filesize =.*/upload_max_filesize = 50M/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/;date.timezone =.*/date.timezone = PRC/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/short_open_tag =.*/short_open_tag = On/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/max_execution_time =.*/max_execution_time = 300/g’ /usr/local/php56/etc/php.ini
sed -i ‘s/disable_functions =.*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g’ /usr/local/php56/etc/php.ini

echo “Creating new php-fpm configure file…”
cat >/usr/local/php56/etc/php-fpm.conf<<EOF
[global]
pid = /usr/local/php56/var/run/php-fpm.pid
error_log = /usr/local/php56/var/log/php-fpm.log
log_level = notice

[www]
listen = /tmp/php56-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/php56slow.log
EOF

fastcgi_pass 127.0.0.1:9001;
下面备注一下需要装一些库

extension=yaf.so
extension=memcache.so
extension=memcached.so
extension=redis.so
extension=bz2.so

下面是个文件,请下载查看

安装多版本php

MySQL报错 Lock wait timeout exceeded; try restarting transaction
1,查看数据库的隔离级别:

mysql> select @@tx_isolation;
+—————–+
| @@tx_isolation |
+—————–+
| READ-COMMITTED |
+—————–+
1 row in set (0.00 sec)
2,去查看先当前库的线程情况:
mysql> show full processlist;

没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

mysql> SELECT * FROM information_schema.INNODB_TRX;

3,看到有两条记录,然后找到 trx_mysql_thread_id
mysql> SELECT trx_mysql_thread_id FROM information_schema.INNODB_TRX;

mysql> kill 7226287;
Query OK, 0 rows affected (0.00 sec)

mysql> kill 5201247;
Query OK, 0 rows affected (0.00 sec)

然后再去查询INNODB_TRX表,就没有阻塞的事务sleep线程存在了,如下所示:
mysql> SELECT * FROM information_schema.INNODB_TRX;

再去执行update语句,就能正常执行了,如下所示:
4,总结分析
表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。
mysql> select @@autocommit;
+————–+
| @@autocommit |
+————–+
| 1 |
+————–+
1 row in set (0.00 sec)

如果是0的话 就设置为1 set global autocommit=1;

fiddler手机抓包原理

fiddler手机抓包的原理与抓pc上的web数据一样,都是把fiddler当作代理,网络请求走fiddler,fiddler从中拦截数据,由于fiddler充当中间人的角色,所以可以解密https

下面开始手机抓包设置教程

设置fiddler抓包

File—–>勾选capture traffic

设置抓https和解密https

Tools—–>fiddler options—–>https—–>capture https traffic—->decrypt https traffic—>Ignore server certificate errors

由于我们只抓手机的,所以这里选择 from remote clients only

connections—–>allow remote computers to connect

由于是手机连接代理,所以勾选allow remote computers to connect

给fiddler安装certmaker插件

由于默认的证书不符合Android和iOS的证书要求,所以,需要下载certmaker插件,双击安装后,重启fiddler。注意这一步很重要,必须使用certmaker插件,不要使用默认的证书生成器,否则抓不到包。

设置手机代理

手机与pc在同一个网段

首先保证手机与pc在同一个局域网中
鼠标移动到fiddler右上角的Online,查看pc的ip,192.168.1.106
手机ip是,192.168.1.101,跟pc在同一个网段。

手机安装根证书

在浏览器中,输入http://192.168.1.106:8888, 点击最下边的FiddlerRoot certificate,确定安装。
后续的问题

同理,也可以抓取手机qq app版、支付宝、淘宝等,不过手机qq有些走的http2协议,所以抓不到,这种情况就得用wireshark抓包了,不过抓取后,解密是个问题。
wireshark抓手机qq app版的赞请求

抓不到https包

很多网友问我,按照教程来了,但是抓不到包,关于这个问题,这里统一答复。

fiddler抓不到的情况分析

fiddler并不是支持全部协议

fiddler并不支持全部协议,目前已知的有http2、tcp、udp、websocket等,如果应用走了以上协议,那么fiddler肯定是抓不到的。

http2:因为fiddler是基于.net framework实现的,因为.net framework不支持http2,所以fiddler无法抓取http2

证书写死在app中,fiddler不能抓取

fiddler抓包的原理是中间人攻击,也就是说,两头瞒,欺骗客户端&&欺骗服务器端,如果https证书写死在app里,也就是说,app不信任fiddler颁发给它的证书,app只信任自己的证书,fiddler没法瞒客户端了,因此fiddler也就抓取不到包了。
再多说几句,如果是自己开发的app,开发调试方便起见,可以使用类似wireshark的工具导入服务器证书,抓包解密。

修正不能抓取包问题

除了上述已知不能抓包的情况,其他情况都应该能抓取。以下是排查,修正问题的步骤。

确认能否抓到手机浏览器的百度首页

因为百度是https加密的,所以如果配置正确肯定是可以抓到的。注意,我这里说的是三个条件,手机&&浏览器&&百度网页的首页,这些条件,都得满足 。
如果抓不到,可以确定是配置有问题。核实fiddler使用certmarker插件并且在手机上也安装了;如果已安装,则重新安装。 如果还不work,那么,重新生成证书,电脑和手机都重新安装,然后重启fiddler。一般来说,重新安装手机上的证书就解决问题了。

来源 http://blog.csdn.net/wangjun5159/article/details/52202059

今天PHP对接的招商银行接口出问题了,查了半天是由于PHP-java-bridge宕机了  贴一下启动代码

Linux下的启动代码 如果写日志  需要在8080后面写上 3 log.log

nohup java -jar JavaBridge.jar HTTP_LOCAL:8080 >/dev/null 2>&1 &

然后查看进程
ps aux | grep “JavaBridge”