在macOS Sierra 10.12搭建PHP開發環境

来源:http://www.cnblogs.com/jxlwqq/archive/2016/10/26/6001323.html
-Advertisement-
Play Games

macOS Sierra 已經幫我們預裝了 Ruby、PHP(5.6)、Perl、Python 等常用的腳本語言,以及 Apache HTTP 伺服器。由於 nginx 既能作為 HTTP 伺服器也能作為反向代理伺服器,且配置簡單,這裡我們用 nginx 代替 Apache 作為我們預設的 HTTP ...


macOS Sierra 已經幫我們預裝了 Ruby、PHP(5.6)、Perl、Python 等常用的腳本語言,以及 Apache HTTP 伺服器。由於 nginx 既能作為 HTTP 伺服器也能作為反向代理伺服器,且配置簡單,這裡我們用 nginx 代替 Apache 作為我們預設的 HTTP 伺服器。

下麵是我在 macOS Sierra 配置的 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

安裝包管理器

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,PHP動態編譯 phpize 時需要:

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
./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 地址


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IOC模式: 1.IOC模式:通過一個播放器的例子來說明什麼是依賴,依賴倒置,控制反轉(IOC),最後實現依賴註入。通過Unity實現IOC容器 http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html 2.深入理解DIP、IoC、DI ...
  • 做開發的,可能都做過信息採集相關的程式,史林楓也經常做一些數據採集或某些網站的業務辦理自動化操作軟體。 獲取目標網頁的信息很簡單,使用網路編程,利用HttpWebResponse、HttpWebRequest和WebClient就可以了。 複雜的是獲取網頁內容後,需要對關鍵信息進行過濾,最初史林楓主 ...
  • 在64位的Windows操作系統中,為了相容32位程式的運行,64位的Windows操作系統採用重定向機制。目的是為了能讓32位程式在64位的操作系統不僅能操作關鍵文件文夾和關鍵的註冊表並且又要避免與64位程式衝突 在64位的Windows操作系統上,可以運行32位的應用程式,這是通過一個叫做WOW ...
  • 調用DelectDir方法前可以先判斷文件夾是否存在 原文地址:http://www.cnblogs.com/iamlucky/p/5997865.html ...
  • 為滿足性能、擴展性、業務快速交付等方面的要求,新.net core雲開發框架改造的主要思想是:高內聚、低耦合,即進一步實現縱向和橫向分層,提高可伸縮性和可擴展性,實現彈性部署: 採用領域驅動設計進行架構橫向分層,同時業務功能縱向分割 在代碼和資料庫設計上充分考慮雲架構要素,提高可伸縮性、可擴展性、高 ...
  • querystring處理參數的小利器。 下麵是querystring的四個方法。 ①stringify:將一個參數對象序列化為一個字元串 eg: querystring.stringify({name:'jenny',course:['js','node'],from:''}); 輸出:'name ...
  • 一。開發的準備 1.jdk的安裝(window) (1)根據自己的電腦下載對應的jdk,並安裝 (推薦安裝在沒有中文的目錄中)。 網站 http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk7-downloads-1880260. ...
  • 一、AbstractCollection 提供了集合的最大實現 繼承該類,必須實現size()和iterator(),因為該類操作集合都是通過iterator 二、fail-fast策略 該策略在集合框架中多次被應用 一種多線程對同一集合操作的保護措施,確保操作目標沒有被其他線程操作過,與cas思想 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...