macOS 10.15 Catalina Apache设置:多个PHP版本

第1部分:macOS 10.15 Catalina Web开发环境

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

在这样的时代,人们常常寻找一种替代方法,幸运的是有一种替代方法,而且设置起来相对简单。html

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

[ 2019年10月8日更新]已更新以反映macOS 10.15 Catalina的发布[2019年1月10日
更新]已更新以从外部小桶添加回PHP 5.6PHP 7.0
[2018年12月12日更新]已更新以反映最新版本的PHP 7.3,以及从Brew中删除的PHP 7.0git

若是您过去一直Homebrew/php轻按本指南,并但愿升级到新Homebrew/core方法,则应该首先按照咱们的新升级Homebrew清理当前安装github

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

XCode命令行工具

若是还没有安装XCode,则最好先安装命令行工具,由于这些将由自制软件使用:sql

$ xcode-select --install
复制

自制安装

此过程在很大程度上依赖于名为Homebrew的macOS软件包管理器使用该brew命令能够轻松地向Mac添增强大的功能,可是首先咱们必须安装它。这是一个简单的过程,可是您须要启动Terminal/Applications/Utilities/Terminal)应用程序,而后输入:shell

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

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

$ brew --version
Homebrew 2.1.13
Homebrew/homebrew-core (git revision 99f8; last commit 2019-10-08)
复制

您可能还应该运行如下命令,以确保全部配置均正确:apache

$ brew doctor
复制

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

Catalina必需的库

在Catalina上全新安装时,在遇到如下全部步骤时,我遇到了一些缺乏的库。为了使事情变得容易,请当即运行如下命令:

$ brew install openldap libiconv
复制

Apache安装

最新的macOS 10.15 Catalina预先安装了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.41_1: 1,652 files, 27.7MB
复制

如今咱们只须要配置一些东西,以便新的Apache服务器自动启动

$ sudo brew services start httpd
复制

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

故障排除技巧

若是收到消息,代表浏览器没法链接到服务器,请首先检查以确保服务器已启动。

$ ps -aef | grep httpd
复制

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

尝试使用如下命令从新启动Apache:

$ sudo apachectl -k restart
复制

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

$ tail -f /usr/local/var/log/httpd/error_log
复制

Apache是​​经过apachectl命令控制的,所以可使用一些有用的命令:

$ sudo apachectl start $ sudo apachectl stop $ sudo apachectl -k restart
复制

-k当即强制重启,而不是在apache准备好并准备好时礼貌地要求重启

Visual Studio程式码

在过去的指南中,我老是提供使用TextEdit预安装的默认应用程序来编辑文件的说明可是,这并非我用的本身,由于它是一个糟糕的编辑器,在测试个人Catalina指南时,我一直遇到编码,查找行号等问题。更好的解决方案是简单地安装一个更好的编辑器。所以,请安装功能强大且功能强大的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命令编辑文件可是,若是你想使用默认的 文本编辑应用程序进行编辑,您可使用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_rewritemod_rewrite.so经过删除前导来搜索和取消注释该行#

LoadModule rewrite_module lib/httpd/modules/mod_rewrite.so
复制

用户和组

如今,咱们将Apache配置指向Sites了主目录中文件夹。可是,仍然存在一个问题。默认状况下,apache以user daemon和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以确保您的配置更改已生效:

$ sudo apachectl -k restart
复制

若是在从新启动Apache时收到错误消息,请尝试删除咱们以前设置的DocumentRoot和Directory名称周围的引号。

将您的浏览器指向http://localhost应该显示新消息。若是您有工做,咱们能够继续!

PHP安装

若是您已经经过Brew安装了PHP,则须要先使用咱们的“ 升级自制程序”指南清理设置,而后再继续进行本节。

直到2018年3月,全部与PHP相关的Brew都由Homebrew/phptab 处理,但已弃用,所以如今咱们使用Homebrew/core软件包中提供的功能。这应该获得更好的维护,可是不那么完整。

这两个PHP 5.6PHP 7.0已被弃用,从啤酒删除,由于他们是在支持,虽然它不建议在生产,有正当理由在开发环境中测试这些不受支持的版本。

请记住,Brew官方仅支持PHP 7.1至7.3,所以,若是您要安装PHP 5.6PHP 7.0,则须要添加如下代码:

$ brew tap exolnet/homebrew-deprecated
复制

咱们将经过安装各类版本的PHP并根据须要使用简单的脚本在它们之间进行切换来继续。随意排除您不想安装的任何版本。

$ brew install php@5.6 $ brew install php@7.0 $ brew install php@7.1 $ brew install php@7.2 $ brew install php@7.3
复制

第一个将花费一些时间,由于它必须安装大量的brew依赖项。后续的PHP版本将安装得更快。

unlink在安装PHP版本之间,您再也不须要每一个版本,由于默认状况下它们未连接

另外,您可能须要根据须要调整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
复制

如今让咱们切换回第一个PHP版本:

$ brew unlink php@7.3 && brew link --force --overwrite php@5.6
复制

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

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

php -v

PHP 5.6.40 (cli) (built: Apr 23 2019 11:14:34) 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
复制

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
复制

咱们一次只能有一个模块处理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:

$ sudo apachectl -k stop $ sudo apachectl start
复制

验证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脚本安装到brew的标准中/usr/local/bin

$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /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:/Library/Apple/usr/bin:/Library/Apple/bin
复制

若是看不到,则可能须要手动将其添加到路径中。根据您的外壳使用的,您可能须要加入这一行~/.profile~/.bash_profile~/.zshrc咱们将假定您使用的是默认的bash shell,所以请将此行添加到.profile用户目录根目录下的文件中(若是不存在,建立该文件):

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

测试PHP切换

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

$ sphp 7.1
复制

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

Switching to php@7.1
Switching your shell
Unlinking /usr/local/Cellar/php@5.6/5.6.40... 319 symlinks removed Unlinking /usr/local/Cellar/php@7.0/7.0.33... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.32_1... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.2/7.2.23... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.3.10... 208 symlinks removed Linking /usr/local/Cellar/php@7.1/7.1.32_1... 25 symlinks created If you need to have this software first in your PATH instead consider running: echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc You will need sudo power from now on Switching your apache conf Restarting apache PHP 7.1.32 (cli) (built: Oct 6 2019 20:44:48) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.1.32, Copyright (c) 1999-2018, by Zend Technologies All done! 
复制

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

更新PHP和其余Brew软件包

Brew使更新PHP和您安装的其余软件包很是容易。第一步是更新 Brew,以获取可用更新的列表:

$ brew update
复制

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

$ brew upgrade
复制

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

激活特定/最新的PHP版本

因为咱们的PHP链接设置的方式,PHP的只有一个版本是在一个时间,只有当前活跃的 PHP版本将更新到最新版本。您能够经过键入如下内容查看当前的活动版本:

$ php -v
复制

您能够经过键入如下命令查看PHP软件包的特定版本:

$ brew info php@7.1
  php@7.1: stable 7.1.32 (bottled) [keg-only] General-purpose scripting language https://www.php.net/ /usr/local/Cellar/php@7.1/7.1.32_1 (513 files, 62.9MB) * Poured from bottle on 2019-10-08 at 18:21:32 From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/php@7.1.rb ==> Dependencies Build: httpd ✔, pkg-config ✘ Required: apr ✔, apr-util ✔, aspell ✔, autoconf ✔, curl-openssl ✔, freetds ✔, freetype ✔, gettext ✔, glib ✔, gmp ✔, icu4c ✔, jpeg ✔, libpng ✔, libpq ✔, libtool ✔, libzip ✔, mcrypt ✔, openldap ✔, openssl@1.1 ✔, sqlite ✔, tidy-html5 ✔, unixodbc ✔, webp ✔ ...
复制

好的,到此结束了这3部分系列的第1部分。如今,您已经具备功能齐全的Apache 2.4安装,而且能够经过快速简便的方法在PHP 5.六、7.0、7.一、7.2和7.3之间进行切换。查阅第2部分,了解如何使用MySQL虚拟主机APC缓存,YAMLXdebug设置环境能够参考第3部分,了解如何为Apache虚拟主机设置SSL

相关文章
相关标签/搜索