PHP运行环境的搭建及问题处理

本文讲的是在Windows10下,使用PHP7.4.4 压缩包+ Apache2.4.41压缩包为例详细介绍如何搭建PHP运行环境,其中还对新手可能碰到的问题给出了具体的处理办法。顺便指出,现在PHP和Apache官方都已不提供install版了。建议新手使用集成组件安装版,诸如WampServer、phpStudy,最后将说明。

PHP原为Personal Home Page后更名为 Hypertext Preprocessor(超级文本预处理语言),是一种创建动态交互性站点的强有力的服务器端脚本语言,是常用的网站编程语言。开源免费。

为了学习使用 PHP,你需要一个运行环境, PHP运行环境通常包括:

★Web 服务器,WEB服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。

Apache开源的老牌服务器,它可以运行在几乎所有广泛使用的计算机平台上。

IIS是英文Internet Information Server的缩写,译成中文就是"Internet信息服务"的意思,是微软公司主推的,专门运行在Windows 上。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。可以运行在多种平台上。

★PHP

★数据库,如 MySQL等。非必须,除非使用数据库存储数据。

 

下面详细介绍在Windows10下,使用目前最新的PHP-7.4.4 压缩包版本和Apache2.4.41压缩包版本搭建PHP运行环境。我这里使用的是

注意,PHP版本和Apache版本的选择有时很关键,否则易出现连接不上数据库等问题。httpd-2.4.41+php-7.4.4+微软常用运行库合集_2019.07.20_X64,下载地址

https://download.csdn.net/download/cnds123/12270209 
 

安装PHP,先到官网下载:

https://www.php.net/downloads.php

注:如果想使用Apache配置PHP的话,一般需要选择Thread Safe(TS)版本的PHP。

如果想使用IIS配置PHP的话,那么需要选择Non-Thread Safe(NTS)版本的PHP。

TS:Thread Safe 线程安全, 执行时会进行线程(Thread)安全检查

NTS:Non Thread Safe 非线程安全, 在执行时不进行线程(Thread)安全检查

使用Apache+PHP的模式下,一般是把PHP作为一个Module load到apache中,那么以apache父进程-多子进程的工作模式,是需要进行线程安全检查的,所以如果是以这种方式执行php,选择ts版本。

那么如果是使用FastCGI(是一个常驻(long-live)型的CGI(公共网关接口、Common Gateway Interface)),比如说用php-fpm管理php执行,则不需要进行线程安全检查,则选择nts版本的php。】

下载后解压(复制到D盘解压,可修改路径,不要含中文字符)为:D:/php-7.4.4

在其中有两个php配置文件,php.ini-development 和 php.ini-production,两个文件没有太多区别,一个用于开发环境,一个用于生产环境,区别也就是开发环境的配置能够看到更多的错误警告。

复制其中一个,这里是将php.ini-development后缀更改为ini,用记事本打开,按需求修改部分配置

找到; extension_dir = "ext" 去掉前面的分号,也可以在ext目录【其中是一些扩展库】前加上其实际所在的路径,如我的是:

extension_dir = "D:/php-7.4.4/ext"

参见下图:

 

再将 D:/php-7.4.4加入环境变量PATH中,选中计算机,右键属性–>高级系统设置 –>环境变量–>系统变量,找到Path,编辑,在其后加上。参见下图:

 

顺便说明,php命令行用法简介

在命令行中查看当前php的版本

php –v

 

在cmd(命令行)中查看使用帮助

php -help 或php –h

 

在cmd(命令行)中执行php文件

用记事本建立文件,内容:

<?php

  echo "运行php命令行echo";

  echo "\r\n";

  echo "Hello, World.";

  echo "\r\n";

  echo "你好世界。";

?>

保存为文件名为:hello.php,保存路径为d:\phpDome。

可如下执行

php -f  路径\文件名,如:

php -f  d:\hello.php

 

在cmd(命令行)中

 php -a

进入交互shell后,键入php代码

ctrl+c退出交互shell

 

对此不多说了。

 

安装Apache,先到官网下载:

http://httpd.apache.org/download.cgi

【使用ApacheHaus或ApacheLounge,见上图标示2处,这儿使用后者】

下载后解压(复制到D盘解压,可修改路径,不要含中文字符和空格)为:D:/Apache24

将 D:\Apache24\bin加入环境变量PATH中(参见前面)

 

在其中找到httpd.conf

用记事本打开httpd.conf

 如下处理:

1)查找 DocumentRoot,若找到类似 DocumentRoot "c:/Apache24/htdocs"

说明此为早期版本,将之改为DocumentRoot "d:/Apache24/htdocs" ——即将后面“”内按你的实际安装路径改动,我这里是"d:/Apache24"。

若找到类似DocumentRoot "${SRVROOT}/htdocs"

说明此为后来版本,搜索Define SRVROOT,没错是找这个,找到 Define SRVROOT "/Apache24"之类,将之改为Define SRVROOT "d/Apache24"——即将后面“”内按你的实际安装路径改动,我这里是"d:/Apache24"。 

2)在文末加入如下几句:

PHPIniDir "路径”

LoadModule php7_module "路径/php7apache2_4.dll" 

AddType application/x-httpd-php .php .html .htm  #添加支持对php脚本解析,解决显示php源码或直接下载文件

其中:

路径依据PHP的安装路径(php.ini文件所在的路径)修改,我这里是d:/php-7.4.4。PHP7的预处理器模块文件是 php7apache2_4.dll(特别提示,这是PHP7的预处理器模块文件)在PHP安装目录下可以看到。参见下图:

 

快速检查apache 中的 配置文件httpd.conf 是否正常

在cmd中输入httpd –t  回车(即按下Enter键),显示如下

OK!

 

【若在cmdzhong 用httpd -t 检查师,提示:

AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::4de2:6c46:aec1:6a57. Set the 'ServerName' directive globally to suppress this message

Syntax OK

处理:

在httpd.conf中,搜索"#ServerName",

在#ServerName www.example.com:80句之后

添加ServerName localhost:80】

 

现在,可以启动apache,

以管理的身份运行CMD,参见下图:

 

先安装服务,在cmd中输入httpd -k install [–n “服务名”] ,其中[]部分代表可选,不用使用默认服务名,例如:

httpd -k install -n “Apache24”

再启动服务 net start 服务名,例如:

net start Apache24

参见下图:

 类似上图显示Apache服务正常工作了。

注意,httpd.conf改动后,要重启Apache服务才成。

【若hetpd.conf加入PHPIniDir "php.ini的路径” 如PHPIniDir "d:/php7.4.4”报错

apache添加php模块后无法启动了。

可能缺少微软常用运行库,搜索“微软常用运行库合集” 下载安装。】

 

在cmd中查看Apache的版本号
httpd -v 

 

【附、服务操作,以管理员身份打开cmd,再如下操作

删除服务 sc delete 服务名 

sc delete Apache24

 

启动服务

通过命令net start 服务名

 

停止服务

通过命令net stop服务名

 

在cmd中查看开启了哪些服务

net start

 

在cmd中查看开启了哪些端口——列出所有端口的情况

netstat -ano

 

在cmd中查看指定端口的使用情况

如查找80端口的使用情况

netstat -ano|findstr :80

 

【顺便提及

找到ApacheMonitor.exe运行(在\bin),可以方便的管理服务:

在左下角上可以看到 右击它出现快捷菜单,单击Open Apache Monitor 出现Apache Service Monitor对话框。参见下图:

现在可以写一个php文件,内容如下:

<HTML>

<HEAD><h2>PHP Hello World - 来自PHP的问候。</h2></HEAD>

<BODY>

<?php

 echo "Hello, World.";

 echo "你好世界。";

?>

</BODY>

</HTML>

保存文件名为helloworld.php(或helloworld.html),注意保存位置htdocs(这里是d:/Apache24/htdocs)

在浏览器输入网址:http://127.0.0.1/helloworld.php 或http://localhost/helloworld.php,运行结果如下:

 OK!
 

下面给出一个好点的例子,简单投票系统  

这个由3个文件组成poll.html、poll_vote.php、poll_result.txt

poll.html,此HTML 文件作为用户界面表单,内容如下

<html>

<head>

<meta charset="utf-8">

<title>简单投票系统</title>

<script>

function getVote(int) {

  if (window.XMLHttpRequest) {

    // IE7+, Firefox, Chrome, Opera, Safari 执行代码

    xmlhttp=new XMLHttpRequest();

  } else {

    // IE6, IE5 执行代码

    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

  }

  xmlhttp.onreadystatechange=function() {

  if (xmlhttp.readyState==4 && xmlhttp.status==200)

    {

      document.getElementById("poll").innerHTML=xmlhttp.responseText;

    }

  }

  xmlhttp.open("GET","poll_vote.php?vote="+int,true);

  xmlhttp.send();

}

</script>

</head>

<body>

 

<div id="poll">

<h3>你喜欢 PHP 和 AJAX 吗?</h3>

<form>

是:

<input type="radio" name="vote" value="0" οnclick="getVote(this.value)">

<br>否:

<input type="radio" name="vote" value="1" οnclick="getVote(this.value)">

</form>

</div>

 

</body>

</html>

 

poll_vote.php,此文件接受用户的操作,读写"poll_result.txt" 文件,内容如下

<?php

$vote = htmlspecialchars($_REQUEST['vote']);

 

// 获取文件中存储的数据

$filename = "poll_result.txt";

$content = file($filename);

 

// 将数据分割到数组中

$array = explode("||", $content[0]);

$yes = $array[0];

$no = $array[1];

if ($vote == 0)

{

  $yes = $yes + 1;

}

if ($vote == 1)

{

  $no = $no + 1;

}

 

// 插入投票数据

$insertvote = $yes."||".$no;

$fp = fopen($filename,"w");

fputs($fp,$insertvote);

fclose($fp);

?>

 

<h2>结果:</h2>

<table>

  <tr>

  <td>是:</td>

  <td>

  <span style="display: inline-block; background-color:green;

      width:<?php echo(100*round($yes/($no+$yes),2)); ?>px;

      height:20px;" ></span>

  <?php echo(100*round($yes/($no+$yes),2)); ?>%

  </td>

  </tr>

  <tr>

  <td>否:</td>

  <td>

  <span style="display: inline-block; background-color:red;

      width:<?php echo(100*round($no/($no+$yes),2)); ?>px;

      height:20px;"></span>

  <?php echo(100*round($no/($no+$yes),2)); ?>%

  </td>

  </tr>

</table>

 

poll_result.txt内容如下

0||0

说明:文本文件 (poll_result.txt) 中存储来自投票程序的数据。其中:

第一个数字表示 "Yes" 投票,第二个数字表示 "No" 投票。

 

现在可以发布这个小系统了

【如何知道网址发布位置——Apache HTTP Server 的网站发布目录?

可以用记事本打开 http.conf 文件,搜索找到 DocumentRoot 为开头的那一行:

1)如果其中含有${SRVROOT},再搜索Define SRVROOT,由Define SRVROOT后面部分和DocumentRoot ${SRVROOT}后面部分两者确定网站发布目录,参见下图:

 

2)如果其中没有${SRVROOT},由DocumentRoot后面部分确定网站发布目录:

 

知道了网站发布目录,发布很简单

 

将这三个文件放到SimpleVoting 目录中,将SimpleVoting 目录复制到Apache安装路径的htdocs目录中(这里是d:/Apache24/htdocs)

现在可以运行这个简单投票系统了。

在浏览器输入网址:http://127.0.0.1/SimpleVoting/poll.html或http://localhost//SimpleVoting/poll.html

上面演示了这台电脑,若未接入网络,可在此电脑的浏览器输入:localhost/php项目起始文件名访问,若接入网络,就可以被互联网中其它客户端用户访问了——在浏览器输入:地址/php项目起始文件名 访问。假设设置这台电脑局域网IP为192.168.1.6,在此局域网的另一台电脑的浏览器输入网址http://192.168.1.6/simpleVoting/poll.html  回车(按下Enter键)即可访问。

数据库

通过 PHP,您可以连接和操作数据库。php支持的数据库较多,除常见的Oracle、SQLServer、 Mysql外,还有很多。
当有数据存储与检索等需求时,就需要数据库。

关于数据库安装不多说,可参见:
https://blog.csdn.net/cnds123/article/details/104454487

找到PHP根目录下的php.ini,用文本编辑器打开找到下面几条常用配置,去掉前面的分号:
;extension=mysqli
;extension=pdo_mysql

参见下图:

 注意,改动后,要重启Apache服务生效。
 

推荐使用集成组件安装版,诸如WampServer等,它已经包含了 PHP、Apache、Mysql ,免去了开发人员将时间花费在繁琐的配置过程。

Windows 系统可以使用 WampServer,支持32位和64位系统,根据自己的系统选择版本。官网下载地址:http://www.wampserver.com 

但一般情况下不可下载。可到网上搜索下载,下面给出一个链接(华军软件园WampServer3.2下载页):

http://soft.onlinedown.net/soft/82112.htm

 

WampServer

需要初学者最初明确的两点:一是WampServer 安装时要留意安装路径,集成的PHP、Apache、MySQL 安装在此路径下的bin中,二是安装路径中的www目录就是其默认的网站发布目录。参见下图:

WampServe之默认网站发布目录的修改

在WampServer的安装目录找到scripts目录,用记事本打开config.inc.php文件,找到下面的句子:

$wwwDir=Sc_installDir.'/www';

改成你要设置的网站发布目录,例如你想将网站代码放到d:/site,将上句改为

$wwwDir='d:/site'

然后重启WampServer生效。

【也可以httpd.conf文件中修改DocumentRoot指定目录,然后重启WampServer生效,但这样修改,通过任务栏“W”图标进入原来网站发布目录。】

wampapache或wampapache64、wampariadb或wampariadb64、wampmysqld或wampmysqld64是wamp安装后出现的服务进程。

64代表64位版本没有的是32位版本。

wampapache 是wamp的apache服务端进程。

wampariadb是wamp的ariadb数据库服务端进程。

wampmysqld是wamp的mysql数据库服务端进程。

 

phpStudy

该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。

官网地址:https://www.xp.cn

其安装后的目录如下:

使用pdo 连接测试代码,其中password,要替换为MySQL的root用户的实际登录密码

<?php

try {

 $con= new PDO("mysql:host=localhost","root","password");

echo "连接成功";

}

catch(PDOException $e)

{

    echo $e->getMessage();

}

 ?>

 

使用mysqli_connect 连接测试代码,其中password,要替换为MySQL的root用户的实际登录密码

<?php

$con= mysqli_connect("localhost","root1","password");

if ($con->connect_error) {

     die("Connection failed: " . mysqli_connect_error());

}

echo "连接成功";

 ?>

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐