phpstudy在window下nginx支持php多版本

由于项目使用一些不同的扩展和框架,而对php的版本支持又不同,所以需要多版本运行项目。

由于我原来使用的就是phpstudy来搭建php环境的,nginx整合各个php免安装版本Non Thread Safe(nts)都有了。

当然你可以上http://windows.php.net/download下载最新版。

phpstudy运行的是php5.5n版本,需要运行更多一个php7的版本,phpstudy网上都是说使用apache实现,我的配置都在nginx下,不想动。

需要RunHiddenConsole,用于启动php-cgi,可以实现关闭窗口依然在后台运行。解压后放在phpstudy目录下就可以了。
http://redmine.lighttpd.net/attachments/660/RunHiddenConsole.zip

配置nginx

在要使用php7的修改nginx.conf配置文件中将请求发送到9001端口。

location ~ \.php$ {
 fastcgi_index /index.php;
 fastcgi_pass 127.0.0.1:9001;
 include fastcgi_params;
 fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 }

php7由于phpstudy都自带的,找到对应的目录就可以了。

启动脚本

在phpstudy目录下新建启动脚本start.bat。让php7启动在9001端口。

@ECHO OFF

ECHO Starting PHP7.0 FastCGI...
RunHiddenConsole.exe E:/phpStudy/php70n/php-cgi.exe -b 127.0.0.1:9001

新建关闭脚本stop.bat。可以用以下代码关闭,也可以直接用phpstudy关闭。

@ECHO OFF

ECHO Stoping PHP FastCGI...
taskkill /F /IM php-cgi.exe > nul

这里麻烦的就是一旦使用phpstudy重启的时候,必须使用start.bat命令启动下php7,当然你自己也可以写个nginx+mysql+php一起重启关闭的bat批处理命令,这样就不用使用phpstudy来操作了。

 

 

发表在 服务器 | 标签为 | 留下评论

php7安装memcache扩展windows

memcache扩展最高只支持php版本5.x,后面都不维护了。

http://pecl.php.net/package/memcache

这时候就需要老外帮忙了

https://stackoverflow.com/questions/34952502/memcache-for-php7-on-windows

git下载地址:https://github.com/nono303/PHP7-memcache-dll

下载对应的版本扩展放入php-7.0.12-nts\ext目录
打开php.ini 配置文件增加行 : extension=php_memcache.dll
重启下就可以了 php -m查看扩展加载了吗

发表在 服务器 | 标签为 , | 留下评论

【原创】冒泡排序和选择排序区别

两种排序算法都是2次for循环,每一轮都把最大或最小的元素筛选出来放在相应的位置上,时间复杂度为O(n^2),空间复杂度为O(1)。

但交换的次数,选择排序是更少的 ,所以一般选择排序更快一点,冒泡排序是每一次都可能要左右交换,而选择排序是在比较时记录下标的位置最后来交换。

但是选择排序是不稳定的排序方法(比如序列[3, 3, 2]第一次就将第一个[3]与[2]交换,导致第一个3挪动到第二个3后面)。

 

发表在 服务器 | 标签为 | 留下评论

php读取nginx日志ip去重统计访问记录数

最近为了统计nginx下访问日志中至少百万记录的ip访问频率,日志文件大概500m,200多万条访问记录,经过测试速度还可以,当日志文件上1G就开始明显慢了,统计6G多的日志文件1500万条访问记录,本地机器需要30秒。尝试采用fread分流读取处理后效率也是差不多,暂时没找到更好方法,有更好的麻烦留言交流,感谢。

代码如下:

ini_set('display_errors',1); //错误信息
ini_set('display_startup_errors',1); //php启动错误信息
error_reporting(E_ALL & ~E_NOTICE ); //打印出所有的 错误信息

$result = array();
$fp = fopen('upstream.log', 'r');
$num = 0; //行数
while(!feof($fp))
{
 $line = fgets($fp);//指针方式读取一行
 $line = trim($line);
 $line = trim($line, "\r");
 $line = trim($line, "\n");
 
 $ip = substr($line, 0, strpos($line, '- -')-1);//提取ip
 if($ip == ''){
  continue;
 }
 $result[$ip] = $result[$ip]+1;
 $num++;
}
fclose($fp);

echo $num;//总行数
arsort($result);//排序
echo '<pre>';
print_r(array_slice($result, 0, 30));//前30条
exit;
发表在 服务器 | 标签为 , | 留下评论

centos6一键安装Redmine

安装准备

1,Linux系统:CentOS release 6.8 (Final) 64位 2.6.32-642.el6.x86_64

2,Redmine安装包:

wget https://downloads.bitnami.com/files/stacks/redmine/3.4.3-2/bitnami-redmine-3.4.3-2-linux-x64-installer.run

wget https://bitnami.com/redirect/to/354032/bitnami-redmine-3.4.6-4-linux-x64-installer.run

官网:https://bitnami.com/stack/redmine/installer

给.run文件加执行属性 chmod +x

这里执行 ./bitnami-redmine-3.4.3-2-linux-x64-installer.run 安装

根据需要安装组件,然后设置账号密码,成功后会有访问地址给你。

流程如下:

********************************************************************
[root@localhost src]# ./bitnami-redmine-3.4.3-2-linux-x64-installer.run
Language Selection

Please select the installation language
[1] English – English
[2] Spanish – Español
[3] Japanese – 日本語
[4] Korean – 한국어
[5] Simplified Chinese – 简体中文
[6] Hebrew – עברית
[7] German – Deutsch
[8] Romanian – Română
[9] Russian – Русский
Please choose an option [1] : 5
—————————————————————————-
欢迎来到 Bitnami Redmine Stack 安装程序。

—————————————————————————-
选择您想要安装的组件,清除您不想安装的组件。当您准备继续时,点击前进。

Subversion [Y/n] :n

PhpMyAdmin [Y/n] :y

Redmine : Y (Cannot be edited)

Git [Y/n] :y

上述选择是否正确? [Y/n]: y

—————————————————————————-
安装文件夹

请选择安装Bitnami Redmine Stack的文件夹

选择一个文件夹 [/opt/redmine-3.4.3-2]: /data/redmine-3.4.3-2

—————————————————————————-
创建管理员帐户

Bitnami Redmine Stack admin 用户创建

您的真实姓名 [User Name]: ken

Email地址 [user@example.com]: admin@netpc.com.cn

登录 [user]: admin

密码 :
请确认密码 :
—————————————————————————-
Web服务器端口

Choose a port that is not currently in use, such as port 81.

Apache Web 服务端口 [81]:

—————————————————————————-
MySQL信息

请输入MySQL数据库信息

Choose a port that is not currently in use, such as port 3307.

MySQL服务端口 [3307]:

—————————————————————————-
缺省数据配置语言

选择缺省数据配置语言:

[1] Bosnian
[2] 保加利亚语
[3] Catalan
[4] 捷克语
[5] Danish
[6] 德语
[7] 英语
[8] 西班牙
[9] 法语
[10] Galician
[11] 希伯来语
[12] Hungarian
[13] 意大利语
[14] 日语
[15] 朝鲜语
[16] Lithuanian
[17] 荷兰语
[18] Norwegian
[19] 波兰语
[20] 葡萄牙语
[21] 罗马尼亚语
[22] 俄语
[23] Slovak
[24] Slovenian
[25] 塞尔维亚语
[26] 瑞典语
[27] Turkish
[28] Ukrainian
[29] Vietnamese
[30] 中文
请选择选项 [30] :

Do you want to configure mail support? [y/N]: n

—————————————————————————-
安装程序已经准备好将 Bitnami Redmine Stack 安装到您的电脑。

您确定要继续吗? [Y/n]: y

—————————————————————————-
正在安装 Bitnami Redmine Stack 至您的电脑中,请稍候。

正在安装
0% ______________ 50% ______________ 100%
#########################################

—————————————————————————-
安装程序已经将 Bitnami Redmine Stack 安装于您的电脑中。

启动Redmine应用程序。 [Y/n]: y

信息: To access the Bitnami Redmine Stack, go to
http://127.0.0.1:81 from your browser.

********************************************************************

安装中出现的错误

一、glibc2.18 not fund:这是glibc也就是C库版本不到2.18,需要升级:

1.下载:http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz

选择报错中需要的版本:glibc-2.18.tar.gz
选择过最新版本,安装时候进行configure时候报错,所以就没有最新版本
2.解压:tar -xf glibc-2.18.tar.gz
3.编译安装:
[root@localhost soft]# cd glibc-2.18
[root@localhost glibc-2.18]# mkdir build; cd build
[root@localhost build]# ../configure –prefix=/usr –disable-profile –enable-add-ons –with-headers=/usr/include –with-binutils=/usr/bin
[root@localhost build]# make -j 8
[root@localhost build]# make install

3)检查:
[root@localhost soft]# strings /lib64/libc.so.6 | grep GLIBC

二、Glibcxx3.4.18 not fund:这是glibcxx也就是C++库版本不到3.4.18,需要升级:

1,下载:
ftp://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc++6_8.2.0-9_amd64.deb
选择报错中需要的版本:libstdc++6_8.2.0-9_amd64.deb 这是目前最新的版本

如果版本404就上ftp://ftp.de.debian.org/debian/pool/main/g/gcc-8/去找

2,运行以下命令安装:
1)解压:
ar -x libstdc++6_8.1.0-10_amd64.deb
xz -d data.tar.xz
tar -xvf data.tar

2)安装:
删除:rm /usr/lib64/libstdc++.so.6
拷贝:cp usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25   /usr/lib64/
链接:ln  /usr/lib64/libstdc++.so.6.0.25  /usr/lib64/libstdc++.so.6

3)检查:

[root@localhost soft]# strings /usr/lib64/libstdc++.so.6 |grep GLIBCXX

以上如果lib/libstdc++.so.6有这个文件,而你没有更新版本,需要删除掉,不然安装的时候首先会去调用lib下的文件依旧导致出错。

发表在 服务器 | 标签为 | 留下评论

swoole的应用场景用在什么地方

  • 协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等)IM系统(用于直播页面的聊天通讯)swoole_websocket_server创建WebSocket服务器
  • 方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件设备连接通讯(定位设备) 实时收集定位数据实时输出(例:行驶轨迹)常驻内存,避免重复加载带来的性能损耗,提升海量性能。swoole_server创建TCP服务器
  • 高性能微服务架构
  • 异步消息发送(短信、邮件等)swoole_server创建TCP服务器
  • 毫秒定时
  • 做server迷你nginx等

swoole_http_server是swoole_server的子类,内置了Http的支持
swoole_websocket_server是swoole_http_server的子类, 内置了WebSocket的支持

swoole环境依赖
https://wiki.swoole.com/wiki/page/7.html

swoole编译安装

https://wiki.swoole.com/wiki/page/6.html

swoole快速起步

https://wiki.swoole.com/wiki/page/p-quickstart.html

 

发表在 服务器 | 标签为 | 留下评论

IP、TCP、UDP、HTTP、WebSocket、SOCKET之间的关系和区别

学通讯先搞清楚各种协议和通信层、套接字等。

看看标准的七层模型,亦称OSI(Open System Interconnection)参考模型

7 应用层 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
6 表示层 例如XDR、ASN.1、SMB、AFP、NCP
5 会话层 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
4 传输层 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
3 网络层 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
2 数据链路层 例如以太网、令牌环、HDLC、帧中继、ISDN、ATM、IEEE 802.11、FDDI、PPP
1 物理层 例如线路、无线电、光纤、信鸽

简化的TCP/IP四层模型主要分为:应用层、传输层、网络层、数据链路层。

大家对照着协议和层自己看看。上一层都是建立在下一层的基础上。

IP:网络层协议;(高速公路)

TCP和UDP:传输层协议;(卡车)

HTTP:应用层协议;(货物)。HTTP(超文本传输协议)是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

SOCKET:套接字,TCP/IP网络的API。(港口码头/车站)Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

Websocket:同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的,解决了服务器与客户端全双工通信的问题,包含两部分:一部分是“握手”,一部分是“数据传输”。握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

注:什么是单工、半双工、全工通信?
数据只能单向传送为单工;
数据能双向传送但不能同时双向传送称为半双工;
数据能够同时双向传送则称为全双工。

TCP/UDP区别
TCP(传输控制协议,Transmission Control Protocol):(类似打电话)
面向连接、传输可靠(保证数据正确性)、有序(保证数据顺序)、传输大量数据(流模式)、速度慢、对系统资源的要求多,程序结构较复杂,
每一条TCP连接只能是点到点的,
TCP首部开销20字节。
UDP(用户数据报协议,User Data Protocol):(类似发短信)
面向非连接 、传输不可靠(可能丢包)、无序、传输少量数据(数据报模式)、速度快,对系统资源的要求少,程序结构较简单 ,
UDP支持一对一,一对多,多对一和多对多的交互通信,
UDP的首部开销小,只有8个字节。

Socket和WebSocket区别
Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCP 或 UDP )而存在的一个抽象层。
而 WebSocket 则不同,它是一个完整的应用层协议,包含一套标准的 API 。
WebSocket 更易用,而 Socket 更灵活。

WebSocket与HTTP的区别
相同点:
1. 都是一样基于TCP的,都是可靠性传输协议。
2. 都是应用层协议。

不同点:
1. WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息。HTTP是单向的。
2. WebSocket是需要握手进行建立连接的。

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。

发表在 服务器 | 标签为 | 留下评论

centos6.8 gcc升级至4.8

为了安装swoole扩展,在cenots6.8下默认gcc版本不到最低gcc4.8要求,如果centos7就够了。

1、检查本机centos版本:
$ cat /etc/centos-release
CentOS release 6.5 (Final)

2 、导入CERN’s GPG key

rpm –import http://linuxsoft.cern.ch/cern/slc68/x86_64/RPM-GPG-KEY-cern

3、添加slc6-devtoolset yum源

wget -O /etc/yum.repos.d/slc6-devtoolset.repo http://linuxsoft.cern.ch/cern/devtoolset/slc6-devtoolset.repo

4、安装devtoolset-2

yum install devtoolset-2

5、 生效devtoolset-2

source /opt/rh/devtoolset-2/enable

可以将此命令写入.bashrc中,以免每次手动执行

echo ‘source /opt/rh/devtoolset-2/enable’ >> ~/.bashrc

6、查看gcc版本:

$ gcc -v
gcc (GCC) 4.8.2 20140120 (Red Hat 4.8.2-15)

发表在 服务器 | 标签为 | 留下评论

内网连接访问mysql时很慢

在内网无论使用PHP还是客户端去远程连接MYSQL,都要等待几秒时间,就算连接上后任何操作也是需要等待的。主要因为MYSQL默认开启了DNS的反向解析,这时候只要禁止mysql做域名解析。

[mysqld]
skip-name-resolve

加入上面语句后重启mysql即可。

发表在 服务器 | 标签为 , | 留下评论

nginx日志统计中经常使用到的命令

awk、uniq、sort、grep、cat、tail

1.awk(数据处理工具,将一行分割成多个“字段”来处理)

awk -F ‘文本切割符’‘{处理过程}’ 文件名称

如:cat /ect/passwd | awk -F ‘:’ ‘{print $1}’   #以:分割,打印第一列的数据;如果为$0表示整个文件内容

cat /etc/passwd | awk -F ”BEGIN {print “begin,goto”} {print $1″,”$7} END {print “end,end”}  #以空白符作为分割,打印begin,goto开始执行信息,打印1,7行,以end,end结束

2.uniq 命令用来过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行

参数:

-c  显示输出中,在每行行首加上本行在文件中出现的次数

-d  只显示重复行

-u  只显示文件中不重复的各行

-n  前n个字段与每个字段前的空白一起被忽略

+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)

-f   n与-n相同,这里n是字段数

-s   n与+n相同,这里n是字符数

常用: uniq -c  首行显示文件中出现的次数

3.sort 排序

参数:

-u  在输出行中去除重复行

-r   默认的排序方式为升序,-r转换为降序排列

-n  默认按照字符来排序出现10在2前面,-n以数值来排序

-t   后面设定间隔符

-k  指定列数

如:sort -n -k 2 -t : test.txt  以数值排序,按照第二列以“:”间隔来排列顺序

发表在 服务器 | 标签为 | 留下评论