php通常指超文本預(yù)處理器,用于面向?qū)ο?、命令式編程,是一種通用開源腳本語言。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)負(fù)責(zé)任的成都網(wǎng)站制作公司!
主要特點(diǎn):
為開源性和免費(fèi)性、快捷性、數(shù)據(jù)庫連接的廣泛性、面向過程和面向?qū)ο蟛⒂?。?yōu)點(diǎn)是利于學(xué)習(xí),使用廣泛。此外,php還可以指菲律賓比索的標(biāo)準(zhǔn)貨幣代碼符號(hào),MPLS網(wǎng)絡(luò)中的倒數(shù)第二跳彈出功能。是英文超級(jí)文本預(yù)處理語言Hypertext Preprocessor的縮寫。PHP 是一種HTML 內(nèi)嵌式的語言,是一種在服務(wù)器端執(zhí)行嵌入HTML文檔的腳本語言,語言風(fēng)格有些類似于C語言,被廣泛的運(yùn)用。
簡介:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預(yù)處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點(diǎn),利于學(xué)習(xí),使用廣泛,主要適用于Web開發(fā)領(lǐng)域。PHP 獨(dú)特的語法混合了C、Java、Perl以及PHP自創(chuàng)的語法它可以比CGI或者Perl更快速地執(zhí)行動(dòng)態(tài)網(wǎng)頁。用PHP做出的動(dòng)態(tài)頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)文檔中去執(zhí)行,執(zhí)行效率比完全生成HTML標(biāo)記的CGI要高許多;PHP還可以執(zhí)行編譯后代碼,編譯可以達(dá)到加密和優(yōu)化代碼運(yùn)行,使代碼運(yùn)行更快。
特性包括:
1、PHP 獨(dú)特的語法混合了 C、Java、Perl 以及 PHP 自創(chuàng)新的語法
2、PHP可以比CGI或者Perl更快速的執(zhí)行動(dòng)態(tài)網(wǎng)頁——?jiǎng)討B(tài)頁面方面,與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執(zhí)行,執(zhí)行效率比完全生成htmL標(biāo)記的CGI要高許多;PHP具有非常強(qiáng)大的功能,所有的CGI的功能PHP都能實(shí)現(xiàn)
3、 PHP支持幾乎所有流行的數(shù)據(jù)庫以及操作系統(tǒng)。
4、最重要的是PHP可以用C、C++進(jìn)行程序的擴(kuò)展!
語言特點(diǎn):
開源免費(fèi)
PHP是一個(gè)受眾大并且擁有眾多開發(fā)者的開源軟件項(xiàng)目,Linux + Nginx + Mysql + PHP是它的經(jīng)典安裝部署方式,相關(guān)的軟件全部都是開源免費(fèi)的,所以使用PHP可以節(jié)約大量的正版授權(quán)費(fèi)用。不過PHP作為一個(gè)開源軟件,它缺乏大型科技公司的支持背景,網(wǎng)絡(luò)上對它的唱衰也是經(jīng)久不衰,不過它的持續(xù)迭代和性能持續(xù)增強(qiáng)的現(xiàn)實(shí)卻是鼓舞人心的,PHP社區(qū)用實(shí)際行動(dòng)給予各種質(zhì)疑強(qiáng)有力的回?fù)簟?/p>
快捷高效
PHP的內(nèi)核是C語言編寫的基礎(chǔ)好效率高,可以用C語言開發(fā)高性能的擴(kuò)展組件;PHP的核心包含了數(shù)量超過1000的內(nèi)置函數(shù),功能應(yīng)有盡有很全面,開箱即用程序代碼簡潔; PHP數(shù)組支持動(dòng)態(tài)擴(kuò)容,支持以數(shù)字、字符串或者混合鍵名的關(guān)聯(lián)數(shù)組,能大幅提高開發(fā)效率; PHP是一門弱類型語言,程序編譯通過率高,相對其他強(qiáng)類型語言開發(fā)效率快;PHP天然熱部署,在php-fpm運(yùn)行模式下代碼文件覆蓋即完成熱部署;PHP經(jīng)過20多年的發(fā)展,在互聯(lián)網(wǎng)上可以搜到海量的參考資料供參考學(xué)習(xí)。
性能提升
PHP版本越高它的整體性能越高,根據(jù)官方介紹,PHP7.0.0 對比PHP5.6性能就提升了2倍,PHP7.4已經(jīng)比PHP7.0快了約30%,PHP8.0在性能上又相對PHP7.4大約改進(jìn)了10%。PHP 8.0 引入了 JIT編譯器特性,同時(shí)加入多種新的語言功能,例如命名參數(shù)、聯(lián)合類型、注解、Constructor Property Promotion、match 表達(dá)式、nullsafe 運(yùn)算符以及對類型系統(tǒng)、錯(cuò)誤處理和一致性的改進(jìn)。PHP擁有自己的核心開發(fā)團(tuán)隊(duì),保持5年發(fā)布一個(gè)大版本、1個(gè)月發(fā)布2個(gè)小版本的頻率,最新的版本是PHP8.08 。
跨平臺(tái)
每個(gè)平臺(tái)都有對應(yīng)的php解釋器版本,指針對不同平臺(tái)均編譯出目標(biāo)平臺(tái)的二進(jìn)制碼(PHP解釋器),php開發(fā)的程序可以不經(jīng)修改運(yùn)行在windows、linux、unix等多個(gè)操作系統(tǒng)上。
常駐內(nèi)存
php-cli模式下可以實(shí)現(xiàn)程序常駐內(nèi)存,各種變量和數(shù)據(jù)庫連接都能長久保存在內(nèi)存實(shí)現(xiàn)資源復(fù)用,比較常用的做法是結(jié)合swoole? ?組件編寫cli框架。
頁面生命周期
在php-fpm模式下,所有的變量都是頁面級(jí)的,無論是全局變量還是類的靜態(tài)成員,都會(huì)在頁面執(zhí)行完畢后被清空,對程序員水平要求低,占用內(nèi)存非常少,特別適合中小型系統(tǒng)的開發(fā)。
運(yùn)行機(jī)制:
PHP常見的運(yùn)行模式有2種,分別是php-fpm 和php-cli 。當(dāng)PHP 選擇運(yùn)行在php-fpm模式下,所有的變量都是頁面級(jí)的,無論是全局變量還是類的靜態(tài)成員,都會(huì)在頁面執(zhí)行完畢后被清空。運(yùn)行在php-cli模式下可以實(shí)現(xiàn)程序常駐內(nèi)存,各種變量和數(shù)據(jù)庫連接都能長久保存在內(nèi)存 實(shí)現(xiàn)資源復(fù)用,性能可以得到很大的提升,php-cli開發(fā)比較復(fù)雜能但是能夠獲取更高的性能,對開發(fā)者的要求比較高需要比較高的開發(fā)水平,比較常用的模式是結(jié)合swoole 組件編寫cli框架,各種變量能保存在跨進(jìn)程的高性能共享內(nèi)存 Table ,可以開發(fā)出支持熱啟動(dòng)的php-cli可靠各類應(yīng)用系統(tǒng)。
php-fpm在PHP 5.3.3 版本成為了官方正式組件(2010-07-22),它提供了穩(wěn)定可靠的進(jìn)程管理服務(wù),進(jìn)程不足時(shí)候可以智能擴(kuò)充數(shù)量,閑置時(shí)候可以自動(dòng)回收銷毀多余的進(jìn)程,同時(shí)它對程序的容錯(cuò)能力很強(qiáng)大運(yùn)行非常穩(wěn)定,可以應(yīng)付企業(yè)級(jí)的開發(fā)需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互聯(lián)網(wǎng)協(xié)議下進(jìn)行的用戶的輸入輸出,頁面級(jí)生命周期各種資源用完即釋放,不存在內(nèi)存泄漏的問題。php-fpm也提供有一些常駐內(nèi)存的技術(shù)支持,例如PHP 7.4引入的opcache.preload也能實(shí)現(xiàn)局部的PHP類和函數(shù)的常駐內(nèi)存,不過這個(gè)方法不夠靈活,和服務(wù)器配置捆綁的太死了。
php-cli因?yàn)槟軐?shí)現(xiàn)各類資源的常駐內(nèi)存,所以可以資源復(fù)用,更高效完成多進(jìn)程編程和異步編程,可以開發(fā)出負(fù)載能力更高的應(yīng)用系統(tǒng)。但是相對php-fpm的簡單編程開發(fā),開發(fā)者要注意很多的事項(xiàng)和需要做很多附加的控制器開發(fā),否則就無法實(shí)現(xiàn)期待中的高性能。
首先開發(fā)者需要去實(shí)現(xiàn)可靠的進(jìn)程管理服務(wù),保證系統(tǒng)進(jìn)程遇到各類錯(cuò)誤退出運(yùn)行后能夠自動(dòng)創(chuàng)建新的進(jìn)程,只有這樣才能保證后續(xù)的服務(wù)請求有足夠空閑進(jìn)程可分配。每個(gè)業(yè)務(wù)代碼段都要做異常處理,讓進(jìn)程遇到非致命錯(cuò)誤時(shí)候不會(huì)退出,因?yàn)檫M(jìn)程重啟意味程序和各類資源需要再次加載,這個(gè)過程性能消耗不小,所以只有進(jìn)程穩(wěn)定運(yùn)行了常駐內(nèi)存才有意義。
其次因?yàn)槌qv內(nèi)存,編寫的新的程序必須重啟服務(wù)才能生效,這一點(diǎn)習(xí)慣了fpm模式的開發(fā)者會(huì)感到比較陌生。另外開發(fā)者需要手工釋放內(nèi)存,否則系統(tǒng)長時(shí)間運(yùn)行后會(huì)出現(xiàn)內(nèi)存泄露。同時(shí)在cli模式下,我們不能像fpm里直接用 $_SERVER、$_POST、$_GET、$_COOKI和$_FILES 進(jìn)行編程工作,需要自己去解析各種互聯(lián)網(wǎng)通訊協(xié)議完成用戶的輸入輸出。要實(shí)現(xiàn)多進(jìn)程編程利用多核CPU計(jì)算,還有學(xué)習(xí)使用pcntl和posix編程,這里涉及到了異步編程邏輯,這塊難度還是比較大的。比較常用的模式是結(jié)合swoole 組件編寫cli框架。
PHP是一個(gè)活躍的社區(qū)開發(fā)語言,有專業(yè)的核心開發(fā)團(tuán)隊(duì)在持續(xù)不斷的迭代,最近一個(gè)版本就是PHP 8.0.8 引入了很多的新特性。
語言參考:
內(nèi)置函數(shù)
PHP 有很多標(biāo)準(zhǔn)的函數(shù)和結(jié)構(gòu)。還有一些函數(shù)需要和特定的擴(kuò)展模塊一起編譯,否則在使用它們的時(shí)候就會(huì)得到一個(gè)致命的“未定義函數(shù)”錯(cuò)誤。例如,要使用 image 函數(shù)中的 imagecreatetrue,需要在編譯 PHP 的時(shí)候加上 GD 的支持。或者要使用 mysqli_connect函數(shù),就需要在編譯 PHP 的時(shí)候加上 MySQLi 支持。有很多核心函數(shù)已包含在每個(gè)版本的 PHP 中如字符串和變量函數(shù)。調(diào)用 phpinfo或者 get_loaded_extensions可以得知 PHP 加載了那些擴(kuò)展庫。同時(shí)還應(yīng)該注意,很多擴(kuò)展庫默認(rèn)就是有效的。
靜態(tài)網(wǎng)站與動(dòng)態(tài)網(wǎng)站的區(qū)別
靜態(tài)網(wǎng)站:web1.0 時(shí)代
動(dòng)態(tài)網(wǎng)站:web2.0 時(shí)代
靜態(tài)網(wǎng)站特點(diǎn):
1、網(wǎng)頁內(nèi)容一經(jīng)發(fā)布到網(wǎng)站服務(wù)器,無論是否有用戶訪問,每個(gè)靜態(tài)頁面的內(nèi)容都是保存在網(wǎng)站服務(wù)器上的。也就是說,靜態(tài)網(wǎng)頁是實(shí)實(shí)在在保存在服務(wù)器上的文件,每個(gè)網(wǎng)頁都是一個(gè)獨(dú)立的文件。
2、靜態(tài)網(wǎng)頁的內(nèi)容相對穩(wěn)定,因此容易被搜索引擎檢索。
3、 靜態(tài)網(wǎng)頁沒有數(shù)據(jù)庫的支持,在網(wǎng)站制作和維護(hù)方面工作量較大,因此當(dāng)網(wǎng)站信息量很大時(shí)完全依靠靜態(tài)網(wǎng)頁制作方式比較困難。
4、靜態(tài)網(wǎng)頁的交互性較差,在功能方面有較大的限制。
動(dòng)態(tài)網(wǎng)站特點(diǎn):
1、交互性:網(wǎng)頁會(huì)根據(jù)用戶的要求和選擇而動(dòng)態(tài)地改變和響應(yīng),瀏覽器作為客戶端,成為一個(gè)動(dòng)態(tài)交流的橋梁,動(dòng)態(tài)網(wǎng)頁的交互性也是今后web發(fā)展的潮流。
2、自動(dòng)更新:即無須手動(dòng)更新HTML文檔,便會(huì)自動(dòng)生成新頁面,可以大大節(jié)省工作量
3、因時(shí)因人而異:即當(dāng)不同時(shí)間、不同用戶訪問同一網(wǎng)址時(shí)會(huì)出現(xiàn)不同頁面。
動(dòng)態(tài)網(wǎng)頁是與靜態(tài)網(wǎng)頁相對應(yīng)的,靜態(tài)網(wǎng)頁的后綴是以 .htm , .html , .shtml , .xml ,動(dòng)態(tài)網(wǎng)頁的后綴是以 .asp , .jsp , .php , .perl , cgi 等形式。在動(dòng)態(tài)網(wǎng)頁網(wǎng)址中有一個(gè)標(biāo)志性的符號(hào)"?"
第一部分。安裝Apache2.4.9 服務(wù)器
1
下載回來的是解壓文件,解壓獲得程序文件夾Apache24和說明文件readme_first.html。
2
配置apache服務(wù)器。
3
啟動(dòng)Apache服務(wù)器。
4
測試。你可以把Apache24\htdocs目錄下的index.html放到\www目錄下,用瀏覽器127.0.0.1訪問會(huì)出現(xiàn)“It
works”那么就說明apache已經(jīng)正確安裝了。如果在命令行出現(xiàn)問題提示,可能是80端口被其他程序占用。如果是訪問403,請參考上面第2步“配置apache服務(wù)器”逐個(gè)核對。
5
加入為windows的系統(tǒng)服務(wù),讓Apache自啟動(dòng)。
(1) 關(guān)閉3的那個(gè)httpd命令窗口,不然會(huì)報(bào)錯(cuò)的。
(2) 開始菜單→運(yùn)行輸入cmd打開命令提示符。輸入G:回車 cd myServer/Apache24/bin回車
END
第二部分 安裝php7.0.0
下面是php的安裝。
重啟 Apache 服務(wù)器?。?!
END
第三部分。MySQL的安裝
1
下面是mysql的安裝。
!--表單文件,拷入index.php--
!DOCTYPE?html
html
head
style
label{display:inline-block;width:100px;margin-bottom:10px;}
/style
titleAdd?students/title
/head
body
!--?數(shù)據(jù)庫用mysqli?面向過程調(diào)用方法--
form?method="post"?action="write2db.php"
!--數(shù)據(jù)庫用mysqli?面向過程調(diào)用方法
form?method="post"?action="write2db_sqlio.php"
--
!--數(shù)據(jù)庫用PDO調(diào)用方法
form?method="post"?action="write2db_pdo.php"
--
labelFirst?Name/label
input?type="text"?name="first_name"?/
br?/
labelLast?Name/label
input?type="text"?name="last_name"?/
br?/
labeldepartment/label
input?type="text"?name="department"?/
br?/
labelEmail/label
input?type="text"?name="email"?/
br?/
input?type="submit"?value="Add?students"
/form
/body
/html
------------------------------
?php
//拷貝命名為write2db.php,數(shù)據(jù)庫用mysqli?面向過程調(diào)用方法
//print_r($_POST);
//?create?a?variable
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name'];
$department=$_POST['department'];
$email=$_POST['email'];
//調(diào)試用
echo?"Your?input:?";
echo?$first_name;
echo?'br?/';
echo?$last_name;
echo?'br?/';
echo?$department;
echo?'br?/';
echo?$email;
echo?'br?/';
$servername?=?"localhost";
//Your?database?username?and?password
//$username?=?"username";
//$password?=?"password";
$username?=?"tester";
$password?=?"testerPassword";
//your?database?name
$dbname?=?"test";
$tablename?="student";
//?Create?connection
$connect?=?mysqli_connect($servername,?$username,?$password,?$dbname);
if?(!$connect)?{
die("Connection?failed:?"?.?mysqli_connect_error());
}
//Execute?the?query
$sql="INSERT?INTO?$tablename?(first_name,last_name,department,email)
VALUES('$first_name','$last_name','$department','$email')";
if?(mysqli_query($connect,?$sql))?{
echo?"Hooray!?New?record?is?inserted?to?database?successfully.?Please?check?database.";
}?else?{
echo?"Error:?"?.?$sql?.?"br?/"?.?mysqli_error($connect);
}
mysqli_close($connect);
?
?php
//拷貝命名為write2db_sqlio.php,數(shù)據(jù)庫用mysqli?面向?qū)ο笳{(diào)用方法
//print_r($_POST);
//?create?a?variable
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name'];
$department=$_POST['department'];
$email=$_POST['email'];
//調(diào)試用
echo?"Your?input:?";
echo?$first_name;
echo?'br?/';
echo?$last_name;
echo?'br?/';
echo?$department;
echo?'br?/';
echo?$email;
echo?'br?/';
$servername?=?"localhost";
//Your?database?username?and?password
//$username?=?"username";
//$password?=?"password";
$username?=?"tester";
$password?=?"testerPassword";
//database?name
$dbname?=?"test";
$tablename?="student";
//?Create?connection
$conn?=?new?mysqli($servername,?$username,?$password,?$dbname);
//?Check?connection
if?($conn-connect_error)?{
die("Connection?failed:?"?.?$conn-connect_error);
}?
$sql="INSERT?INTO?$tablename?(first_name,last_name,department,email)
VALUES('$first_name','$last_name','$department','$email')";
if?($conn-query($sql)?===?TRUE)?{
echo?"New?record?created?successfully";
}?else?{
echo?"Error:?"?.?$sql?.?"br"?.?$conn-error;
}
$conn-close();
?
?php
//拷貝為文件write2db_pdo.php,數(shù)據(jù)庫用PDO調(diào)用方法
//print_r($_POST);
a?variable
$first_name=$_POST['first_name'];
$last_name=$_POST['last_name'];
$department=$_POST['department'];
$email=$_POST['email'];
//調(diào)試用
echo?"Your?input:?";
echo?$first_name;
echo?'br?/';
echo?$last_name;
echo?'br?/';
echo?$department;
echo?'br?/';
echo?$email;
echo?'br?/';
$servername?=?"localhost";
//Your?database?username?and?password
//$username?=?"username";
//$password?=?"password";
$username?=?"tester";
$password?=?"testerPassword";
//your?database?name
$dbname?=?"test";
$tablename?="student";
//?Create?connection
try?{
$conn?=?new?PDO("mysql:host=$servername;dbname=$dbname",?$username,?$password);
//?set?the?PDO?error?mode?to?exception
$conn-setAttribute(PDO::ATTR_ERRMODE,?PDO::ERRMODE_EXCEPTION);
$sql="INSERT?INTO?$tablename?(first_name,last_name,department,email)
VALUES('$first_name','$last_name','$department','$email')";
//?use?exec()?
$conn-exec($sql);
echo?"New?record?created?successfully";
}
catch(PDOException?$e)
{
echo?$sql?.?"br"?.?$e-getMessage();
}
$conn?=?null;
?
--創(chuàng)建數(shù)據(jù)庫test,?將此文件存為test.sql?導(dǎo)入數(shù)據(jù)庫,或者手動(dòng)創(chuàng)建表結(jié)構(gòu)
--?phpMyAdmin?SQL?Dump
--?version?4.7.4
--?
--
--?Host:?127.0.0.1:3306
--?Generation?Time:?Mar?12,?2018?at?04:04?AM
--?Server?version:?5.7.19
--?PHP?Version:?7.1.9
SET?SQL_MODE?=?"NO_AUTO_VALUE_ON_ZERO";
SET?AUTOCOMMIT?=?0;
START?TRANSACTION;
SET?time_zone?=?"+00:00";
/*!40101?SET?@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT?*/;
/*!40101?SET?@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS?*/;
/*!40101?SET?@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION?*/;
/*!40101?SET?NAMES?utf8mb4?*/;
--
--?Database:?`test`
--
--?--------------------------------------------------------
--
--?Table?structure?for?table?`student`
--
DROP?TABLE?IF?EXISTS?`student`;
CREATE?TABLE?IF?NOT?EXISTS?`student`?(
`id`?tinyint(3)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
`first_name`?varchar(20)?NOT?NULL,
`last_name`?varchar(20)?NOT?NULL,
`department`?varchar(50)?NOT?NULL,
`email`?varchar(50)?NOT?NULL,
PRIMARY?KEY?(`id`)
)?ENGINE=MyISAM?AUTO_INCREMENT=2?DEFAULT?CHARSET=utf8;
--
--?Dumping?data?for?table?`student`
--
INSERT?INTO?`student`?(`id`,?`first_name`,?`last_name`,?`department`,?`email`)?VALUES
(1,?'first1',?'last1',?'cs',?'1985@qq.com');
COMMIT;
/*!40101?SET?CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT?*/;
/*!40101?SET?CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS?*/;
/*!40101?SET?COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION?*/;