[18/6/2018更新]由于Homebrew/php
点击在2018年3月底被弃用,并将所有PHP公式移动到Homebrew/core
,我们已经重新设计了我们的指南,使用这个新的水龙头。
如果您过去一直遵循本指南 Homebrew/php
点击,并希望升级到新的Homebrew/core
方法,然后您应该首先按照我们新的升级自制程序清理您当前的安装。
第1部分:macOS 10.14 Mojave Web开发环境
这是我们之前的OS X开发系列的更新版本。新发布的macOS 10.14 Mojave以及随附的Brew更新与先前版本相比需要进行重大更改,因此需要对流程进行彻底的改进。从macOS 10.12开始,我们现在使用Homebrew的Apache而不是内置版本,但是这个新的appraoch更灵活,应该继续使用之前的OS X版本。
在macOS上开发Web应用程序真是一种乐趣。设置开发环境有很多选择,包括广受欢迎的MAMP Pro,它在Apache,PHP和MySQL之上提供了一个很好的UI 。但是,有时候MAMP Pro会出现速度减慢或过时的版本,或者由于配置模板和非标准版本的限制性系统而导致行为不佳。
在这些时候,人们经常寻找替代方法,幸运的是有一种方法,并且设置相对简单。
在这篇博文中,我们将引导您完成Apache 2.4和多个PHP版本的设置和配置。在这篇两篇文章系列的第二篇博文中,我们将介绍MySQL,Apache虚拟主机,APC缓存和Xdebug安装。
本指南适用于有经验的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中,您必须手动设置默认的侦听端口 8080
至 80
,所以我们需要编辑Apache的配置文件。
/usr/local/etc/httpd/httpd.conf
如果您按照上面的说明操作,则应该可以使用Visual Studio Code来编辑文件code
终端命令。但是,如果要使用默认的 TextEditor应用程序来执行编辑,则可以使用open -e
命令后跟文件的路径。
$ code /usr/local/etc/httpd/httpd.conf
找到说的那一行
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
和 Group
Apache将运行。更改这些以匹配您的用户帐户(替换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指南清理您的设置,然后再继续本节。
我们将继续安装PHP 5.6,PHP 7.0,PHP 7.1和PHP 7.2,并使用一个简单的脚本在我们需要时在它们之间切换。直到2018年3月底,所有与PHP相关的酿造工作都由Homebrew/php
选项卡,但已被弃用,所以现在我们使用的是 Homebrew/core
包。这应该是一个更好的维护,但是一个不那么完整的包。
$ brew install php@5.6
$ brew install php@7.0
$ brew install php@7.1
$ brew install php@7.2
第一个将花费一点时间,因为它必须安装一堆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
我们现在切换回第一个PHP版本:
$ brew unlink php@7.2 && brew link --force --overwrite php@5.6
此时,我强烈建议关闭所有终端选项卡和窗口。这将意味着打开一个新的终端继续下一步。这是强烈推荐的,因为现有终端可能会出现一些非常奇怪的路径问题(相信我,我已经看过了!)。
快速测试我们的版本是否正确:
php -v
PHP 5.6.38 (cli) (built: Sep 14 2018 22:30:40) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 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
我们一次只能有一个处理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.0
您可能需要输入管理员密码,它应该给您一些反馈:
$ sphp 70
Switching to php@7.0
Switching your shell
Unlinking /usr/local/Cellar/php@5.6/5.6.38... 25 symlinks removed Unlinking /usr/local/Cellar/php@7.0/7.0.32... 0 symlinks removed Unlinking /usr/local/Cellar/php@7.1/7.1.22... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.2.10... 0 symlinks removed Linking /usr/local/Cellar/php@7.0/7.0.32... 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.32 (cli) (built: Sep 13 2018 23:23:13) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 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.0
php@7.0: stable 7.0.32 (bottled) [keg-only]
General-purpose scripting language
...
好的,这包含了这个3部分系列的第1部分您现在拥有一个功能齐全的Apache 2.4安装,可以快速简便地在PHP 5.6,7.0,7.1和7.2之间切换。查看第2部分,了解如何使用MySQL,虚拟主机,APC缓存,YAML和Xdebug设置环境。另请参阅第3部分,了解如何为Apache虚拟主机设置SSL。