• 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在线手册

    http://book.ecmoban.com/

    调试:

    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
    
  • 相关阅读:
    【转】Jmeter 定时器之Constant Timer
    资源变现资讯、自媒体、新闻、博客小程序带pc后台管理系统
    零基础搭建智能垃圾分类小程序
    当两个对象相互引用,在调用toString方法时产生StackOverflowError
    UML图解
    Canal监听数据库表的变化
    JVM总结
    微服务总结
    Netty总结
    Mysql总结
  • 原文地址:https://www.cnblogs.com/newsea/p/7726454.html
Copyright © 2020-2023  润新知