其实也有不少能用的集成开发环境,但是我需要各种模块、配置,修改起来特别麻烦,于是就想自己编译安装。经过不断尝试,终于见到成果了,因为具体环境的问题复杂多变,本文操作只能当做参考,具体问题要具体对待。

注:当前我的系统是10.15。

准备

  • macOS 10.14+

  • nginx-1.10.1,php-5.6.26,pcre-8.39,openssl-1.0.1等

  • MySQL 安装包(.dkg)

安装

  • 准备


① 将 /usr/local/ 的 owner 改为当前用户 sudo chown -R username /usr/local/  

② 新建目录 etc  存放所有的配置文件 ,并将 nginx、php 的配置文件分开存放

mkdir -R /usr/local/etc/nginx

mkdir -R /usr/local/etc/php5

nginx 安装

./configure --prefix=/usr/local/nginx --conf-path=/usr/local/etc/nginx/nginx.conf --with-pcre=../pcre-8.39 --with-openssl=../openssl-1.0.1u --with-http_v2_module --with-http_ssl_module --with-http_gunzip_module --with-http_gzip_static_module

中间会有提示

Operating system: i686-apple-darwinDarwin Kernel Version 15.6.0: Mon Aug 29 20:21:34 PDT 2016; root:xnu-3248.60.11~1/RELEASE_X86_64
WARNING! If you wish to build 64-bit library, then you have toinvoke './Configure darwin64-x86_64-cc' *manually*.
You have about 5 seconds to press Ctrl-C to abort.

暂时可以无视,继续就行。

等待结束之后

cd objs
vi Makefile

修改

./config 为 ./Configure darwin64-x86_64-cc

然后就可以

make && make install

至此,nginx 安装编译完成。

为方便使用,还可以这样

ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/

前提是 /usr/local/bin/ 已经加入环境变量里。

至于配置,待 php 安装完成后一起配置。

MySQL 安装

这个是最简单的了,直接从官网下载 dkg 双击安装即可,需要注意的是,再安装完成时,会有一个弹出窗口告诉你,root 的初始密码,而且需要修改之后才可以正常登陆。

php 安装

php 安装有两种选择,一个是编译的时候直接使用 php 默认的参数,这样的话,在使用的时候需要什么模块就需要另外再编译了,这样的好处是到时可以按需编译,需要的再添加,缺点就是麻烦,要一个一个编译,另一个就是一次性把可能需要的所有模块都编译进去。

这里选的是第二种,因为,第一种的编译很简单,只有在后期添加模块的时候才是难点。

另提供第一种的简单编译命令

./configure --prefix=/usr/local/php && make && make install

下面开始第二种的详细编译过程。

①需要安装  php 所需要的依赖,视个人情况而定,需要用什么自己找。

我这里的依赖有 gettext,icu,libmcrypt,mcrypt,mhash,openssl等。

安装依赖的时候直接使用

./configure && make && make install

这样可以避免很多各种各样的错误,遇到错误多百度。

  • 注:  在安装 mcrypt 时,可能报错

rfc2440.c:26:10: fatal error: 'malloc.h' file not found
#include <malloc.h>
^
1 error generated.
make[2]: *** [rfc2440.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

只需要找到源码中的src/rfc2440.c 第26行

#include <malloc.h>

改为


 

即可

依赖安装完成之后就可以编译  php5  了。

php5编译参数

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

随后就可以

make && make install

 

编译  php7  的时候

php7编译参数

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

 

make过程中遇到报错

Undefined symbols for architecture x86_64:
  "_PKCS5_PBKDF2_HMAC", referenced from:
        _zif_openssl_pbkdf2 in openssl.o  
  "_TLSv1_1_client_method", referenced from:
        _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_1_server_method", referenced from:
        _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_client_method", referenced from:
        _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_server_method", referenced from:
        _php_openssl_setup_crypto in xp_ssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [sapi/cli/php] Error 1

 

因为找不到openssl的动态链接库,需要

ln -s /usr/local/ssl/lib/* /usr/local/lib/

 

复制一份配置文件

cp php.ini-development /usr/local/php5/etc/php.ini

 

同样可以使用

ln -s /usr/local/php5/bin/php /usr/local/bin/
ln -s /usr/local/php5/bin/phpize /usr/local/bin/
ln -s /usr/local/php5/sbin/php-fpm /usr/local/bin/

 

配置

① 配置 php

cp /usr/local/php5/etc/php-fpm.conf.default php-fpm.conf

修改 php-fpm.conf

user = nobody
group = nobody
listen = 127.0.0.1:9000
listen.owner = nobody
listen.group = nobody

修改为

user = lijianqiang
group = staff
listen = var/run/php-fpm.sock
listen.owner = lijianqiang
listen.group = staff

修改 /usr/local/nginx/conf/nginx.conf

#user nobody;

改为

user lijianqiang staff;

server 段添加

root /Users/lijianqiang/Web;
autoindex on;
index index.html index.htm index.php

修改

#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}

location ~ \.php$ {
    fastcgi_pass   unix:/usr/local/php5/var/run/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi.conf;
}

最后删除多余配置即可

 

启动&&重启

sudo nginx //启动
sudo nginx -s quit //停止
sudo nginx -s reload //重启
sudo php-fpm //启动
sudo killall php-fpm && sudo php-fpm //重启