macOS 10.13 High Sierra Apache安装程序
因为在安装php的时候确实踩了好多好多坑,尤其php版本和网页上的phpinfo版本不一致为题导致在这里转了三天才遇到这篇好文章,所以特地记录。该篇主要记录使用Homebrew安装php7.2并调整phpinfo和php
–version出现不一致的问题。
XCode命令行工具
如果您还没有安装XCode,最好先安装命令行工具,因为这些工具将被自制软件使用:
$ 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.5.14
Homebrew/homebrew-core (git revision beff; last commit 2018-04-06)
您应该也可以运行以下命令以确保一切正确配置:
$ brew doctor
它会告诉你,如果你需要纠正任何事情。
Apache安装
最新的macOS 10.13 High Sierra预装了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.33: 1,633 files, 26.4MB
现在我们只需要配置一些东西,以便我们的新Apache服务器自动启动
$ sudo brew services start httpd
您现在已经安装了Homebrew的Apache,并将其配置为使用特权帐户自动启动。它应该已经在运行,所以你可以尝试通过指向它在浏览器中访问你的服务器http://localhost:8080,你应该看到一个简单的标题,上面写着“It works!” 。
疑难解答提示
如果您收到浏览器无法连接到服务器的消息,请首先检查以确保服务器已启动。
$ ps -aef | grep httpd
如果Apache启动并运行,您应该看到一些httpd进程。
尝试重新启动Apache:
$ sudo apachectl -k restart
这里如果报错了别着急,往下看后面有个修改ServerName的地方可能可以解决的你麻烦。
您可以在重新启动期间在新的终端选项卡/窗口中观看Apache错误日志,以查看是否有任何内容无效或导致问题:
$ tail -f /usr/local/var/log/httpd/error_log
Apache是通过控制 apachectl 命令,以便使用一些有用的命令是:
$ sudo apachectl start
$ sudo apachectl stop
$ sudo apachectl -k restart
该 -k将立即强制重新启动,而不是在apache很好并准备好时要求礼貌地重新启动
Apache配置
现在我们有了一个可用的Web服务器,我们将要做的就是进行一些配置更改,使其作为本地开发服务器运行得更好。
在最新版本的Brew中,您必须手动将侦听端口设置为默认值 8080 至 80,所以我们需要编辑Apache的配置文件。
/usr/local/etc/httpd/httpd.conf
为了简单起见,我们将使用内置的TextEditor应用程序进行所有编辑。您可以使用终端从终端启动它open -e 命令,然后是文件的路径:
$ open -e /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时将导致语法错误。即使您围绕引号进行编辑并将其保留在原来的位置,保存文档可能会导致其转换并导致错误。
这里其实无所谓,因为你后面可以把文件放在/usr/local/var/www下
在这一页上 <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
这个很关键,因为我在一开始
sudo apachectl start
的时候一直不成功,并报错: AH00558: httpd: Could
not reliably determine the server’s fully qualified domain name, using
*************. Set the ‘ServerName’ directive globally to suppress this message本来真的很绝望,后来想想其实问题解决的关键就在这条语句的修改。
站点文件夹
现在,你需要创建一个 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安装,则需要先使用升级自制软件指南清理设置,然后再继续本节。
我们将继续安装PHP 5.6,PHP 7.0,PHP 7.1和PHP 7.2,并使用简单的脚本在需要时切换它们。直到2018年3月底,所有与PHP相关的brew都由处理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.35 (cli) (built: Mar 31 2018 20:21:31)
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
我们一次只能有一个模块处理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。您可以通过评论来测试其他PHP版本LoadModule … php@5.6 …进入并取消其中一个注释。然后只需重新启动Apache并重新加载相同的页面。
至此其实我所用的部分就完了,后面的一些时原文章中还存在的一些资料,一并拷贝下来,以备后用。
PHP切换器脚本
我们对Apache进行了硬编码以使用PHP 5.6,但我们确实希望能够在各种版本之间进行切换。幸运的是,一些勤劳的人已经为我们做了艰苦的工作,并编写了一个非常方便的小型PHP切换器脚本。
我们将安装 sphp 脚本酿造的标准 /usr/local/bin:
$ curl -L https://gist.githubusercontent.com/rhukster/f4c04f1bf59e0b74e335ee5d186a98e2/raw > /usr/local/bin/sphp
$ chmod +x /usr/local/bin/sphp
检查你的路径
家酿应该添加它的首选 /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.35... 47 symlinks removed
Unlinking /usr/local/Cellar/php@7.0/7.0.29... 0 symlinks removed
Unlinking /usr/local/Cellar/php@7.1/7.1.16... 0 symlinks removed
Unlinking /usr/local/Cellar/php/7.2.4... 0 symlinks removed
Linking /usr/local/Cellar/php@7.0/7.0.29... 47 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"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.0/sbin:$PATH"' >> ~/.zshrc
You will need sudo power from now on
Switching your apache conf
Password:
Restarting apache
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.29 (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。
原文转载自https://zhuanlan.zhihu.com/p/37885712