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 "連接成功";
?>