Php7 开发笔记
Ubuntu环境安装
http://www.jianshu.com/p/1d312d9f1be1
sudo apt-get install python-software-properties software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0-fpm php7.0-cli php7.0-mcrypt php7.0-mysql php7.0-mbstring php7.0-xml
安装php5
http://blog.csdn.net/u014796999/article/details/52583933
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6
sudo apt-get install php5.6-fpm
版本切换
http://blog.csdn.net/u012508757/article/details/77449818
PHP 5.6 => PHP 7.1
sudo a2dismod php5.6
sudo a2enmod php7.1
sudo service apache2 restart
sudo update-alternatives --set php /usr/bin/php7.1
PHP 7.1 => PHP 5.6
sudo a2dismod php7.1
sudo a2enmod php5.6
sudo service apache2 restart
sudo update-alternatives --set php /usr/bin/php5.6
两种方式
Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.
UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM
像mysql命令行客户端连接mysqld服务也类似有这两种方式:
使用Unix Socket连接(默认):
mysql -uroot -p --protocol=socket --socket=/tmp/mysql.sock
使用TCP连接:
mysql -uroot -p --protocol=tcp --host=127.0.0.1 --port=3306
配置
执行: php-config 可以看到配置项。
总的配置文件是 : /etc/php/7.0/fpm/php-fpm.conf
里面 include=/etc/php/7.0/fpm/pool.d/*.conf , 但是还有一个很重要: /etc/php/7.0/fpm/php.ini
sudo gedit /etc/php/7.0/fpm/pool.d/www.conf
查看 listen 是: /run/php/php7.0-fpm.sock
配置nginx
sudo gedit /etc/nginx/sites-available/default
配置:
server {
listen 81;
server_name u.cn;
index index.html index.php;
root /var/www/ecshop2;
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
安装扩展
安装扩展: 以下两种写法一样
sudo apt-get install php7.0-gd
or
sudo apt-get install php-gd
查询扩展: sudo apt-cache search xdebug
安装: sudo apt-get install -y php-xdebug
查看安装位置: dpkg -L php-xdebug
可以看到安装了很多版本,很多位置 .
sudo apt-cache search mysql
sudo apt install php5.6-mysql
安装好不用配置.就可以使用.
sudo service php-fpm restart
5.6版本,也需要以上方式安装扩展。
以下部分不要动:
修改: vi /etc/php/7.0/fpm/php.ini
;extension=php_gd2.dll
;extension_dir = "./"
如果打开 extension_dir,所以使用 apt install php-扩展 安装的扩展都不能使用了。
原因是:安装的扩展的位置在/etc/php/7.0/fpm/conf.d 中,这都是软链接,查看引用到: /etc/php/7.0/mods-available 里,查看 gd.ini,发现只有一句: extension=gd.so , 全局搜: sudo find / -name "gd.so" ,在 /usr/lib/php/20151012/gd.so , 至此找到了 php扩展的位置 , 所以注释掉 php.ini 里的 extension_dir 是错误的。 也说明 php7目前的配置还很混乱。
扩展步骤
- /usr/lib/php/20151012/ 文件夹下有 .so 文件 。
- /etc/php/7.0/mods-available 文件夹里有 .ini文件 , 有 extension= .so
- /etc/php/7.0/fpm/conf.d 里建立软链接
php7 不支持 mysql 扩展,改用 mysqli .强行安装:
http://www.cnblogs.com/ghjbk/p/6740501.html
所有的文章中配置这一项都是错的。
#先下载 http://git.php.net/?p=pecl/database/mysql.git;a=summary
#解压
tar xzvf mysql-230a828.tar.gz
#进入
cd mysql-230a828/
#使用phpize初始化
下载:sudo apt-get install phpize
使用: phpize
#编译mysql扩展
./configure --with-php-config=/etc/php/7.0/fpm/conf.d --with-mysql=mysqlnd
sudo make install
#重启php
sudo service php7.1-fpm restart
刚查到 apt安装的扩展都在 /etc/php/7.0/fpm/conf.d 里, 所以,mysql 的配置项 --with-php-config 应该指的是 mysqlnd的配置项地址。
Zend Guard Loader
http://www.itbulu.com/wdcp-upgrade-php569.html
wget http://soft.itbulu.com/wdcp/zendguard7.sh
sh zendguard7.sh 5.6
ECShop在线手册
调试:
https://www.cnblogs.com/derrck/p/5195946.html
sudo gedit /etc/php/5.6/fpm/php.ini 最后添加:
xdebug.remote_enable=1
xdebug.idekey=PHPSTORM
xdebug.profiler_enable=1
Php7 开发笔记的更多相关文章
- [开发笔记]-未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出【转载自:酷小孩】
原文地址:http://www.cnblogs.com/babycool/p/3199158.html 今天打算用VisualStudio2012做一个js效果页面测试的时候,打开VS2012新建项目 ...
- EasyUI 开发笔记(二)
接上篇 :EasyUI 开发笔记(一) (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...
- EasyUI 开发笔记(一)
由于某些原因,在公司做的后台需要改成类似于Ext.js 形式的后台,主要看好其中的 框架布局,以及tab开页面和弹出式内部窗体. 后来看看,改成EasyUI,较Ext.js 库小很多,也便于公司的初级 ...
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 最近开始着手进行Openwrt平台的物联网网关设 ...
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
引言 Cordova(PhoneGap)采用的是HTML5+JavaScript混合模式来开发移动手机APP,因此当页面需要获取手机内部某些信息时(例如:联系人信息,坐标定位,短信等),程序就需要调用 ...
- Android移动APP开发笔记——最新版Cordova 5.3.1(PhoneGap)搭建开发环境
引言 简单介绍一下Cordova的来历,Cordova的前身叫PhoneGap,自被Adobe收购后交由Apache管理,并将其核心功能开源改名为Cordova.它能让你使用HTML5轻松调用本地AP ...
- 开发笔记:基于EntityFramework.Extended用EF实现指定字段的更新
今天在将一个项目中使用存储过程的遗留代码迁移至新的架构时,遇到了一个问题——如何用EF实现数据库中指定字段的更新(根据UserId更新Users表中的FaceUrl与AvatarUrl字段)? 原先调 ...
- Lucene/Solr搜索引擎开发笔记 - 第1章 Solr安装与部署(Jetty篇)
一.为何开博客写<Lucene/Solr搜索引擎开发笔记> 本人毕业于2011年,2011-2014的三年时间里,在深圳前50强企业工作,从事工业控制领域的机器视觉方向,主要使用语言为C/ ...
- [openwrt 项目开发笔记]: 传送门
“Openwrt 项目开发笔记”系列传送门: [Openwrt 项目开发笔记]:Openwrt平台搭建(一) (2014-07-11 00:11) [Openwrt 项目开发笔记]:Openwrt平台 ...
随机推荐
- sublime text 3 优化配置
目录 1. sublime text 3 模板插件 SublimeTmpl 配置 修改模板内容格式 修改快捷键 2. 设置sublime text的 TAB 为4个空格 3. 添加markdown支持 ...
- Spring入门详细教程(三)
前言 本篇紧接着spring入门详细教程(二),建议阅读本篇前,先阅读第一篇和第二篇.链接如下: Spring入门详细教程(一) https://www.cnblogs.com/jichi/p/101 ...
- Windows Server 2016-Nano Server介绍
WindowsServer 2016 提供了新的安装选项:Nano Server.Nano Server 是针对私有云和数据中心进行优化的远程管理的服务器操作系统. 类似于 Windows Serve ...
- 关于.NET字符串驻留的问题
默认情况下,CLR会把字符串常量保存在字符串池中..NET 2.0引入了CompilationRelaxations.NoStringInterning枚举成员.这个枚举CompilationRela ...
- GitHub-分支管理03-多人合作【重点】
参考博文:廖雪峰Git教程 1. 多人协作 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin. 要查看远程库的信 ...
- LeetCode算法题-Reverse Bits(Java实现)
这是悦乐书的第185次更新,第187篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第44题(顺位题号是190).给定32位无符号整数,求它的反转位.例如: 输入:4326 ...
- python 黏包现象及其解决方案
一.数据缓冲区 缓冲区(buffer),它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区,显然缓冲区是具有一定大小的 ...
- ES6切割原理
ES6提供了 ... 操作,下面简单演示如何切割对象 const params = { page: 1, pageSize: 10, name: '名字', age: '13', weight: '7 ...
- ant.design React使用Echarts,实力踩坑
最近项目用到Echarts(以下用ec代替),于是照猫画虎得引入到团队的antd项目中,但是遇到2个棘手问题: 1. ec对dom不渲染,检查后发现,原来是全局存在id重复,所以使用React时,最好 ...
- node基础—模块系统
模块的概念 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块加载系统. 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块),换言之,一个 Node ...