[单篇] PHP 开发环境那点事儿

可以看见很多新入门的 PHPer 常年会在各类技术群询问关于 PHP 的问题,很多时候会被他人说道:为何不去搜索引擎寻找而要舍近求远?

我也认为新人学习不能光去问,这容易产生惰性。但是,国内比较不乐观的现状使得选择 PHP 入门的新手很多没有良好的基础,加上本来 PHP 周边圈子偏向浮躁,即使选择搜索引擎,没有良好的底子很难选择到底哪类教程靠谱。作为 PHP 入门必须的 PHP 开发环境的搭建,这个问题就更为明显。

无数的文章都让本来十分简单的 PHP 开发环境变得异常复杂,并且文章中过于强调 PHP 这门语言的 Web 特性,强行绑架了 PHP 与 Apache、Nginx、IIS 这类本不属于 PHP 入门开发环节的第三方应用,会造成很多 PHPer 新手思路跑偏而忽略了 PHP 仅仅只是一门脚本语言的本质,从而也忽略了学习更多基础知识的重要性,也造成了很多 PHPer 往往自恃能够建立一个网站就是会 PHP 的心态。

以上是牢骚。

万丈高楼平地起,如何搭建 PHP 开发环境

PHP 开发环境搭建只有两步:

  1. 下载 PHP 二进制包(或源码包),解压至指定目录(源码包则是编译安装至指定目录);
  2. 将解压(或安装)目录加入环境变量。

本文完。










































开个玩笑。我的文章风格不是光讲步骤不说事儿。

估计看过很多环境搭建文章的 PHPer ,都会说怎么会这么点东西?这也是令人疑惑的,怎么一个开发环境到其他人那就很复杂呢?到底是要一个 PHP 的开发环境,还是一整套 HTTP 服务?

不知道 HTTP 服务是什么?那要 Apache、Nginx、IIS 干什么?当然,目标不是学 PHP,而是用 PHP,用来快速搞一个网站,那当我没说。另外,自从 PHP 5.4 以来,PHP 自带一个简单的 HTTP 服务器,对于常规开发,基本上足够使用。

下面才是正文:

第一目标:根据目标系统获取 PHP 本身

Linux 系统下通过软件包管理器获取 PHP

常见的 Linux 的发行版都会带有软件包管理器,这些工具可以很方便的获取到打包的 PHP 以及其依赖组件。由于发行版众多,在此只以 Ubuntu 和 CentOS 为例,对于其他发行版操作都是类似的。

Ubuntu:

sudo apt-get -y install php

CentOS:

sudo yum install -y php

需要注意的是,不同的系统下,其软件包管理器自动安装的 PHP 的版本可能存在不同,甚至有的系统的包管理器能够提供的 PHP 版本较低。不过大多数软件包管理器都可以指定发行的软件的仓库(源),一些组织机构提供了包含较新版本的软件包管理器的仓库(源)。你也可以选择通过源码编译安装的方式获取最新的 PHP。

OSX/macOS 系统下通过软件包管理器(Homebrew)获取 PHP

OSX/macOS 下默认是没有软件包管理器的(有些 Linux/Unix 系统同样不存在软件包管理器),但该系统下有一个十分著名的包管理器 Homebrew( https://brew.sh ),其官网提供了安装 Homebrew 的流程,本文不再赘述。

安装好 Homebrew 后,就可以使用以下命令安装 PHP 了:

brew install php

如果你想要安装 PHP 7.0 的版本,你可以通过以下命令安装:

brew install php70

Linux/Unix 系统下通过获取源码安装 PHP

通过获取源码,然后编译安装的方式,你可以很容易获取最新的版本的 PHP 以及其扩展,而且得到的 PHP 环境也是高度可定制的。

编译安装仍然十分简单,只是相对于通过发行的软件包的方式而言,编译安装最大的麻烦是其依赖的组件包,整个编译过程中根据你的配置项不同,会需要大量的依赖。

处理依赖问题不在本文讨论范围,依赖包也可以通过包管理器安装,亦或者每一个依赖通过编译安装的方式进行,显然的,后者的(重复)工作量会很大,因此大多数选择编译安装 PHP 以及其依赖的往往都会走脚本自动化的方式。

获取 PHP 源码主要有两个途径:

下载获取到源码的压缩文件,解压后取得源码,在源码目录下执行以下命令编译安装:

$ ./configure
$ make
$ sudo make install

./configure 是用于生成 Makefile 的脚本,其包含了很多的编译选项,如设置最终编译出的程序安装目录(即 PHP 安装目录)、设置编译到核心的扩展、设置配置文件目录等等,可通过:./configure --help 获取更多的编译选项。

编译安装很多人很畏惧,实际上编译安装在现在的环境下,已经十分简化了,所有的编译配置都很容易以统一的形式设置(即通过 configure 来进行),当设置完毕就可以直接编译。很多人畏惧的原因更多是配置选项过多,但这些也是有套路的,如果你英文稍好,通过查看每个编译选项的介绍,你一眼就明白该不该加上。再说,实在不行,可以用别个常用的编译选项。

Windows 系统下获取 PHP

Windows 安装 PHP 的方式是最为简单的,首先访问 http://windows.php.net/download ,选择你需要的 PHP 版本下载后解压至你希望安装到的目录即可。

在下载页面除了 PHP 版本,还会在每个版本下包括除了系统位数选项外,还有两个选项:线程安全(Thread Safe)和非线程安全(Non Thread Safe),一般我们都会选择非线程安全,这是因为主流情形下在 Windows 上都是使用 IIS 的 FastCGI,使用的是多进程的模型而非早期的 ISAPI 这种多线程模型。在多进程模型下,线程安全就显得十分鸡肋且性能很差,非线程安全可以换取更高的性能。

第二目标:环境变量

环境变量是什么?简单来说,你在控制台下执行 php,Windows 系统会在系统设置的名为 PATH 的环境变量中提供的(一大堆)路径下,挨个寻找里面是否存在 php.exephp.bat 等可被执行的文件,Linux/Unix 系统同样是在名为 PATH 的环境变量下设置的路径中,去寻找可被执行的目标文件。

假如你是在 Windows 系统,假如你 PHP 安装在 D:\Environment\php70,假如你现在 工作目录 在 D:\Development\Project,你此时需要跑一个该目录下的 PHP 脚本(名为 foo.php),若没有将 D:\Environment\php70 加入环境变量,那么你要运行这个脚本就得这么输入命令:

D:\Enviroment\php70\php.exe foo.php

如果将 PHP 安装目录加入了环境变量,你就可以这样:

php foo.php

在 Linux/Unix 下同理,比如你将 PHP 编译安装在 /usr/local/php/70,工作目录为 /home/developer/project,下面有一个文件 foo.php,若未加入环境变量,则要执行 PHP 得输入完整的 PHP 所在路径 /usr/local/php/70/bin/php

所以环境变量在这里的作用就是提供一个全局路径,无论你工作目录在哪,你都可以访问到在环境变量定义的目录下的可执行文件,比如 PHP 的解释器若在环境变量下的目录中,你就可以随时随地调用 PHP 解释器执行你的 PHP 脚本文件,既然已经可以随时随地执行 PHP 脚本了,那不就等于 PHP 开发的环境已经没有问题了吗?

这时,有人会疑惑,PHP 不是做网站的吗?能够看到这里的,我相信一般不会问出这个问题吧?如果你真的有这个疑问,那么我建议你老老实实从 PHP 的 官方文档 读起走吧。

【End】

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 7年前 加精
chongyi
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 15

纠正一下:josegonzalez/php 已经不存在了。官方的 homebrew/php 一直都是紧随更新的。(应该是 josegonzalez/php 直接变更成官方的 tap 了)

直接 brew install php71 安装即可。(如果提示没有,可以先执行 brew update )

file

7年前 评论

“本文完。”哈哈,我差点相信了

7年前 评论
chongyi

@zhuzhichao 已修正

7年前 评论
小滕

看到本文玩,我下意识的看了下滚动条,差点被你糊弄过去了 :smile:

7年前 评论
DukeAnn

敲了这么多回车,不容易

7年前 评论

吓了一跳。留白很具有欺骗性哈!

7年前 评论

看到本文完。我差点就返回了~~~

6年前 评论

新手还是用一键安装包赶紧把php跑起来吧,,,靠这个吃饭的话:smile:

6年前 评论
imxfly

确实要安装不同版本的 PHP 还真有些烦琐的,而且容易装错。。:unamused:

6年前 评论

我差点信了,进来是为了看yum命了

6年前 评论
imxfly

@orvice 对于 Mac 或者 Windows,一般用 XAMPP 或者 WAMP 之类的会无脑粗暴一点,Linux 的话虽然也有这些一键部署套装,但不够灵活,但自己装踩坑又多:sweat:

6年前 评论

@Stephen 粗暴是好,但是卸载麻烦。。。所以我都是用docker

6年前 评论

本文完
差点以为精髓,结果漂见滚动栏还有那么长

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!