使用Homebrew安裝Apache跟PHP8.X版
使用Homebrew安裝Apache跟PHP8.X版
我的系統
macOS Monterey 12.4
自 2022 年 4 月 21 日起,Apple 已停止提供「macOS 伺服器」。
在 macOS 12 Monterey 上,系統內建了 Apache。但是,當您檢視 Apache 內建的 httpd.conf 時,您會注意到有一行說:#PHP was deprecated in macOS 11 and removed from macOS 12
從 macOS 12 Monterey 開始,由於沒有內建 PHP,如果您想設定 MAMP(macOS、Apache、Mysql、PHP)堆疊,我建議使用 Apache 的 Homebrew 版本以及 PHP。
禁用 macOS 內建 Apache
關閉 Mac OS 原生的 Apache 並防止他自行啟動。
$ sudo apachectl stop
禁止 apache httpd 自動啟動
$ sudo launchctl unload /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null
安裝 Home-brew
檢查您是否安裝了 Homebrew 或知道安裝的 Homebrew 版本開啟Terminal並輸入brew -v。
若沒安裝,轉到 https://brew.sh/
安裝指令,第一次會有點久。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
利用 HomeBrew 安裝 apache
$ brew install httpd
安裝後的路徑:/opt/homebrew/etc/httpd/
保留原始配置檔案的副本(選擇性)
$ sudo cp httpd.conf httpd.conf.bak
利用 nano 、 vi 或 其它文字編輯器打開httpd.conf
進行編輯。
$ sudo nano httpd.conf
啟用模組和配置
修改/更新httpd.conf檔案中的配置。
要啟用模組,首先,您需要找到要啟用的模組。
用command + F 搜尋功能,查詢以下模組並確定取消註釋(刪除#每行前面的。)
LoadModule authn_core_module lib/httpd/modules/mod_authn_core.so
LoadModule authz_host_module lib/httpd/modules/mod_authz_host.so
LoadModule userdir_module lib/httpd/modules/mod_userdir.so
LoadModule include_module lib/httpd/modules/mod_include.so
LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
Include /opt/homebrew/etc/httpd/extra/httpd-userdir.conf
修改 DocumentRoot
使用 command + F 搜尋 DocumentRoot
底下因為預設的資料夾路徑較深,所以改成較淺的路徑,記得要在 username 底下新增 Sites 的資料夾。
DocumentRoot "/Users/`username`/Sites/“
<Directory "/Users/`username`/Sites/“>
修改監聽埠
預設情況下,是監聽埠8080,如果要監聽埠80,則修改Listen 8080為Listen 80。
使用 command + F 搜尋Listen 8080然後替換為Listen 80
利用 Homebrew 安裝 PHP
如果沒有指定安裝版本,將會安裝最新版本。
Hombrew 指令
//先確保brew是最新版本的
brew update
//通常內建會有PHP,可以先確認版本號
brew upgrade php
//也可指定版本號進行安裝
brew install php@7.4
//最後確認版本號
php -v
安裝
$ brew install php
7.修改 httpd.conf 以在 Apache 上啟用 PHP
開啟終端
輸入cd /opt/homebrew/etc/httpd/
輸入sudo nano httpd.conf 編輯
新增以下幾行。
如果安裝的版本是 7.X 版,請加入下面這行:
LoadModule php7_module /usr/local/Cellar/php@7.1/7.1.33_4/lib/httpd/modules/libphp7.so
如果安裝的版本是 8.X 版,請加入下面這行:
網路上很多的資料都是將前面的 php7_module 改成 php_module ,但是仔細去看路徑,既然是安裝 8.X 版,路徑應該也是要改成 8.X 版,所以要花點時間找到 libphp.so 檔在哪裡。
可以利用 libphp.so
來搜尋。
LoadModule php_module /opt/homebrew/Cellar/php/8.1.8/lib/httpd/modules/libphp.so
# LoadModule php_module /usr/local/Cellar/php@7.1/7.1.33_4/lib/httpd/modules/libphp7.so
再個地方,將下列程式碼加到httpd.conf
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
搜尋DirectoryIndex,然後新增 index.php
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
建立 phpinfo.php 檔案
phpinfo.php 檔案將用於檢查 PHP 是否正常工作。
在 Sites 底下新增一個名為 phpinfo.php
的檔案,內容則輸入:
<?php phpinfo(); ?>
記得要儲存。
啟動Apache伺服器
檢查 Apache 服務是否正在執行
brew services list
啟動Apache
brew services start httpd
停止
brew services stop httpd
重新啟動
brew services stop httpd
路徑
$ which apachectl
這邊也要改 ==> httpd.conf
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.4/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Multiviews
MultiviewsMatch Any
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# AllowOverride FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Require all granted
</Directory>