让我们看看我们如何手动将本机 OS X 10.8 php安装升级到最新版本(当前为 5.4.5)并在我们使用它的同时安装一些其他有用的软件。*AMP 包是实用的,但很少是最新的,因此吸收本文中描述的过程对于每个 PHP 开发人员来说都是无价的。
从源头构建理论
如果您只对安装PHP的实际方面感兴趣,请随意跳过本节,但稍后了解它的实际工作原理以及为什么需要某些命令可能会对您有用。
每次从源代码安装软件都遵循基本相同的命令链:下载源文件、配置、制作、可选地测试、安装。
配置
“configure”脚本告诉“make”要构建什么。通过键入“./configure”执行,配置脚本分析依赖关系,验证您正在运行受支持的操作系统,为给定的操作系统设置必要的文件,最后生成一个 makefile,当调用“make”时,它指示如何和究竟要建造什么。
“configure”告诉“make”要构建什么
如果配置脚本发现缺少的依赖项或错误,它会执行退出并停止执行,允许用户在继续之前移除或绕过任何障碍。从源代码构建时,configure 命令总是首先出现。
制作
接下来,“make”构建 configure 告诉它构建的内容。“make”通过简单地输入“make”来初始化,它实际上是一个 GNU 实用程序,通常用于维护一组文件并在必要时重新编译它们。
“make”构建配置告诉它构建的内容
为了发挥作用,它需要一个 makefile - 一个文件,其中描述了它的指令并记录了相关文件之间的关系。运行后,make 命令会读取 makefile 并执行任务。
“make test”命令运行 make 命令,但也针对测试目标测试编译。并非所有的源代码发行版都支持“make test”,因此除非在安装软件的安装文档中明确指定,否则一种是使用常规的“make”。
“make test”命令运行 make 命令,但也针对测试目标测试编译。
“sudo make install”安装“make”内置到预定义文件夹中的文件。它处理所有包含、更新和解析路径,并将所有内容移动到应有的位置。实际上,它完成了安装,用户通常不需要做任何其他事情。
这实际上正是 homebrew - 我们在下一节中安装的包管理器 - 可以做的。它可以在内部执行相同的流程。你并没有直接看到它,但或多或少是相同的链被执行,如果“brewer”提交的“公式”是这样制作的。
它通过在移动到主要指定包之前自动检查依赖项并安装它们来减少整个过程的繁琐。然后它下载并解压缩它并执行配置、制作、制作安装链以完成安装。
几乎每个源代码安装都遵循相同的步骤:下载、配置、制作、安装。
Homebrew
为了让 PHP 的安装尽可能顺利,我们需要安装 Homebrew,这是一个 OSX 的包管理器,它可以为您处理大量安装 - 安装可能需要复杂的构建过程并且可能具有关键的依赖关系小时来解决。
从长远来看,安装 Homebrew 将使您受益。
从长远来看,安装 Homebrew 将使您受益,而不仅仅是为了本文的目的。它提供了一种快速安装常用库和软件的方法,而无需从源代码构建。
要安装它,我们需要执行以下操作(如果您安装了 Homebrew,请跳过此部分):
通过 App Store 安装 XCode。安装后,通过 XCode 应用程序本身安装命令行工具,或从 http://developers.apple.com 下载并安装。我们需要 XCode 和 CLT,因为 Homebrew 需要它们。
从这里安装 X11 。这也是 Homebrew 的要求。选择可用的最新版本,不一定是此处链接的版本。
从GitHub安装 Homebrew 。
如果遇到问题,您可能必须在步骤 1 和 2 之后执行以下操作:
$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer$ ln -s /opt/X11 /usr/X11
..取自这篇文章。出于某种原因,这发生在某些山狮实例上。
完成后,运行 brew doctor 并验证一切正常(按照 Homebrew 网站上的说明)。
PHP
可以预见,安装 PHP 需要您安装某些库。幸运的是,Homebrew 可以为我们处理这些安装。安装以下内容:
brew install libjpeg brew install pcre brew install libxml2 brew install mcrypt
完成后,从Php.net下载 PHP 源文件。解压存档,打开终端,然后切换到源文件夹(例如 cd ~/Downloads/php-5.4.5/ 或您下载源的任何其他位置)。
如果您计划使用 Zend F ram ework 2 并希望从Rob “Akrabat” Allen 制作的示例骨架应用程序开始,或者如果您打算以多种语言部署应用程序,则需要 php-intl 支持。为了让配置脚本在构建 makefile 时考虑到 php-intl,我们需要安装另一个依赖项 - ICU。从ICU-Project.org下载并执行:
tar xzvf icu4c-4_8_1-src.tgz cd icu/source ./runConfigureICU macOSX make sudo make install
这处理了 PHP 可能希望我们提供的所有基本依赖项(目前)。我们现在终于可以构建和安装它了。
安装
首先,在 PHP 的未归档源文件夹中,执行以下配置命令:
./configure \ --prefix=/usr \ --mandir=/usr/share/man \ --infodir=/usr/share/info \ --sysconfdir=/private/etc \ --with-apxs2=/usr/sbin/apxs \ --enable-cli \ --with-config-file-path=/etc \ --with-libxml-dir=/usr \ --with-openssl=/usr \ --with-kerberos=/usr \ --with-zlib=/usr \ --enable-bcmath \ --with-bz2=/usr \ --enable-calendar \ --with-curl=/usr \ --enable-dba \ --enable-exif \ --enable-ftp \ --with-gd \ --enable-gd-native-ttf \ --with-icu-dir=/usr \ --with-iodbc=/usr \ --with-ldap=/usr \ --with-ldap-sasl=/usr \ --with-libedit=/usr \ --enable-mbstring \ --enable-mbregex \ --with-mysql=mysqlnd \ --with-mysqli=mysqlnd \ --without-pear \ --with-pdo-mysql=mysqlnd \ --with-mysql-sock=/var/mysql/mysql.sock \ --with-readline=/usr \ --enable-shmop \ --with-snmp=/usr \ --enable-soap \ --enable-sockets \ --enable-sysvmsg \ --enable-sysvsem \ --enable-sysvshm \ --with-tidy \ --enable-wddx \ --with-xmlrpc \ --with-iconv-dir=/usr \ --with-xsl=/usr \ --enable-zip \ --with-imap=/usr/local/imap-2007 \ --with-kerberos \ --with-imap-ssl \ --enable-intl \ --with-pcre-regex \ --with-pgsql=/usr \ --with-pdo-pgsql=/usr \ --with-freetype-dir=/usr/X11 \ --with-jpeg-dir=/usr \ --with-png-dir=/usr/X11
完成后,执行
$ make test
“make test” 运行 make 并测试编译是否有错误
如构建理论部分所述,这将运行 make 并测试编译。这可能需要一段时间,最多 30 分钟,因为 PHP 的每个方面都在测试中。完成后,如果 PHP 发现任何错误(并且很可能会),请按照屏幕上的说明将它们报告给开发人员。别担心,一切都还好——它发现的错误通常不那么重要。
如您所见,将执行一些 11503 测试。这需要一段时间。
如果您已经激活并配置了原始 PHP,请立即备份您的 php.ini 文件。它应该在 /etc/php.ini
最后,运行以下命令来实际安装 PHP。
$ sudo make install
如果您进行了备份,最好不要用旧文件覆盖新的 php.ini 文件。相反,为了安全起见,手动复制您需要的值 - 这样我们可以确保新的 php.ini 文件与新安装的版本完全兼容。
阿帕奇配置
就快结束了!如果您在此之前已经在您的机器上激活了 PHP,并且阅读本文的唯一目的实际上是升级现有的 PHP,那么您就完成了 - 一切都应该工作。
但是,如果没有,我们需要在 OSX 的本机 Apache 安装中启用 PHP。由于 httpd.conf 文件可能位于默认位置,因此请在 TextEdit 中通过终端打开它,如下所示:
$ SUDO_EDITOR="open -FWne" sudo -e /etc/apache2/httpd.conf
我在这里使用 SUDO EDITOR 命令以在 TextEdit 中打开文件,仅仅是因为我认为在其中编辑文件比 Vim 或 Nano 容易得多。我也可以使用“$ sudo vim /ect/apache2/httpd.conf”在 vim 中编辑它。
接下来,取消注释以下行(它们不相邻 - 使用 Find 命令定位它们)
LoadModule php5_module libexec/apache2/libphp5.so Include /private/etc/apache2/extra/httpd-vhosts.conf
第一行激活了 PHP 作为 Apache 模块的使用。第二行是这样,主要的 httpd.conf(Apache 的配置)文件从 vhosts 文件中获取虚拟主机,并为我们省去了在过于敏感的 httpd.conf 中进行过度编辑的麻烦。这还有一个额外的好处,就是让您可以将 vhosts 文件保存在 /etc 之外的某个位置,并将其备份以供其他开发机器或重新安装使用。
一种非常实用的方法是将其托管在 Google Drive 或 Dropbox 等云服务上,并直接从 httpd.conf 链接到它。这样,当您添加新的虚拟主机时,只要您重新启动本地 Apache 服务器,它就会自动安装在您的每台机器上。
添加虚拟主机并结束
虚拟主机是本地托管的虚拟域。它基本上可以让您通过输入不同的 URL 在浏览器中测试您的项目。例如,在我的机器上,我可以访问 http://Mactuts.tutorial 并查看本节结尾的 Hello World 应用程序,或者我可以访问 http://mw.dev 查看我正在开发的项目的开发版本工作。很简单,不同的 URL 会触发不同的源文件夹并打开不同的项目作为网站。这是有关如何添加虚拟主机的快速指南 - 如果您已经设置了虚拟主机或了解有关它们的所有内容,请随时跳过此部分。
步骤 1:编辑主机文件
首先,我们将示例虚拟主机命名为“mactuts.tutorial”。为此,请在 /etc/hosts 中添加一个如下所示的条目:
127.0.0.1 mactuts.tutorial
这意味着在浏览器中访问 url http://mactuts.tutorial 将转到 127.0.0.1:80,或者换句话说,访问我们本地服务器 (Apache) 的端口 80。
这是一个示例主机文件。请注意,我还在这台机器上设置了一些其他虚拟主机
第 2 步:添加 Apache 虚拟主机
接下来,在 etc/apache2/extra/httpd-vhosts.conf 中添加一个块,如下所示:
<VirtualHost *:80> ServerName mactuts.tutorial DocumentRoot "/Users/{USERNAME}/Sites/mactuts" ServerAdmin bruno@skvorc.me <Directory "/Users/{USERNAME}/Sites/mactuts"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
将{USERNAME} 替换为您自己的用户名,不带花括号。这告诉 Apache 以下内容:如果您在端口 80 上有东西,请检查其原始 url 名称。如果是 mactuts.tutorial,则设置所有这些选项。
第 3 步:重新启动 Apache
接下来,重新启动 Apache
$ sudo apachectl restart
第 4 步:创建索引文件
3)创建一个文件夹“/Users/{USERNAME}/Sites/mactuts”(当然,用您的OSX用户名替换{USERNAME})并将index.php文件放入其中,内容如下:
<?php echo '你好世界'; ?>
第5步:检查一下!
转到 http://mactuts.tutorial。你应该看到“Hello World”!
备择方案
最近,出现了这种方法的替代方案——通过 Homebrew 本身安装 PHP。问题是,在撰写本文时(2012 年 8 月上旬)没有官方渠道,因此需要为 Homebrew 激活替代水龙头。
此外,我测试过的 OS X 版本 Mountain Lion,不幸的是未能以这种方式安装,并向我抛出了我无法解决的模糊错误。如果您喜欢冒险,请查看这篇文章并尝试根据您自己的操作系统和所需的 PHP 版本对其进行修改。
这里似乎有一个更稳定的替代方案,但反馈松懈,没有太多可做的,所以我将这些方法留给读者进行实验。
更新
以下是自帖子发布以来评论者提出的一些替代方案。
php_osx评论者DaftViking
引起了我的注意,另一个(看似流畅的)替代方案引起了我的注意,其中包括通过php_osx安装 PHP 。
Macports
虽然我鼓励逐步淘汰 Macports 以支持 Homebrew,但似乎 Macports 也添加了 PHP 的稳定版本,因此它可能提供另一种可行的替代方案。我个人没有测试过这种方法,但是对于那些精通 Macports 的人,可以在这里找到更多信息。感谢 Redditor nemeth88 的提醒!
结论
OS X 带有预装的 PHP 和 Apache 配置。遗憾的是,它附带的 PHP 版本已经严重过时,除非安装新的操作系统版本,否则它永远不会更新。到那时,包含的新 PHP 版本已经过时了,所以除了fetch一个 *AMP (Apache/Mysql/Php) 包(如果有的话,它很少有最新版本的 PHP),还有什么可以除了手动更新吗?
- 配置
- 制作
- 安装
- 步骤 1:编辑主机文件
- 第 2 步:添加 Apache 虚拟主机
- 第 3 步:重新启动 Apache
- 第 4 步:创建索引文件
- 第5步:检查一下!
- 更新