到虎扑实习了,技术栈是 php ,所以得先安装配置。
下载
从 PHP 官网下载安装包,下载后解压到指定目录即可。
线程安全与线程不安全
从 2000 年 10 月 20 日发布的第一个 Windows 版的 PHP3.0.17 开始的都是线程安全的版本,直至 5.2.1 版本开始有 Thread Safe(TS,线程安全)和 None Thread Safe(NTS,非线程安全)之分。
目前 PHP 运行的方式有以下几种:
- CGI:Common Gateway Interface(通用网关接口),是外部应用程序(CGI程序)与 Web 服务器之间的接口标准,为每一个请求都开辟一个进程。
- ISAPI:Internet Server Application Programming Interface(互联网应用程序接口),是为 Microsoft 所提的 Internet server 的 API,区别于 CGI ,ISAPI 采用多线程的方式
- FastCGI:CGI 存在收到每个请求时都开辟一个进程等不足,FastCGI可以理解为是征对CGI的改进版
由于 Linux/Unix 系统是采用多进程的工作方式,而 Windows 系统采用多线程的工作方式。即 Linux 系统的任务调度基本单位是进程,Windows 系统的任务调度基本单位是线程。
因此如果在 IIS 服务器下以 CGI 方式运行 PHP 会非常慢,这是由于 CGI 模式是建立在多进程的基础之上的,而非多线程。因此一般会把 PHP 配置成以 ISAPI 的方式来运行,ISAPI 是多线程的方式,这样就快多了。
但这样存在一个问题:很多常用的 PHP 扩展是以 Linux/Unix 的多进程思想来开发的,这些扩展在 ISAPI 的方式运行时就会出错搞垮 IIS 。
因此在 IIS 下 CGI 模式才是 PHP 运行的最安全方式,但 CGI 模式对于每个 HTTP 请求都需要重新加载和卸载整个 PHP 环境,其消耗是巨大的。
为了兼顾 IIS 下 PHP 的效率和安全,微软给出了 FastCGI 的解决方案。FastCGI 可以让 PHP 的进程重复利用而不是每一个新的请求就重开一个进程。同时 FastCGI 也可以允许几个进程同时执行。这样既解决了 CGI 进程模式消耗太大的问题,又利用上了 CGI 进程模式不存在线程安全问题的优势。
因此,如果是使用 ISAPI 的方式来运行 PHP 就必须用 TS(线程安全)的版本;而用 FastCGI 模式运行 PHP 的话就没有必要用线程安全检查了, NTS(非线程安全)的版本能够更好的提高效率。
对于具体的服务器应该使用什么版本的问题,由于 Linux 下没有线程安全与线程不安全的区分,所以所有的选择都是对于 Windows 系统的:
- IIS: NTS(非线程安全)
- Nginx: NTS(非线程安全)
- Apache: TS(线程安全)
配置 PHP
- 进入文件夹修改
php.ini-development
文件为php-ini
; - 将你的 PHP 的安装目录(如 D:\PHP7)添加进系统变量 Path,完成后可以在命令行中输入
php -v
来检查是否配置成功; - 将
;extension_dir = "ext"
前面的分号去掉; - 根据自身的需要,可以通过添加
extension=xxx
来加载需要的扩展。若该扩展不存在,可以通过网络下载并放进/ext
目录下。
配置 redis 扩展
php 的 redis 扩展是需要下载的。首先打开 https://pecl.php.net/package/redis 。
注意,下载扩展时一定要跟你当前的 php 版本(版本号以及是否线程安全)是对应的

下载后将其解压,然后将其中的 php_redis.dll
文件复制到 PHP 目录下的 ext
文件夹里。
最后,在 php.ini
中添加 extension=redis
即可。
配置 Nginx
由于 Nginx 的高性能,现在的 PHP 大多与 Nginx 进行搭配。Nginx 直接去官网下载后解压即可,目录下的 conf/nginx.conf
即 Nginx 的配置文件。
首先,仍然需要修改 PHP 的配置。找到 php.ini
中的 cgi.fix_pathinfo=1
,将其需要注释即可。cgi.fix_pathinfo
是用来设置在 cgi 模式下 PHP 是否提供 PATH_INFO 信息。因为 Nginx 默认不会设置 PATH_INFO 的值。
然后,再打开 Nginx 的配置文件 nginx.conf
,添加或修改这样的一个服务
1 | server { |
配置好后,只需在 Nginx 的目录下执行以下命令即可:
1 | start nginx # 打开 |