adc00 2019-10-31
在macOS上开发Web应用程序真是令人高兴。有许多设置开发环境的选项,包括广受欢迎的MAMP Pro,它在Apache,PHP和MySQL之上提供了一个不错的UI 。但是,有时MAMP Pro的速度变慢或版本过旧,或者由于配置模板和非标准构建的限制性系统而表现不佳。
在这样的时代,人们经常寻找一种替代方法,幸运的是有一种替代方法,并且设置起来相对简单。
在此博客文章中,我们将引导您完成设置和配置Apache 2.4和多个PHP版本的过程。在这个两篇文章系列的第二篇博客文章中,我们将介绍MySQL,Apache虚拟主机,APC缓存和Xdebug安装。
[ 2019年10月8日更新]已更新以反映macOS 10.15 Catalina的发布[2019年1月10日
更新]已更新以从外部小桶添加回PHP 5.6和PHP 7.0
[2018年12月12日更新]已更新以反映最新版本的PHP 7.3,以及从Brew中删除的PHP 7.0。
如果您过去一直Homebrew/php
轻按本指南,并希望升级到新Homebrew/core
方法,则应该首先按照我们的新升级Homebrew清理当前安装。
本指南适用于经验丰富的Web开发人员。如果您是新手开发人员,则使用MAMP或MAMP Pro会更好。
如果尚未安装XCode,则最好先安装命令行工具,因为这些将由自制软件使用:
$ xcode-select --install
此过程在很大程度上依赖于名为Homebrew的macOS软件包管理器。使用该brew
命令可以轻松地向Mac添加强大的功能,但是首先我们必须安装它。这是一个简单的过程,但是您需要启动Terminal(/Applications/Utilities/Terminal
)应用程序,然后输入:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
只需按照终端提示操作,然后在需要的地方输入密码即可。这可能需要几分钟,但是完成后,一种快速的方法来确保已brew
正确安装,只需键入:
$ brew --version Homebrew 2.1.13 Homebrew/homebrew-core (git revision 99f8; last commit 2019-10-08)
您可能还应该运行以下命令,以确保所有配置均正确:
$ brew doctor
它会指导您是否需要更正任何内容。
在Catalina上全新安装时,在遇到以下所有步骤时,我遇到了一些缺少的库。为了使事情变得容易,请立即运行以下命令:
$ brew install openldap libiconv
最新的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准备好并准备好时礼貌地要求重启
在过去的指南中,我总是提供使用TextEdit
预安装的默认应用程序来编辑文件的说明。但是,这并不是我用的自己,因为它是一个糟糕的编辑器,在测试我的Catalina指南时,我一直遇到编码,查找行号等问题。更好的解决方案是简单地安装一个更好的编辑器。因此,请安装功能强大且功能强大的100%免费Visual Studio Code。它可在Mac,Windows和Linux上使用,但现在我们只关心mac版本。
转到Visual Studio Code网站,然后单击“ Mac下载”
下载后,将应用程序拖到您喜欢的“应用程序”位置。接下来,您要安装命令行工具,因此请按照官方的逐步说明进行操作,以便可以code
从终端使用命令。
现在我们有了一个可以正常使用的Web服务器,我们要做的就是进行一些配置更改,以便它可以更好地用作本地开发服务器。
在最新版本的Brew中,您必须手动将监听端口从默认值设置8080
为80
,因此我们将需要编辑Apache的配置文件。
/usr/local/etc/httpd/httpd.conf
如果按照上面的说明进行操作,则应该可以使用Visual Studio Code通过code
Terminal命令编辑文件。但是,如果你想使用默认的 文本编辑应用程序进行编辑,您可以使用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以user daemon
和group的身份运行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,则需要先使用我们的“ 升级自制程序”指南清理设置,然后再继续进行本节。
直到2018年3月,所有与PHP相关的Brew都由Homebrew/php
tab 处理,但已弃用,因此现在我们使用Homebrew/core
软件包中提供的功能。这应该得到更好的维护,但是不那么完整。
这两个PHP 5.6和PHP 7.0已被弃用,从啤酒删除,因为他们是在支持,虽然它不建议在生产,有正当理由在开发环境中测试这些不受支持的版本。
请记住,Brew官方仅支持PHP 7.1至7.3,因此,如果您要安装PHP 5.6或PHP 7.0,则需要添加以下代码:
$ brew tap exolnet/homebrew-deprecated
我们将通过安装各种版本的PHP并根据需要使用简单的脚本在它们之间进行切换来继续。随意排除您不想安装的任何版本。
$ brew install $ brew install $ brew install $ brew install $ brew install
第一个将花费一些时间,因为它必须安装大量的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 && brew link --force --overwrite
此时,我强烈建议您关闭所有终端选项卡和窗口。这将意味着打开一个新的终端以继续下一步。强烈建议这样做,因为现有终端可能会出现一些非常奇怪的路径问题(相信我,我已经看到了!)。
快速测试我们的版本是否正确:
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
您已经成功安装了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//lib/httpd/modules/libphp5.so #LoadModule php7_module /usr/local/opt//lib/httpd/modules/libphp7.so #LoadModule php7_module /usr/local/opt//lib/httpd/modules/libphp7.so #LoadModule php7_module /usr/local/opt//lib/httpd/modules/libphp7.so #LoadModule php7_module /usr/local/opt//lib/httpd/modules/libphp7.so
我们一次只能有一个模块处理PHP,因此,到目前为止,在其他所有注释都被注释掉的同时,我们 不对条目进行注释。这将告诉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是否已按预期安装和运行的最佳方法是利用phpinfo()。这不是您想留在生产机器上的东西,但在开发环境中却无价之宝。
只需使用此单线info.php
在您Sites/
先前创建的文件夹中创建一个名为的文件。
echo "<?php phpinfo();" > ~/Sites/info.php
将浏览器指向http://localhost/info.php
,您应该会看到一个闪亮的PHP信息页面:
如果您看到类似的phpinfo结果,那么恭喜!现在,您已经成功运行了Apache和PHP。您可以通过注释LoadModule ... ...
条目并取消注释其他版本的注释来测试其他PHP版本。然后,只需重新启动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:/Library/Apple/usr/bin:/Library/Apple/bin
如果看不到,则可能需要手动将其添加到路径中。根据您的外壳使用的,您可能需要加入这一行~/.profile
,~/.bash_profile
或~/.zshrc
。我们将假定您使用的是默认的bash shell,因此请将此行添加到.profile
用户目录根目录下的文件中(如果不存在,请创建该文件):
export PATH=/usr/local/bin:/usr/local/sbin:$PATH
完成这些步骤之后,您应该能够通过使用以下命令切换sphp
PHP版本:PHP版本:
$ sphp 7.1
您可能必须输入管理员密码,它应该给您一些反馈:
Switching to Switching your shell Unlinking /usr/local/Cellar//5.6.40... 319 symlinks removed Unlinking /usr/local/Cellar//7.0.33... 0 symlinks removed Unlinking /usr/local/Cellar//7.1.32_1... 0 symlinks removed Unlinking /usr/local/Cellar//7.2.23... 0 symlinks removed Unlinking /usr/local/Cellar/php/7.3.10... 208 symlinks removed Linking /usr/local/Cellar//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//bin:$PATH"‘ >> ~/.zshrc echo ‘export PATH="/usr/local/opt//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
。运气好的话,您应该会看到以下内容:
Brew使更新PHP和您安装的其他软件包非常容易。第一步是更新 Brew,以获取可用更新的列表:
$ brew update
这将吐出可用更新列表以及所有已删除的公式。要升级软件包,只需键入:
$ brew upgrade
您将需要切换到每个已安装的PHP版本,然后再次运行update以获取每个PHP版本的更新,并确保您正在运行所需的PHP版本。
由于我们的PHP连接设置的方式,PHP的只有一个版本是挂在一个时间,只有当前活跃的 PHP版本将更新到最新版本。您可以通过键入以下内容查看当前的活动版本:
$ php -v
您可以通过键入以下命令查看PHP软件包的特定版本:
$ brew info : stable 7.1.32 (bottled) [keg-only] General-purpose scripting language https://www.php.net/ /usr/local/Cellar//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/ ==> 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 ?, ?, sqlite ?, tidy-html5 ?, unixodbc ?, webp ? ...
好的,到此结束了这3部分系列的第1部分。现在,您已经具有功能齐全的Apache 2.4安装,并且可以通过快速简便的方法在PHP 5.6、7.0、7.1、7.2和7.3之间进行切换。查阅第2部分,了解如何使用MySQL,虚拟主机,APC缓存,YAML和Xdebug设置环境。还可以参考第3部分,了解如何为Apache虚拟主机设置SSL。
<?php. if (!empty($_POST)) {. $data1 = $_POST["data1"];$data2 = $_POST["data2"];$fuhao = $_POST["fuh