[18/6/2018更新]因为Homebrew/php
点击在2018年3月底被弃用,并将全部PHP公式移动到Homebrew/core
,咱们已经从新设计了咱们的指南,使用这个新的水龙头。javascript
若是您过去一直遵循本指南 Homebrew/php
点击,并但愿升级到新的Homebrew/core
方法,而后您应该首先按照咱们新的升级自制程序清理您当前的安装。php
这是咱们以前的OS X开发系列的更新版本。新发布的macOS 10.14 Mojave以及随附的Brew更新与先前版本相比须要进行重大更改,所以须要对流程进行完全的改进。从macOS 10.12开始,咱们如今使用Homebrew的Apache而不是内置版本,可是这个新的appraoch更灵活,应该继续使用以前的OS X版本。css
在macOS上开发Web应用程序真是一种乐趣。设置开发环境有不少选择,包括广受欢迎的MAMP Pro,它在Apache,PHP和MySQL之上提供了一个很好的UI 。可是,有时候MAMP Pro会出现速度减慢或过期的版本,或者因为配置模板和非标准版本的限制性系统而致使行为不佳。html
在这些时候,人们常常寻找替代方法,幸运的是有一种方法,而且设置相对简单。java
在这篇博文中,咱们将引导您完成Apache 2.4和多个PHP版本的设置和配置。在这篇两篇文章系列的第二篇博文中,咱们将介绍MySQL,Apache虚拟主机,APC缓存和Xdebug安装。nginx
本指南适用于有经验的Web开发人员。若是您是初学者,可使用MAMP或MAMP Pro更好地服务。git
若是您尚未安装XCode,最好先安装命令行工具,由于这些工具将由homebrew使用:github
$ xcode-select --install
这个过程在很大程度上依赖于名为Homebrew的macOS包管理器。使用brew
命令您能够轻松地为您的mac添增强大的功能,但首先咱们必须安装它。这是一个简单的过程,但您须要启动终端(/Applications/Utilities/Terminal
)申请而后输入:shell
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
只需按照终端提示操做,并根据须要输入密码。这可能须要几分钟,但完成后,能够快速确保已安装brew
正确,只需输入:apache
$ brew --version Homebrew 1.7.6 Homebrew/homebrew-core (git revision a1ed; last commit 2018-09-25)
您可能还应运行如下命令以确保正确配置全部内容:
$ brew doctor
若是您须要更正任何内容,它会指示您。
当在Mojave上安装新鲜时,我遇到了一些在完成如下全部步骤时丢失的库。为了简化操做,请当即运行:
$ brew install openldap libiconv
最新的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良好并准备就绪时礼貌地从新启动
在过去的指南中,我老是提供使用默认编辑文件的说明 TextEdit
预安装的应用程序。然而,这不是我本身使用的,由于它是一个糟糕的编辑器,在测试个人Mojave指南时,我一直遇到编码问题,找到行号等。更好的解决方案是简单地安装一个更好的编辑器。所以,请安装使人惊讶的多功能,100%免费的Visual Studio代码。它能够在Mac,Windows和Linux上使用,可是如今咱们只关心mac版本。
转到Visual Studio代码站点,而后单击“ 下载Mac版”
下载后,将应用程序拖到优先的应用程序位置。接下来,您要安装命令行工具,所以请按照官方的分步说明进行操做,以便您可使用code
来自终端的命令。
既然咱们有一个可用的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
应该显示您的新消息。若是你有这个工做,咱们能够继续前进!
若是您经过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
您已成功安装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是否按预期安装并运行的最佳方法是使用phpinfo()。这不是您想要留在生产机器上的东西,但它在开发环境中是很是宝贵的。
只需建立一个名为的文件 info.php
在你的 Sites/
您以前使用此单行建立的文件夹。
echo "<?php phpinfo();" > ~/Sites/info.php
将浏览器指向 http://localhost/info.php
你应该看到一个闪亮的PHP信息页面:
若是你看到相似的phpinfo结果,恭喜!您如今已成功运行Apache和PHP。您能够经过注释来测试其余PHP版本LoadModule ... php@5.6 ...
进入并取消注释其中一个。而后只需重启apache并从新加载同一页面。
咱们将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版本 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
。运气不错,你应该看到这样的东西:
Brew使得更新PHP和您安装的其余软件包变得很是容易。第一步是更新 Brew,以便获取可用更新列表:
$ brew update
这将吐出可用更新列表和任何已删除的公式。要升级包,只需键入:
$ brew upgrade
您须要切换到每一个已安装的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。