macOS 11.0 Big Sur Apache设置:多个PHP版本

第1部分:macOS 11.0 Big Sur Web开发环境

在macOS上开发Web应用程序真是一件乐事。有许多设置开发环境的选项,包括广受欢迎的MAMP Pro,它在ApachePHPMySQL之上提供了一个不错的UI 但是,有时MAMP Pro的速度变慢或版本过旧,或者由于其受限的配置模板系统和非标准构建而表现不佳。

在这样的时代,人们经常寻找一种替代方法,幸运的是有一种替代方法是相对简单的。

在此博客文章中,我们将引导您完成设置和配置Apache 2.4多个PHP版本的过程在这个两篇文章系列的第二篇博客文章中,我们将介绍MySQLApache虚拟主机APC缓存和Xdebug安装。

2019年11月27日更新以添加有关PHP 8.0的一些信息
2020年11月13日 更新以反映macOS 11.0 Big Sur的发布
12/02/2019更新以反映最新版本的PHP 7.4,以及从官方官方网站上删除的PHP 7.1
12/02/2019更新以反映最新版本的PHP 7.4,以及从官方官方网站上删除的PHP 7.1
10/08/2019 更新以反映macOS 10.5 Catalina的发布
01/10/2019更新以从外部已弃用的小桶中添加回PHP 5.6PHP 7.0
12/12/2018更新以反映最新版本的PHP 7.3从Brew中删除的PHP 7.0

如果您过去一直Homebrew/php轻按本指南,并希望升级到新Homebrew/core方法,则应该首先按照我们的新升级Homebrew清理当前安装

本指南适用于经验丰富的Web开发人员如果您是新手开发人员,则使用MAMP或MAMP Pro会更好

XCode命令行工具

如果尚未安装XCode,则最好先安装命令行工具,因为这些将由自制软件使用:

xcode-select --install

自制安装

此过程严重依赖于名为Homebrew的macOS软件包管理器使用该brew命令可以轻松地向Mac添加强大的功能,但是首先我们必须安装它。这是一个简单的过程,但是您需要启动Terminal/Applications/Utilities/Terminal)应用程序,然后输入:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

只需按照终端提示操作,然后在需要的地方输入密码即可。这可能需要几分钟,但是完成后,一种快速的方法来确保已brew正确安装,只需键入:

brew --version
Homebrew 2.5.10 Homebrew/homebrew-core (git revision 542ff0; last commit 2020-11-13)

您可能还应该运行以下命令,以确保所有配置均正确:

brew doctor

它会指导您是否需要更正任何内容。

大苏尔必备图书馆

在Big Sur上全新安装时,在遇到以下所有步骤时,我遇到了一些缺少的库。为了使事情变得容易,请立即运行以下命令:

brew install openssl

Apache安装

aa最新的macOS 11.0 Big Sur预装了Apache 2.4,但是,将此版本与Homebrew一起使用不再是一项简单的任务,因为Apple已在此发行版中删除了一些必需的脚本。但是,解决方案是通过Homebrew安装Apache 2.4,然后将其配置为在标准端口(80/443)上运行。

如果您已经在运行内置的Apache,则需要先将其关闭,并删除所有自动加载脚本。只需按顺序运行所有这些命令,即使是全新安装,也没有什么坏处:

sudo apachectl stop
sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 2>/dev/null

现在,我们需要安装Brew提供的新版本:

brew install httpd

没有选项,httpd不需要从源代码构建,因此安装非常迅速。完成后,您应该会看到以下消息:

🍺  /usr/local/Cellar/httpd/2.4.46: 1,658 files, 27.9MB

现在,我们只需要配置一些东西,即可自动启动新的Apache服务器。

brew services start httpd

现在,您已经安装了Homebrew的Apache,并将其配置为使用特权帐户自动启动。它应该已经在运行,因此您可以尝试通过将其指向来在浏览器中访问服务器http://localhost:8080,您应该看到一个简单的标头,上面写着“有效!”。

故障排除技巧

如果收到消息,表明浏览器无法连接到服务器,请首先检查以确保服务器已启动。

ps -aef | grep httpd

如果Apache已启动并正在运行,则应该看到一些httpd进程。

尝试使用以下命令重新启动Apache:

brew services restart httpd

您可以在重新启动期间在新的“终端”选项卡/窗口中查看Apache错误日志,以查看是否有任何无效或引起问题的内容:

tail -f /usr/local/var/log/httpd/error_log

Apache是​​通过brew services命令控制的,因此可以使用一些有用的命令:

$ brew services stop httpd
$ brew services start httpd
$ brew services restart httpd

Visual Studio程式码

在过去的指南中,我总是提供使用TextEdit预安装的默认应用程序来编辑文件的说明但是,这并不是我用的,因为它是一个糟糕的编辑器,在测试Big Sur指南时,我一直遇到编码,查找行号等问题。更好的解决方案是简单地安装一个更好的编辑器。因此,请安装功能强大且功能强大的100%免费Visual Studio Code。它可在Mac,Windows和Linux上使用,但现在我们只关心mac版本。

转到Visual Studio Code网站,然后单击“ Mac下载”

下载后,将应用程序拖到您喜欢的“应用程序”位置。接下来,您要安装命令行工具,因此请按照官方的逐步说明进行操作,以便可以code从终端使用命令。

Apache配置

现在我们有了一个可以正常工作的Web服务器,我们要做的就是进行一些配置更改,以便它可以更好地用作本地开发服务器。

在最新版本的Brew中,您必须手动将监听端口从默认值设置808080,因此我们将需要编辑Apache的配置文件/usr/local/etc/httpd/httpd.conf

如果按照上面的说明进行操作,则应该可以使用Visual Studio Code通过codeTerminal命令编辑文件但是,如果要使用默认的 TextEditor应用程序执行编辑,则可以使用open -e命令,后跟文件的路径。

code /usr/local/etc/httpd/httpd.conf

VSC

找到那行说

Listen 8080

并将其更改为80

Listen 80

接下来,我们将其配置为使用来更改Apache文档根目录这是Apache用来提供文件的文件夹。默认情况下,文档根目录配置为/usr/local/var/www因为这是一台开发机,所以假设我们要更改文档根目录以指向我们自己的主目录中的文件夹。

搜索术语DocumentRoot,您应该看到以下行:

DocumentRoot "/usr/local/var/www"

将其更改为指向您的用户目录,your_user目录是您的用户帐户的名称:

DocumentRoot /Users/your_user/Sites

您还需要<Directory>在DocumentRoot行下方更改标记引用。这也应该更改为也指向您的新文档根目录:

<Directory "/Users/your_user/Sites">

我们删除了目录路径周围的可选引号,因为TextEdit可能会尝试将其转换为智能引号,并在尝试重新启动Apache时导致语法错误。即使您在引号周围进行编辑并将其保留在原处,保存文档也可能导致其转换并导致错误。

在同<Directory>一块中,您将找到一个AllowOverride设置,应按以下步骤进行更改:

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

另外,我们现在应该启用默认情况下已注释掉的mod_rewrite搜索mod_rewrite.so和通过去除导致取消对该行#+/上线(这是一个快速的方法来取消注释和评论的单个或多个行:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

用户和组

现在,我们将Apache配置指向Sites了主目录中文件夹。但是,仍然存在一个问题。默认情况下,apache以userdaemon和group的身份运行daemon尝试访问主目录中的文件时,这将导致权限问题。httpd.conf文件的大约三分之一处,有两个设置可用于设置UserGroupApache运行。更改以下内容以匹配您的用户帐户(替换your_user为您的真实用户名),并使用以下一组staff

User your_user
Group staff

服务器名称

Apache喜欢在配置中使用服务器名称,但是默认情况下此服务器处于禁用状态,因此请搜索:

#ServerName www.example.com:8080

并替换为:

ServerName localhost

网站文件夹

现在,您需要Sites在主目录的根目录中创建一个文件夹。您可以在终端或Finder中执行此操作。在这个新Sites文件夹中创建一个简单的文件夹,index.html并在其中放置一些虚拟内容,例如:<h1>My User Web Root</h1>

mkdir ~/Sites
echo "<h1>My User Web Root</h1>" > ~/Sites/index.html

重新启动apache以确保您的配置更改已生效:

brew services stop httpd
brew services start httpd

如果重新启动Apache时收到错误消息,请尝试删除我们之前设置的DocumentRoot和Directory名称周围的引号。

将您的浏览器指向http://localhost应该显示新消息。如果您有工作,我们可以继续前进!

确保您删除了:8080我们先前使用端口。另外,您可能需要Shift+Reload清除浏览器缓存并提取新文件。

对非Sudo httpd服务启动进行故障排除

当我找到常见问题的解决方案时,我将用更多的技巧和尝试来更新本节。跳至#macos Discord聊天以获得一些“实时”帮助。

今年,在macOS Big Sur中,我已经从使用切换为使用rootsudo启动httpd(即使它以定义的用户/组身份运行httpd.conf),对于从该版本升级到该版本的用户来说,仍然存在问题。

我本人遇到了一些问题,但是能够使其轻松工作,但是其他人报告了更多的问题。如果使用时Apache没有启动,请尝试这些步骤brew services start httpd

首先,尝试直接使用以下命令启动Apache:

/usr/local/bin/httpd -k start

这会绕过brew services命令,并经常打印出特定问题。如果报告有关无法写入日志文件的问题,请尝试删除所有当前的日志httpd日志文件:

rm -Rf /usr/local/var/log/httpd/*

然后尝试重新开始。

如果您看到类似的消息Address already in use: AH00072: make_sock: could not bind to address,请尝试将Listen配置更改httpd.conf为:

Listen 0.0.0.0:80

PHP安装

如果您已经通过Brew安装了PHP,则需要先使用我们的“升级自制程序”指南清理设置,然后再继续进行本节。

直到2018年3月,所有与PHP相关的Brew都由Homebrew/phptab处理,但已弃用,因此现在我们使用Homebrew/core软件包中提供的功能。这应该得到更好的维护,但包装的完整性要差得多。

不推荐使用PHP 5.6PHP 7.0PHP 7.1因为它们不在支持范围之内,并且已从Brew中删除,尽管不建议将它们用于生产环境,但是有合理的理由在开发环境中测试这些不受支持的版本。为了使用icu4cand的最新版本,还需要“从源代码构建”这些版本openssl

请记住,Brew官方仅支持PHP 7.2到7.4,但是这些都必须构建,这非常慢。对于本指南的最新版本,我们将使用来自@shivammahtur的新版本,因为已经预先构建了许多版本(包括PHP 8.0构建)。

PHP 8.0刚刚发布,您可以安装它,但是兼容的PHP模块完全可用可能需要一些时间。

brew tap shivammathur/php

我们将继续安装各种版本的PHP,并使用简单的脚本在需要时在它们之间进行切换。随意排除您不想安装的任何版本。

brew install shivammathur/php/php@5.6
brew install shivammathur/php/php@7.0
brew install shivammathur/php/php@7.1
brew install shivammathur/php/php@7.2
brew install shivammathur/php/php@7.3
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.0

另外,您可能需要根据需要调整PHP的配置设置。常见的更改是内存设置或date.timezone配置。php.ini每个版本的PHP文件都位于以下目录中:

/usr/local/etc/php/5.6/php.ini
/usr/local/etc/php/7.0/php.ini
/usr/local/etc/php/7.1/php.ini
/usr/local/etc/php/7.2/php.ini
/usr/local/etc/php/7.3/php.ini
/usr/local/etc/php/7.4/php.ini
/usr/local/etc/php/8.0/php.ini

此时,我强烈建议您关闭所有终端选项卡和窗口这将意味着打开一个新的终端以继续下一步。强烈建议这样做,因为现有终端可能会出现一些非常奇怪的路径问题(相信我,我已经看到了!)。

我们已经安装但未链接这些PHP版本。5.6例如,要切换到PHP ,我们可以输入:

brew unlink php && brew link --overwrite --force php@5.6

快速测试我们的版本是否正确:

php -v
PHP 5.6.40 (cli) (built: Jul  2 2020 04:41:54) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

并切换到7.4

brew unlink php && brew link --overwrite --force php@7.4

并检查它是否正确更改:

php -v
PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies

Apache PHP设置-第1部分

您已经成功安装了PHP版本,但是我们需要告诉Apache使用它们。您将再次需要编辑/usr/local/etc/httpd/httpd.conf文件滚动到LoadModule条目的底部

如果您正确地遵循了本指南,则最后一个条目应该是您的mod_rewrite模块:

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so

在此下方添加以下libphp模块:

LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so
#LoadModule php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so
#LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
#LoadModule php_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp.so

我们一次只能有一个模块处理PHP,因此现在,我们将php@5.6所有注释都注释掉,而使我们的 条目保持注释。这将告诉Apache使用PHP 5.6处理PHP请求。我们将在以后添加切换PHP版本的功能)。

另外,您必须显式设置PHP的目录索引,因此搜索此块:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

并替换为:

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

保存文件并停止Apache,然后再次启动,现在我们已经安装了PHP:

brew services stop httpd
brew services start httpd

验证PHP安装

测试PHP是否已按预期安装和运行的最佳方法是利用phpinfo()这不是您想要留在生产机器上的东西,但是在开发环境中这是无价的。

只需使用此单行代码info.php在您Sites/先前创建的文件夹中创建一个名为文件。

echo "<?php phpinfo();" > ~/Sites/info.php

将浏览器指向http://localhost/info.php,您应该会看到一个闪亮的PHP信息页面:

如果您看到类似的phpinfo结果,那么恭喜!现在,您已经成功运行了Apache和PHP。您可以通过注释LoadModule ... php@5.6 ...条目并取消注释其他版本的注释来测试其他PHP版本然后,只需重新启动apache并重新加载同一页面即可。

PHP切换器脚本

我们将Apache硬编码为使用PHP 5.6,但我们确实希望能够在版本之间进行切换。幸运的是,一些勤奋的人已经为我们完成了艰苦的工作,并编写了一个非常方便的PHP切换器脚本

sphp脚本已更新为支持PHP 8.0如果要使用该版本,请重复以下过程以获取最新版本。

我们将sphp脚本安装到brew的标准中/usr/local/bin

curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw/0c36a5067fbd63e6a36700a6aaa119df0836bdfc/sphp.sh > /usr/local/bin/sphp
chmod +x /usr/local/bin/sphp

检查你的路径

在安装过程中,Homebrew应该已将其首选/usr/local/bin添加/usr/local/sbin到您的路径中。通过键入以下内容进行快速测试:

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

如果看不到此内容,请先尝试关闭终端并重新启动。如果这不起作用,请检查文件路径定义中是否/usr/local/bin之前/usr/bin 和/usr/local/sbin之后您可以通过输入以下内容在外壳中临时执行此操作:/usr/sbin~/.zshrc

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

测试PHP切换

完成这些步骤之后,应该可以使用以下命令切换sphpPHP版本:PHP版本:

sphp 7.1

您可能需要输入管理员密码,它应该给您一些反馈:

Switching to php@7.4
Switching to php@7.4 Switching your shell Unlinking /usr/local/Cellar/php@5.6/5.6.40... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.33... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.2/7.2.34... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.4.12... 24 symlinks removed Linking /usr/local/Cellar/php/7.4.12... 24 symlinks created Switching your apache conf Restarting apache PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies All done!

通过再次将浏览器指向,测试Apache是​​否正在运行PHP 7.4 http://localhost/info.php运气好的话,您应该会看到以下内容:

对PHP切换进行故障排除

如果您已从本指南的先前版本升级并安装了PHP8,则可能会看到如下消息:Unknown version of PHP. PHP Switcher can only handle arguments of: 5.6,7.0,7.1,7.2,7.3,7.4,则需要重新安装sphp已更新脚本。

如果您收到有关PHP版本冲突的消息,则可能是水龙头发生冲突。您将需要卸载以前的PHP版本,然后删除旧的Tap,然后添加新的Tap,然后使用上述语法重新安装PHP版本。例如:

brew untap exolnet/deprecated
brew tap shivammathur/php
brew install shivammathur/php/php@8.0

使用Grav CMS测试您的设置!

有什么比快速安装和测试Grav更好的方法来测试新的强大设置。世界上最好的平面文件CMS😆!我们可以通过几个快速的终端命令来做到这一点:

cd ~/Sites
curl -OJL https://getgrav.org/download/core/grav-admin/latest
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 646 100 646 0 0 1664 0 --:--:-- --:--:-- --:--:-- 1664 100 10.5M 100 10.5M 0 0 8198k 0 0:00:01 0:00:01 --:--:-- 21.6M curl: Saved to filename 'grav-admin-v1.6.28.zip'

然后只需解压缩zip文件:

unzip grav-admin-v1.6.28.zip

这会将zip解压缩到一个~/Sites/grav-admin文件夹中。然后只需将浏览器指向以下目录http://localhost/grav-admin

填写相关信息以创建新的管理员用户,只需单击“创建用户”即可进入管理员。无需其他步骤。

全做完了!!!!

更新PHP和其他Brew软件包

Brew使更新PHP和您安装的其他软件包非常容易。第一步是更新Brew,以便获得可用更新的列表:

brew update

这将吐出可用更新的列表以及所有删除的公式。要升级软件包,只需键入:

brew upgrade

您将需要切换到每个已安装的PHP版本,然后再次运行update以获取每个PHP版本的更新,并确保您正在运行所需的PHP版本。

激活特定/最新的PHP版本

由于我们的PHP连接设置的方式,PHP的只有一个版本是在一个时间,只有当前活跃的PHP版本将更新到最新版本。您可以通过键入以下内容查看当前的活动版本:

php -v

您可以通过输入以下内容查看PHP软件包的特定版本:

brew info php@7.4
PHP 7.4.12 (cli) (built: Oct 30 2020 00:56:27) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.12, Copyright (c), by Zend Technologies
rhuk@macos-big-sur ~ % brew info php@7.4
php: stable 7.4.12 (bottled), HEAD
General-purpose scripting language
https://www.php.net/
/usr/local/Cellar/php/7.4.12 (497 files, 72.2MB) *
  Poured from bottle on 2020-11-13 at 11:57:43
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/php.rb
License: PHP-3.01
==> Dependencies
Build: httpd ✔, pkg-config ✔
Required: apr ✔, apr-util ✔, argon2 ✔, aspell ✔, autoconf ✔, curl-openssl ✔, freetds ✔, gd ✔, gettext ✔, glib ✔, gmp ✔, icu4c ✔, krb5 ✔, libffi ✔, libpq ✔, libsodium ✔, libzip ✔, oniguruma ✔, openldap ✔, openssl@1.1 ✔, pcre2 ✔, sqlite ✔, tidy-html5 ✔, unixodbc ✔
...

好的,到此结束了这3部分系列的第1部分。现在,您已经具有功能齐全的Apache 2.4安装,并且可以通过快速简便的方法在PHP 5.6、7.0、7.1、7.2、7.3、7.4和8.0之间进行切换。查看第2部分,了解如何使用MySQL虚拟主机APC缓存,YAMLXdebug设置环境另外,请看第3部分,以了解如何为Apache虚拟主机设置SSL

posted @ 2021-01-28 22:28  柠檬没我萌  阅读(723)  评论(0编辑  收藏  举报