PHP模块加载失败

当我们编译好 php 后,启动 php-fpm 时会出现这样一系列的模块加载失败的错误:

NOTICE: PHP message: PHP Warning:  Module 'bcmath' already loaded in Unknown on line 0
NOTICE: PHP message: PHP Warning:  Module 'curl' already loaded in Unknown on line 0
...

如图:

或者是查看 php 版本时,php -v 也会出现这样的错误。

PHP有两种方式添加扩展模块, 一种是直接编译进了PHP,另外一种是通过共享模式添加模块,并在php.ini配置文件中配置相应的模块。 在编译时的区别如下:

以下是直接编进内核的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2 \
    --with-curl \
    --with-xsl

以下是共享模式添加的示例:

./configure --prefix /usr/share/php7  \
    --enable-mbstring \
    --with-bz2=share \
    --with-curl=share \
    --with-xsl

以上问题出现的原因是我们需要的模块已经编译进PHP了,但是我们通过共享模块再次加载了这些模块,这样就导致重复加载。

解决方案:修改php.ini配置文件,注释掉相应的模块配置

;extension=pcre.so
;extension=spl.so
;extension=simplexml.so
;extension=session.so
;extension=exif.so

参考资料

参考资料


nginx 413 Request Entity Too Large 错误解决方法

今天在网站上传文件时,出现这个错误

413 Request Entity Too Large 

解决办法是打开nginx主配置文件nginx.conf,找到http{}段,修改或者添加下面的字段

client_max_body_size 30m;

然后重启nginx

./reload.sh

顺便贴一下我的 nginx.conf 配置文件的 http 设置。

http {
    access_log off;
    log_format default_format '$time_iso8601|$remote_addr|$request_method|$status|$request_length|$request_time|$http_referer|$http_user_agent|$request_uri';

    fastcgi_cache_path /var/local/nginx/fastcgi_cache/one_hour keys_zone=fastcgi_1h:16m levels=1:2 inactive=1h max_size=1g;

    limit_conn_zone $binary_remote_addr zone=conn_perip:16m;
    limit_req_zone $binary_remote_addr zone=req_perip:16m rate=2r/s;

    limit_rate_after 2048k;
    limit_rate  512k;

    client_header_timeout 8s;
    client_body_timeout 8s;
    client_max_body_size 32m;

    server_names_hash_bucket_size 64;

    gzip on;
    gzip_min_length 16384;
    gzip_types text/javascript text/css text/xml text/plain application/json application/x-javascript application/xml;

    include       mime.types;
    sendfile      on;

    keepalive_timeout  30 30;

    upstream services {
        server localhost:8090;

        keepalive  16;
    }

    include vhost/*.conf;
}

Mac 下 MySQL 安装以及 phpmyadmin 配置

MySQL 安装

安装 MySQL 有很多种方式,包括 源代码安装、homebrew安装、还有直接下载dmg安装包安装。

一切从简把,直接在官网上下载 dmg 文件,双击安装。https://dev.mysql.com/downloads/mysql/

一路无脑安装即可。在系统偏好里开启。 一般还是不要开机自启动,因为 mysql 比较耗内存,像我这的 air 就比较吃力了。

phpmyadmin 配置

phpMyAdmin. 由php开发的一个 MySQL 管理工具。在官网上下载源代码:https://www.phpmyadmin.net/downloads/

下载到本地后把文件 「config.sample.inc.php」 拷贝一份,重命名为 「config.inc.php」

找到这一行:

$cfg['Servers'][$i]['host'] = 'localhost';

改为:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

配置好 nginx/apache,就能够跑起来了。 我用的是 IDEA 自带的配置,就不那么费神了。下面是IDEA中的配置方法,可以做个参考。


阿里云服务器的安全组设置小坑

阿里云的活动不断,几乎任何时间都能看到他们在搞活动。最近阿里云国际正在搞『SSD云服务器爆款低至1.6折,年付30美元,月送1TB流量包!』 的活动, 顺手入了一台美西硅谷服务器。按照我以往使用阿里云的经验,买完之后就开箱即用了。按照惯例运行好服务器运维的脚本,陆续开启各种服务了。

让我意外的是在其他服务器上可以使用的一些自定义接口,阿里云上始终没法连接上。

一开始也没有多想,以为是自己哪里没配置好。毕竟脚本也是边写边改的,出现问题也正常。安装几次还是不成功。谷歌之后终于有了方向——还有个安全组策略 ——前几天介绍的idcf 也是如此。然而不一样的是,idcf 是完全没有配置任何东西,所以一开始连 ssh 都是没办法连上的。

相比之下阿里云的防火墙策略就『智能』了很多——ssh 和 80 端口都给你开了,偏偏就是不给你开其他端口,让你连不上的时候干着急 Orz = =。

于是问题解决,修改安全组里的规则即可。入口和出口都要设置:


Debian 下 PHP7 编译安装和 MySQL支持

在 php7 环境中,编译和支持MySQL这一块把我折腾的蛮辛苦的,相信不少人也同样遇到,记录一下这个坑。

不知道从哪一版本开始,PHP不在希望使用mysql的库来支持mysql的连接,启用了mysqlnd来支持,编译都没有了–with-mysql参数,只支持–with-mysqli和–with-pdo-mysql,可以通过查看configure的参数来知道:

./configure -help | grep mysql

  --with-mysqli=FILE      Include MySQLi support.  FILE is the path
                          to mysql_config.  If no value or mysqlnd is passed
  --enable-embedded-mysqli
  --with-mysql-sock=SOCKPATH
  --with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                          If no value or mysqlnd is passed as DIR, the
  --enable-mysqlnd        Enable mysqlnd explicitly, will be done implicitly
  --disable-mysqlnd-compression-support
                          Disable support for the MySQL compressed protocol in mysqlnd
  --with-zlib-dir=DIR     mysqlnd: Set the path to libz install prefix

可以看到,PHP希望使用mysqlnd来支持MySQL,所以参数可以这样写:

–enable-mysqlnd

–with-mysqli=mysqlnd

–with-pdo-mysql=mysqlnd

列一下我的 config 参数:

./configure --prefix /usr/share/php7  \
    --enable-fpm  \
    --enable-mysqlnd  \
    --enable-gd-native-ttf \
    --enable-mbstring \
    --enable-zip \
    --enable-calendar \
    --enable-bcmath \
    --enable-exif \
    --enable-intl \
    --enable-opcache  \
    --enable-shmop \
    --enable-soap \
    --enable-sockets \
    --with-fpm-user=www-data  \
    --with-fpm-group=www-data  \
    --with-pcre-regex \
    --with-kerberos  \
    --with-openssl \
    --with-mcrypt \
    --with-zlib \
    --with-bz2 \
    --with-curl \
    --with-gd \
    --with-jpeg-dir=/usr/include/jpeg8  \
    --with-png-dir=/usr/include/libpng12  \
    --with-gettext \
    --with-gmp \
    --with-mhash \
    --with-pgsql \
    --with-pdo-pgsql \
    --with-mysqli \
    --with-pdo-mysql=mysqlnd \
    --with-xsl

参考资料