macOS 10.14 Mojave 开发环境配置Apache多PHP版本

第1部分:macOS 10.14 Mojave Web开发环境

在macOS上开发Web应用程序真是一种乐趣。设置开发环境有很多选择,包括广受欢迎的MAMP Pro,它在ApachePHPMySQL之上提供了一个很好的UI 但是,有时候MAMP Pro会出现速度减慢或过时的版本,或者由于配置模板和非标准版本的限制性系统而导致行为不佳。

在这些时候,人们经常寻找替代方法,幸运的是有一种方法,并且设置相对简单。

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

[更新时间01/10/2019]更新为从外部弃用桶添加PHP 5.6PHP 7.0 
[已更新12/12/2018]已更新,以反映最新版本的PHP 7.3以及从Brew中删除PHP 7.0

如果您过去一直遵循本指南 Homebrew/php点击,并希望升级到新的Homebrew/core方法,然后您应该首先按照我们新的升级自制程序清理您当前的安装

本指南适用于有经验的Web开发人员如果您是初学者,可以使用MAMP或MAMP Pro更好地服务

XCode命令行工具

如果您还没有安装XCode,最好先安装命令行工具,因为这些工具将由homebrew使用:

$ xcode-select --install

自制安装

这个过程在很大程度上依赖于名为Homebrew的macOS包管理器使用brew命令您可以轻松地为您的mac添加强大的功能,但首先我们必须安装它。这是一个简单的过程,但您需要启动终端/Applications/Utilities/Terminal)申请然后输入:

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

只需按照终端提示操作,然后根据需要输入密码。这可能需要几分钟,但完成后,可以快速确保已安装brew 正确的,只需输入:

$ brew --version
Homebrew 1.7.6
Homebrew/homebrew-core (git revision a1ed; last commit 2018-09-25)

您可能还应运行以下命令以确保正确配置所有内容:

$ brew doctor

如果您需要更正任何内容,它会指示您。

Mojave必需的库

在Mojave上安装新鲜时,我遇到了一些在完成以下所有步骤时丢失的库。为了简化操作,请立即运行:

$ brew install openldap libiconv

Apache安装

最新的macOS 10.14 Mojave预装了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.35: 1,648 files, 26.9MB

现在我们只需要配置一些东西,以便我们的新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预安装的应用程序。然而,这不是我自己使用的,因为它是一个糟糕的编辑器,在测试我的Mojave指南时,我一直遇到编码问题,找到行号等。更好的解决方案是简单地安装一个更好的编辑器。因此,请安装令人惊讶的多功能,100%免费的Visual Studio代码。它可以在Mac,Windows和Linux上使用,但是现在我们只关心mac版本。

转到Visual Studio代码站点,然后单击“ 下载到Mac”

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

Apache配置

既然我们有一个可用的Web服务器,我们想要做的是进行一些配置更改,以便它作为本地开发服务器更好地工作。

在最新版本的Brew中,您必须手动设置默认值为的listen端口 8080 至 80,所以我们需要编辑Apache的配置文件。

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

如果您按照上面的说明操作,则应该可以使用Visual Studio Code来编辑文件code终端命令。但是,如果要使用默认的 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以用户身份运行daemon 和小组 daemon尝试访问主目录中的文件时,这将导致权限问题。大约三分之一的下来httpd.conf 文件有两个设置来设置 User 和 GroupApache将运行。更改这些以匹配您的用户帐户(替换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,则需要先使用我们的升级Homebrew指南清理您的设置,然后再继续本节。

直到2018年3月底,所有与PHP相关的啤酒都由 Homebrew/php 选项卡,但已被弃用,所以现在我们使用的是 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.39 (cli) (built: Dec  7 2018 08:27:47)
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>

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

$ 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。您可以通过注释来测试其他PHP版本LoadModule ... php@5.6 ...进入并取消注释其中一个。然后只需重启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

如果您没有看到这一点,则可能需要手动将这些添加到路径中。根据您使用的shell,您可能需要添加此行~/.profile, ~/.bash_profile, 要么 ~/.zshrc我们假设您使用的是默认的bash shell,因此请将此行添加到您的.profile (如果它不存在则创建它)文件位于用户目录的根目录:

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

测试PHP切换

完成这些步骤后,您应该能够使用该命令切换PHP版本 sphp 然后是PHP版本的两位数值:

$ sphp 7.1

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

$ sphp 7.0
Switching to php@7.0
Switching your shell
Unlinking /usr/local/Cellar/php@5.6/5.6.39... 25 symlinks removed
Unlinking /usr/local/Cellar/php@7.0/7.0.33... 0 symlinks removed
Unlinking /usr/local/Cellar/php@7.1/7.1.25... 0 symlinks removed
Unlinking /usr/local/Cellar/php/7.3.1... 0 symlinks removed
Linking /usr/local/Cellar/php@7.0/7.0.33... 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.0/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/php@7.0/sbin:$PATH"' >> ~/.bash_profile
You will need sudo power from now on
Switching your apache conf
Restarting apache

PHP 7.0.33 (cli) (built: Dec 14 2018 16:20:36) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.0.33, Copyright (c) 1999-2017, by Zend Technologies

All done!

通过再次指向浏览器来测试您的Apache现在是否正在运行PHP 7.0 http://localhost/info.php运气不错,你应该看到这样的东西:

更新PHP和其他Brew包

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

$ brew update

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

$ brew upgrade

您需要切换到每个已安装的PHP版本并再次运行更新以获取每个PHP版本的更新,并确保您运行的是您想要的PHP版本。

激活特定/最新PHP版本

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

$ php -v

您可以通过键入以下内容来查看PHP包的特定版本:

$ brew info php@7.1                                                                                        php@7.1: stable 7.1.25 (bottled) [keg-only]
General-purpose scripting language
...

好的,这包含了这个3部分系列的第1部分您现在拥有一个功能齐全的Apache 2.4安装,可以快速简便地在PHP 5.6,7.0,7.1,7.2和7.3之间切换。查看第2部分,了解如何使用MySQL虚拟主机APC缓存,YAMLXdebug设置环境请参阅第3部分,了解如何为Apache虚拟主机设置SSL

posted @ 2019-03-20 15:49  柠檬没我萌  阅读(453)  评论(0编辑  收藏  举报