使用Homebrew安裝Apache跟PHP8.X版

使用Homebrew安裝Apache跟PHP8.X版

我的系統

macOS Monterey 12.4

參考網站1

參考網站2

參考網站3


自 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>