macOS Sierra 11.12 已经帮我们预装了 Ruby、PHP(5.6)、Perl、Python 等常用的脚本语言,以及 Apache HTTP 服务器。由于 nginx 既能作为 HTTP 服务器也能作为反向代理服务器,且配置简单,这里我们用 nginx 代替 Apache 作为我们默认的 HTTP 服务器。喜欢用 Apache 的同学可以移步:The Perfect Web Development Environment for Your New Mac

下面是我在 macOS Sierra 配置的 PHP 开发环境(MacOS-nginx-MySQL-PHP):

安装命令行终端

这里我们选择 iTerm2,iTerm2 功能强大,可以替代系统默认的命令行终端。下载解压后,将iTerm2 直接拖入"应用程序"目录。

安装 IDE

这里我们选择 JetBrains PhpStorm 作为集成开发环境。这个应该是这个星球最棒的 PHP IDE 了。

安装 Xcode

Xcode 是苹果出品的包含一系列工具及库的开发套件。

通过 App Store 安装最新版本的 Xcode。我们一般不会用 Xcode 来开发 PHP 项目。但这一步也是必需的,因为 Xcode 会帮你附带安装一些如 Git 等必要的软件。当然你也可以通过源码包安装 Git。

安装 Xcode Command Line Tools

这一步会帮你安装许多常见的基于 Unix 的工具。Xcode 命令行工具作为 Xcode 的一部分,包含了 GCC 编译器。在命令行中执行以下命令即可安装:

xcode-select --install

当 Xcode 和 Xcode Command Line Tools 安装完成后,你需要启动 Xcode,并点击同意接受许可协议,然后关闭 Xcode 就可以了。这一步骤也是必须的,否则Xcode包含的一系列开发工具都将不可用,例如 Git。

安装包管理器

Homebrew 作为 macOS 不可或缺的套件管理器,用来安装、升级以及卸载常用的软件。在命令行中执行以下命令即可安装:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装后可以修改 Homebrew 源,国外源一直不是很给力,这里我们将 Homebrew 的 git 远程仓库改为中国科学技术大学开源软件镜像:

cd "$(brew --repo)"
git remote set-url origin git://mirrors.ustc.edu.cn/brew.git

安装 HTTP 服务器

这里我们选择 nginx 代替系统自带的 Apache,作为我们的 HTTP 服务器:

brew install nginx

安装完成后,nginx 的一些常用命令:

sudo nginx # 启动 nginx 服务
nginx -h # nginx 帮助信息
sudo nginx -s stop|quit|reopen|reload # 停止|退出|重启|重载 nginx 服务

安装数据库

这里我们选择 MySQL 作为我们的数据库服务器:

brew install mysql

当然,你也可以选择安装 PostgreSQL 或者 MariaDB。

安装完成后,启动 MySQL:

mysqld

如果不执行上述操作,直接通过命令行进入 MySQL,一般会报一个 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’ 的错误。

进入 MySQL 服务器:

mysql -u root -p

开启 PHP-FPM

nginx 本身不能处理 PHP,它只是个 HTTP 服务器,当接收一个 PHP 请求后,nginx 会将其交由 PHP 解释器处理,并把结果返回给客户端。nginx 一般是把请求发 FastCGI 管理进程处理,FastCGI 管理进程选择 CGI 子进程处理结果并返回被 nginx。

PHP-FPM 是一个 PHP FastCGI 管理器,一开始只是 PHP 源代码的一个补丁,旨在将 FastCGI 进程管理整合进 PHP 包中。必须将它 patch 到 PHP 源代码中,在编译安装 PHP 后才可以使用。PHP 从版本 5.3 开始官方集成 PHP-FPM。

添加 PHP-FPM 的配置文件:

cp /private/etc/php-fpm.conf.default /private/etc/php-fpm.conf
php-fpm --fpm-config /private/etc/php-fpm.conf

修改 PHP-FPM 的 error_log 路径:

vi /var/log/php-fpm.log # 新建文件
vi /private/etc/php-fpm.conf # 将 error_log=log/php-fpm.log 修改为:error_log = /var/log/php-fpm.log,保存

启动 PHP-FPM:

sudo php-fpm

关闭 PHP-FPM:

ps aux|grep php-fpm
sudo kill php-fpm min pid # 杀死 php-fpm 最小的进程id

配置 nginx.conf 文件

通过以下命令可以查看 nginx.conf 文件的位置:

nginx -h

输出:

nginx version: nginx/1.10.1
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives] Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/Cellar/nginx/1.10.1/)
-c filename : set configuration file (default: /usr/local/etc/nginx/nginx.conf)
-g directives : set global directives out of configuration file

打开配置文件:

vi /usr/local/etc/nginx/nginx.conf

在文件末尾可以看到:

include servers/*;

它将同目录下的servers目录里的文件都包含了进来,由此,我们可以在servers文件里创建开发项目的配置信息:

cd servers/
vi test.conf

将以下配置信息,写入 test.conf文件中:

server {
listen 8099;
server_name localhost;
root /home/www/php_project;
rewrite . /index.php;
location / {
index index.php index.html index.htm;
autoindex on;
} #proxy the php scripts to php-fpm
location ~ \.php$ {
include /usr/local/etc/nginx/fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}
}

在上述的/home/www/php_project的目录下,我们创建一个 index.php 文件:

cd /home/www/php_project
vi test.php

写入内容:

<?php
phpinfo();

重启 nginx:

sudo nginx -s stop
sudo nginx

打开浏览器,访问localhost:8099。可以看到关于 PHP 配置的信息。

至此,MNMP(MacOS-nginx-MySQL-PHP) 环境已经搭建完成。

安装 PHP 扩展

环境搭建完成后,你可能还需要安装一些 PHP 扩展,如 MemCache、Redis、Mongo、Solr 等。

在安装 PHP 扩展之前,你需要完成一些必要的操作

关闭 SIP

这是安装 PHP 扩展前的必要操作。如果跳过这一操作,即使你用 sudo 命令安装扩展,依旧会报 Operation not permitted 的错误。这是因为 OSX 10.11 El Capitan(或更高)新添加了一个新的安全机制叫系统完整性保护 System Integrity Protection (SIP),所以对于以下目录:

  • /System
  • /sbin
  • /usr 不包含(/usr/local/)

仅仅供系统使用,其它用户或者程序无法直接使用,而我们的 /usr/lib/php/extensions/ 则刚好在受保护范围内(误伤世界上最好的语言)。

所以解决方法就是禁掉 SIP 保护机制,步骤是:

  1. 重启系统
  2. 按住 Command + R(重新亮屏之后就开始按,象征地按几秒再松开,直到出现苹果标志性的 Logo)
  3. 菜单“实用工具” ==>> “终端” ==>> 输入:csrutil disable。执行后会输出:Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect
  4. 重启系统

当然,PHP 扩展安装完成后,就可以重新打开 SIP,方法同上,命令改为:csrutil enable

安装一些必要的依赖包

安装 autoconf,phpize 生成 PHP 编译配置时需要:

brew install autoconf

安装 openssl,安装某些 PHP 扩展如 mongo 时需要:

brew install openssl

mongo 扩展安装是可能会报 openssl 错误,解决方法如下:

ln -s /usr/local/Cellar/openssl/1.0.2j/include/openssl /usr/include/openssl

正式安装扩展

这里有两种方法安装 PHP 扩展:

  • 通过 pecl 管理工具安装
  • 通过源码包安装

通过 pecl 管理工具安装

首先安装 pecl:

cd /usr/lib/php
sudo php install-pear-nozlib.phar

pecl 一般就会安装成功,如果失败,换另一种方式安装 pecl:

curl -O http://pear.php.net/go-pear.phar
sudo php -d detect_unicode=0 go-pear.phar
  1. 输入 1,回车,输入/usr/local/pear
  2. 输入 4,回车,输入/usr/local/bin
  3. 回车

安装好 pecl 之后,我们就可以愉快地安装 PHP 扩展了:

sudo pecl install solr
sudo pecl install memcache
sudo pecl install mongo

通过源码包安装

除了通过 pecl 安装,我们还可以通过下载源码包来进行安装扩展:

wget http://pecl.php.net/get/redis-2.2.8.tgz
tar -zxvf redis-2.2.8.tgz
cd redis-2.2.8
phpize # 生成 php 编译配置
./configure # 编译配置检测
make # 编译
sudo make install # 安装

扩展安装完成后,我们还需最后一步,修改php.ini文件,并重启 PHP-FPM:

cd /private/etc/
cp php.ini.default php.ini
vi php.ini

追加扩展信息:

extension=memcache.so
extension=mongo.so
extension=redis.so
extension=solr.so

重启 PHP-FPM:

ps aux|grep php-fpm
sudo kill php-fpm min pid # 杀死 php-fpm 最小的进程id
sudo php-fpm

打开浏览器,访问localhost:8099。查看扩展是否安装成功。

参考

github 地址

在macOS Sierra 10.12搭建PHP开发环境的更多相关文章

  1. 在 macOS High Sierra 10.13 搭建 PHP 开发环境

    2017 年 9 月 26 日,苹果公司正式发布了新一代 macOS,版本为 High Sierra (11.13). macOS High Sierra 预装了 Ruby(2.3.3).PHP(7. ...

  2. macOS Sierra 10.12.6 odoo 10.0 开发环境配置

    参考了网上的一些教程,将最终过程记录一下,其中需要的一些程序,我已经放到百度网盘: https://pan.baidu.com/s/1boKHSTL 1.抹盘安装macOS Sierra 10.12. ...

  3. 【Ruby】【环境搭建】macOS Sierra 10.12.6 + Xcode 8 + gpg 2.2.8 + rvm 1.29.3 + Ruby 2.4.0 + RubyMine 2018.1.4

      按出场顺序: macOS Sierra 10.12.6  +  Xcode 8 + gpg 2.2.8 + rvm 1.29.3 +  Ruby 2.4.0 + RubyMine 2018.1.4 ...

  4. macOS Sierra(10.12.6), odoo(11.0), Python(3.5.4)配置

    欣闻odoo11支持python3环境了,赶紧在mac平台尝试一下: 前期设置,参考另篇文章:macOS Sierra 10.12.6 odoo 10.0 开发环境配置 因为odoo11尚未正式发布, ...

  5. macOS Sierra 10.12.4 (16E195) - Clover [ 20170403 ]

    原文:https://user.qzone.qq.com/753313822/blog/1424460141?_t_=0.48652242555134495 建议使用 1920 * 1080 屏幕分辨 ...

  6. 黑苹果macOS Sierra 10.12 安装教程(venue11 pro测试)

    黑苹果macOS Sierra 10.12 安装教程(venue11 pro测试) 2017-03-12 03:46:24 by SemiconductorKING PS:刚刚装好黑苹果,来记录一篇折 ...

  7. 【转】如何在VMware上安装macOS Sierra 10.12

    本文主要介绍目前网络上比较流行的使用预安装镜像安装macOS 10.12的方法,并以9月20号发布的最新GM版本16A323为例. 安装方案 破解VMware 创建虚拟机,加载预安装镜像 初始化mac ...

  8. 在 Ubuntu 13.10 中搭建Java开发环境 - 懒人版

    本文记录我在Ubuntu 13.10中搭建Java开发环境. 本文环境: Ubuntu 13.10 x64运行在Win7下的VMware Workstation 10中. 1. 安装JDK与JRE s ...

  9. macOS Sierra 10.12.6 安装u盘制作

    一.准备工作: 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据) 从这里下载苹果官方 OS X Yosemite 正式版的安装程序 (可选 AppS ...

随机推荐

  1. 锁升级(Lock Escalations)——它们经常发生么?

    前段时间,我写了一些SQL Server里锁升级的基础知识,还有它是如何影响执行计划的.今天,我想进一步谈下锁升级: 锁升级什么时候发生? 通常在SQL Server里如果在SQL语句里你请求的行数超 ...

  2. ASP.NET MVC 使用 FluentScheduler 定时器计划任务

    MacBook Pro 只有四个 USB Type-C 接口是否错了? 一项新技术的诞生总会对已存在的事物造成冲击或影响,如果大家都害怕冲击与影响,那这个世界永远像现在不变就行了,大家都好好的,待在自 ...

  3. iOS 商品倒计时 限时特价 限时优惠 功能的封装

    最近项目中多个页面用到了 商品特价倒计时的功能  为了偷懒 于是自己封装了一个限时抢购 倒计时的view 代码实现如下: 定向价 限时特价 模型代码实现: #pragma mark 商品定向价模型 @ ...

  4. JAVA错误汇总

    1.Slf4J-API版本兼容 问题描述 Exception in thread "main" java.lang.NoSuchMethodError: org.slf4j.hel ...

  5. Effective java笔记(四),泛型

    泛型为集合提供了编译时类型检查. 23.不要在代码中使用原生态类型 声明中具有一个或多个类型参数的类或接口统称为泛型.List<E>是一个参数化类,表示元素类型为E的列表.为了提供兼容性, ...

  6. C#循环测试题

    关于如下程序结构的描述中,哪一项是正确的?   for ( ; ; ) { 循环体; //何问起   }   a) 不执行循环体b) 一直执行循环体,即死循环c) 执行循环体一次d) 程序不符合语法要 ...

  7. 【Win10开发】绘制静态UI

    相信经历过Windows Insider的人对下面这个图都不会陌生,偶然看见邹欣老师领导的微软团队写了篇用xaml绘制这个静态页面,那咱也来亲手实验一番.唔...请做和放宽! 首先我们来看看xaml代 ...

  8. C++_系列自学课程_第_8_课_指针和引用_《C++ Primer 第四版》

    C语言最富有迷幻色彩的部分当属指针部分,无论是指针的定义还是指针的意义都可算是C语言中最复杂的内容.指针不但提供给了程序员直接操作硬件部分的操作接口,还提供给了程序员更多灵活的用法.C++继承这一高效 ...

  9. Eclipse导入项目出现红色叹号的解决方法

    情景: 我在另一台电脑开发Java Web项目,开发环境为 JDK 1.7,Tomcat v7.0,然后导入另一台电脑上,开发环境为为 JDK 1.8,Tomcat v8.0. 问题: 导入项目出现红 ...

  10. PHP规范PSR2

    为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的.各个成员项目间的共性组成了这组代码规范.当开发者们在多个项目中合作时,本指南将会成为所有这些项目中共用 ...