導航:首頁 > 編程語言 > php代碼自動生成原理

php代碼自動生成原理

發布時間:2023-06-09 14:03:11

A. 如何實現php自動創建資料庫

你做好程序以後,把資料庫導出成sql文件
1、連接資料庫
2、讀取這個sql文件里的sql語句,並執行
3、生成一個資料庫連接參數的php文件
<?php
$con=mysql_connect("localhost","peter","abc123");
if(!$con)
{
die('Couldnotconnect:'.mysql_error());
}

if(mysql_query("CREATEDATABASEmy_db",$con))
{
echo"Databasecreated";
}
else
{
echo"Errorcreatingdatabase:".mysql_error();
}

mysql_close($con);
?>

<?php
classReadSql{
//資料庫連接
protected$connect=null;
//資料庫對象
protected$db=null;
//sql文件
public$sqlFile="";
//sql語句集
public$sqlArr=array();
publicfunction__construct($host,$user,$pw,$db_name){
$host=empty($host)?C("DB_HOST"):$host;
$user=empty($user)?C("DB_USER"):$user;
$pw=empty($pw)?C("DB_PWD"):$pw;
$db_name=empty($db_name)?C("DB_NAME"):$db_name;
//連接資料庫
$this->connect=mysql_connect($host,$user,$pw)ordie("Couldnotconnect:".mysql_error());
$this->db=mysql_select_db($db_name,$this->connect)ordie("Yoncannotselectthetable:".mysql_error());
}
//導入sql文件
publicfunctionImport($url){
$this->sqlFile=file_get_contents($url);
if(!$this->sqlFile){
exit("打開文件錯誤");
}else{
$this->GetSqlArr();
if($this->Runsql()){
returntrue;
}
}
}
//獲取sql語句數組
publicfunctionGetSqlArr(){
//去除注釋
$str=$this->sqlFile;
$str=preg_replace('/--.*/i','',$str);
$str=preg_replace('//*.**/(;)?/i','',$str);
//去除空格創建數組
$str=explode("; ",$str);
foreach($stras$v){
$v=trim($v);
if(empty($v)){
continue;
}else{
$this->sqlArr[]=$v;
}
}
}
//執行sql文件
publicfunctionRunSql(){
foreach($this->sqlArras$k=>$v){
if(!mysql_query($v)){
exit("sql語句錯誤:第".$k."行".mysql_error());
}
}
returntrue;
}
}
//範例:
header("Content-type:text/html;charset=utf-8");
$sql=newReadSql("localhost","root","","log_db");
$rst=$sql->Import("./log_db.sql");
if($rst){
echo"Success!";
}
?>

B. 什麼是php急!!!

PHP(「PHP: Hypertext Preprocessor」,超文本預處理器的字母縮寫)是一種被廣泛應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤其適合 WEB 開發。
PHP 能做任何事。PHP 主要是用於服務端的腳本程序,因此您可以用 PHP 來完成任何其它的 CGI 程序能夠完成的工作,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不局限於此。
PHP 腳本主要用於以下三個領域:
服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。開展這項工作您需要具備以下三點:PHP 解析器(CGI 或者伺服器模塊)、WEB 伺服器和 WEB 瀏覽器。您需要在運行 WEB 伺服器時,安裝並配置 PHP,然後,可以用 WEB 瀏覽器來訪問 PHP 程序的輸出,即瀏覽服務端的 PHP 頁面。
命令行腳本。您可以編寫一段 PHP 腳本,並且不需要任何伺服器或者瀏覽器來運行它。通過這種方式,您僅僅只需要 PHP 解析器來執行。這種用法對於依賴 cron(Unix 或者 Linux 環境)或者 Task Scheler(Windows 環境)的日常運行的腳本來說是理想的選擇。這些腳本也可以用來處理簡單的文本。
編寫客戶端的 GUI 應用程序。對於基於窗口式的應用程序來說,PHP 或許不是一種最好的語言,但是如果您非常精通 PHP,並且希望在您的客戶端應用程序中使用 PHP 的一些高級特性,您可以利用 PHP-GTK 來編寫這些程序。用這種方法,您還可以編寫跨平台的應用程序。PHP-GTK 是 PHP 的一個擴展,在通常發布的 PHP 包中並不包含它。
PHP 能夠用在所有的主流操作系統上,包括 Linux、Unix 的各種變種(包括 HP-UX、Solaris 和 OpenBSD)、Microsoft Windows、Mac OS X、RISC OS 等。今天,PHP已經支持了大多數的 WEB 伺服器,包括 Apache、Microsoft Internet Information Server(IIS)、Personal Web Server(PWS)、Netscape 以及 iPlant server、Oreilly Website Pro Server、Caudium、Xitami、OmniHTTPd 等。對於大多數的伺服器,PHP 提供了一個模塊;還有一些 PHP 支持 CGI 標准,使得 PHP 能夠作為 CGI 處理器來工作。

綜上所述,使用 PHP,您可以自由地選擇操作系統和 WEB 伺服器。同時,您還可以在開發時選擇使用面對過程和面對對象,或者兩者混和的方式來開發。盡管 PHP 目前的版本還沒有支持 OOP 所有的標准,但很多代碼倉庫和大型的應用程序(包括 PEAR 庫)僅使用 OOP 代碼來開發。

使用 PHP,您並不局限於輸出 HTML。PHP 還能被用來動態輸出圖像、PDF 文件甚至 Flash 動畫(使用 libswf 和 Ming)。您還能夠非常簡便的輸出文本,例如 XHTML 以及任何其它形式的 XML 文件。PHP 能夠自動生成這些文件,在服務端開辟出一塊動態內容的緩存,可以直接把它們列印出來,或者將它們存儲到文件系統中。

PHP 最強大最顯著的特性之一,是它支持很大范圍的資料庫。您會發現利用 PHP 編寫資料庫支持的網頁簡單得難以置信。

C. PHP的性能探討和測試


1.緣起
關於PHP,很多人的直觀感覺是PHP是一種靈活的腳本語言,庫類豐富,使用簡單,安全,非常適合WEB開發,但性能低下。PHP的性能是否真的就如同大家的感覺一樣的差呢?本文就是圍繞這么一個話題來進陵搏行探討的。從源碼、應用場景、基準性能、對比分析等幾個方面深入分析PHP之性能問題,並通過真實的數據來說話。
2.從原理分析PHP性能
從原理分析PHP的性能,主要從以下幾個方面:內存管理、變數、函數、運行機制來進行分析。
2.1內存管理
類似Nginx的內存管理方式,PHP在內部也是基於內存池,並且引入內存池的生命周期概念。在內存池方面,PHP對PHP腳本和擴展的所有內存相關操作都進行了託管。對大內存和小內存的管理採用了不同的實現方式和優化,具體可以參考以下文檔:
2.2變數
總所周知,PHP是一種弱變數類型的語言,所以在PHP內部,所有的PHP變數都對應成一種類型Zval,其中具體定義如下:
在變數方面,PHP做了大量的優化工作,比如說Reference counting和 on writer機制。這樣能夠保證內存使用上的優化,並且減少內存拷貝次數(請參考
2.3函數
在PHP內部,所有的PHP函數都回轉化成內部的一個函數指針。比如說擴展中函數
ZEND_FUNCTION(my_function);//類似functionmy_function(){}
在內部展開後就會是一個函數
voidzif_my_function(INTERNAL_FUNCTION_PARAMETERS);
voidzif_my_function(intht,
zval*return_value,
zval*this_ptr,
intreturn_value_used,
zend_executor_globals*executor_globals);
從這個角度來看,PHP函數在內部也是對應一個函數指針。
2.4運行機制
在話說PHP性能的時候,很多人都會說「C/C++是編譯型,JAVA是半編譯型,PHP是解釋型」。也就是說PHP是先動態解析再代碼運行的,所以從這個角度來看,PHP性能必然很差。
的確,從PHP腳本運行來輸出,的確是一個動態解析再代碼運行的過程。具體來說,PHP腳本的運行機制如下圖所示:
PHP的運行階段也分成三個階段:
Parse。語法分析階段。
Compile。編譯產出opcode中間碼。
Execute。運行,動態運行進行輸出。
所以說,在PHP內部,本身也是存在編譯的過程。並且據此產生了大量的opcode cache工具,比如說apc、eacc、xcache等等。這些opcode cache在生產環境基本上在標配。基於opcode cache,能到做到「PHP腳本編譯一次,多次運行」的效果。從這點上,PHP就和JAVA的半編譯機制非常類似。
所以,從運行機制上來看,PHP的運行模式和JAVA是非常類似的,都是先產生中間碼,然後運行在不同虛擬機上。
2.5動態運行
從上面的幾個分析來看,PHP在內存管理、變數、函數、運行機制等幾個方面都做了大量的工作,所以從原理來看,PHP不應該存在性能尺御祥問題,性能至少也應該和Java比較接近。
這個時候就不得不談PHP動態語言的特性所帶來的性能問題了,由於PHP是動態運行時,所以所有的變數、函數、對象調用、作用域實現等等都是在執行階段中才確定的。這個從根本上決定了PHP性能中很難改變的一些東西:在C/C++等拆蔽能夠在靜態編譯階段確定的變數、函數,在PHP中需要在動態運行中確定,也就決定了PHP中間碼不能直接運行而需要運行在Zend Engine上。
說到PHP變數的具體實現,又不得不說一個東西了:Hashtable。Hashtable可以說在PHP靈魂之一,在PHP內部廣泛用到,包含變數符號棧、函數符號棧等等都是基於hashtable的。
以PHP變數為例來說明下PHP的動態運行特點,比如說代碼:
?php
$var=「hello,」;
?
該代碼的執行結果就是在變數符號棧(是一個hashtable)中新增一個項
當要使用到該變數時候,就去變數符合棧中去查找(也就是變數調用對出了一個hash查找的過程)。
同樣對於函數調用也基本上類似有一個函數符號棧(hashtable)。
其實關於動態運行的變數查找特點,在PHP的運行機制中也能看出一些。PHP代碼通過解釋、編譯後的流程下圖:
從上圖可以看出,PHP代碼在compile之後,產出的了類符號表、函數符號表、和OPCODE。在真正執行的時候,zend Engine會根據op code去對應的符號表中進行查找,處理。
從某種程度上,在這種問題的上,很難找到解決方案。因為這是由於PHP語言的動態特性所決定的。但是在國內外也有不少的人在尋找解決方案。因為通過這樣,能夠從根本上完全的優化PHP。典型的列子有facebook的hiphop。
2.6結論
從上面分析來看,在基礎的內存管理、變數、函數、運行機制方面,PHP本身並不會存在明顯的性能差異,但由於PHP的動態運行特性,決定了PHP和其他的編譯型語言相比,所有的變數查找、函數運行等等都會多一些hash查找的CPU開銷和額外的內存開銷,至於這種開銷具體有多大,可以通過後續的基準性能和對比分析得出。
因此,也可以大體看出PHP不太適合的一些場景:大量計算性任務、大數據量的運算、內存要求很嚴格的應用場景。如果要實現這些功能,也建議通過擴展的方式實現,然後再提供鉤子函數給PHP調用。這樣可以減低內部計算的變數、函數等系列開銷。
3.基準性能
對於PHP基準性能,目前缺少標準的數據。大多數同學都存在感性的認識,有人認為800QPS就是PHP的極限了。此外,對於框架的性能和框架對性能的影響很沒有響應的權威數字。
本章節的目的是給出一個基準的參考性能指標,通過數據給大家一個直觀的了解。
具體的基準性能有以下幾個方面:
1.裸PHP性能。完成基本的功能。
2.裸框架的性能。只做最簡單的路由分發,只走通核心功能。
3.標准模塊的基準性能。所謂標准模塊的基準性能,是指一個具有完整服務模塊功能的基準性能。
3.1環境說明
測試環境:
Uname -aPnux db-forum-test17.db01..com 2.6.9_5-7-0-0 #1 SMP Wed Aug 12
17:35:51 CST 2009 x86_64 x86_64 x86_64 GNU/Pnux
Red Hat Enterprise Pnux AS release 4 (Nahant Update 3)
8 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
軟體相關:
Nginx:nginx version: nginx/0.8.54 built by gcc 3.4.5 20051201 (Red Hat 3.4.5-2)
Php5:(採用php-fpm)
PHP 5.2.8 (cP) (built: Mar 6 2011 17:16:18)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
bingo2:
PHP框架。
其他說明:
目標機器的部署方式:nginx-php-fpm-php腳本。
測試壓力機器和目標機器獨立部署。
3.2裸PHP性能
最簡單的PHP腳本。
?php
require_once『./actions/indexAction.php』;
$objAction=newindexAction();
$objAction-init();
$objAction-execute();
?
Acitons/indexAction.php裡面的代碼如下
?php
classindexAction
{
pubPcfunctionexecute()
{
echo『hello,world!』;
}
}
?
通過壓力工具測試結果如下:
3.3裸PHP框架性能
為了和3.2的對比,基於bingo2框架實現了類似的功能。代碼如下
?php
require_once『Bingo/Controller/Front.php』;
$objFrontController=Bingo_Controller_Front::getInstance(array(『actionDir』=『./actions』,));
$objFrontController-dispatch();
壓力測試結果如下:
從該測試結果可以看出:框架雖然有一定的消耗,但對整體的性能來說影響是非常小的。
3.4標准PHP模塊的基準性能
所謂標准PHP模塊,是指一個PHP模塊所必須要具體的基本功能:
路由分發。
自動載入。
LOG初始化Notice日誌列印。所以的UI請求都一條標準的日誌。
錯誤處理。
時間校正。
自動計算每個階段耗時開銷。
編碼識別編碼轉化。
標准配置文件的解析和調用
採用bingo2的代碼自動生成工具產生標準的測試PHP模塊:test。
測試結果如下:
3.5結論
從測試數據的結論來看,PHP本身的性能還是可以的。基準性能完全能夠達到幾千甚至上W的QPS。至於為什麼在大多數的PHP模塊中表現不佳,其實這個時候更應該去找出系統的瓶頸點,而是簡單的說OK,PHP不行,那我們換C來搞吧。(下一個章節,會通過一些例子來對比,採用C來處理不見得有特別的優勢)
通過基準數據,可以得出以下幾個具體的結論:
1.PHP本身性能也很不錯。簡單功能下能夠達到5000QPS,極限也能過W。
2.PHP框架本身對性能影響非常有限。尤其是在有一定業務邏輯和數據交互的情況下,幾乎可以忽略。
3.一個標準的PHP模塊,基準性能能夠達到2000QPS(80 cpu idle)。
4.對比分析
很多時候,大家發現PHP模塊性能不行的時候,就來一句「ok,我們採用C重寫吧」。在公司內,採用C/C++來寫業務邏輯模塊的現象到處都有,在前幾年甚至幾乎全部都是採用C來寫。那時候大家寫的真是一個痛苦:調試難、敏捷不要談。

D. PHP如何生成HTML的思路

一、 具備本地調試PHP的功能

在WINDOWS XP操作系統下,筆者建議你可以到網上下載一個PHP+MYSQL+APHCHE的伺服器套裝,如華軍軟體園,去那裡搜索一下就可以下載到。下載完後默認安裝即可,這樣您就具備了在本地測試PHP的功能了,省去了很多手動配置的麻煩,怎麼樣,簡單吧,OK,這僅僅只是第一步。

二、 構思新聞發布系統所具備的功能

首頁的新聞發布往往是通過後台更新的,後台的更新無非是由添加、編輯、刪除數據等基本的功能所實現的。在這里,你可以使用網頁設計軟體來構建你的想要的後台界面,其功能的實現當然是要用到PHP嘍。這一步建議您先想好新聞發布系統要有的功能。在這里,如何用PHP添加、編輯、刪除數據就不再重復,因為重點是如何在這基礎上生成靜態技術。



三、 PHP生成HTML的技術原理。

哈哈。費話說了那麼多,終於到了該講的地方了。其實,這一原理並不復雜,綜合地來講的話,應該是PHP中一個替換數據語法的應用。OK,講一個簡單範例吧,一步一步地分析!相信聰明的你能看得明白的咯,仔細看好每一步即可,在這里,只是引導大家如何做而已,具體的可以實踐一下!

(1)在MYSQL里新建一資料庫,命名為 database (可自定義),新建一表,命名為 news(因為是新聞發布嘛,取個好記的名字即可,可自定義),然後建立這幾個欄位名:
id (自動遞增,這是關鍵,類型:INT)
title (顧名思義,新聞標題,類型可取 TEXT)
content (新聞內容,類型可取 TEXT)
path (HTML文件路徑,類型可取 TEXT)

(2)建立 conn.php
這是連接資料庫的PHP文件,你可以把連接數據的語句單獨放在這一文件里,以後多個需要連接資料庫的文件直接引用這個文件即可。

(3)設計添加新聞的表格 add.form 簡單的源代碼如下:

12345<form method=」post」 action=」add.php」> //提交至 add.php新聞標題:<input type=」text」 name=」title」 size=」20」><br>新聞內容:<textarea name=」content」 cols=」10」 rows=」25」></textarea><br><input type=」submit」 name=」提交」></form>

(4)建立一個 HTML 的模板,另存為model.htm,和 add.php可以在同一目錄下。
示例源代碼:

123456<html><body>此新聞的標題:{title}此新聞的內容:{content}</body></html>

{ }大括弧內的內容即是要被替換的內容,整個靜態模板的設計可以根據自己的思路,但{ }內被替換的內容必須包含在內,如上面的{title},{content};咔咔~簡單地說,設計好一個很好看的新聞模板後,把要被替換的如{title},{content}等標記放到需要的地方就可以了撒。

(5)詳解 add.php 源碼

041424344<?phprequire_once(「conn.php」); //引用conn.php,連接資料庫$title=$_POST[「title」];$content=$_POST[「content」]; //獲得表單變數//以下建立一文本文檔,其值自動計數$countfile="count.txt";if(!file_exists($countfile)){fopen($countfile,"w"); //如果此文件不存在,則自動建立一個}$fp=fopen($countfile,"r");$num=fgets($fp,20);$num=$num+1; //每次其值自動加一fclose($fp);$fp=fopen($countfile,"w");fwrite($fp,$num); //更新其值fclose($fp);//利用上面自動計數的值獲得HTML的路徑$path$houzui=」.html」;$path=$num.$houzui;//這樣形成的路徑是自動增長的,如1.html,2.html,3.html……….添加一條新聞便自動加上1//以下用SQL語句添加數據至表 news$sql=」insert into news (title,content,path) values (『」.$title.」』,』」.$content.」』,』」.$path.」』)」;$query=mysql_query($sql);//以下為關鍵之處,把從表單獲得的數據替換模板中的{title},{content}標記$fp=fopen(「model.htm」,」r」) //只讀打開模板$str=fread($fp,filesize(「mode.htm」));//讀取模板中內容$str=str_replace(「{title}」,$title,$str);$str=str_replace(「{content}」,$content,$str);//替換內容fclose($fp);$handle=fopen($path,」w」); //寫入方式打開新聞路徑fwrite($handle,$str); //把剛才替換的內容寫進生成的HTML文件fclose($handle);//收尾工作:echo 「<a href=$path target=_blank>查看剛才添加的新聞</a>」;?>

OK,整個生成HTML的示例源碼就到這里,其關鍵是用了替換的方法。
$str=str_replace(「{被替換的內容}」,$替換的內容,$str);

因此,總結一下以上的做法:先設計好新聞模板,把需要被替換的內容用{ }放到模板中相應的位置,然後設計表單,再是最後的表單處理程序,把從表單中獲取的變數替換模板中相應的內容即可,這樣每次都會生成不同的HTML;如果需要修改HTML的內容也是一樣的,獲得修改後的表單內容後,先用 update 語句更新資料庫,再重新替換一下模板中的內容即可;刪除的話,先delete表中要刪除的內容,再用unlink($path) 來刪除HTML的物理文件即可。

E. PHP是什麼,有什麼作用,它的裡麵包括些什麼內容MYSQL是什麼

PHP是一種用於創建動態WEB頁面的服務端腳本語言。如同ASP和ColdFusion,用戶可以混合使用PHP和HTML編寫WEB頁面,當訪問者瀏覽到該頁面時,服務端會首先對頁面中的PHP命令進行處理,然後把處理後的結果連同HTML內容一起傳送到訪問端的瀏覽器。但是與ASP或ColdFusion不同,PHP是一種源代碼開放程序,擁有很好的跨平台兼容性。用戶可以在Windows NT系統以及許多版本的Unix系統上運行PHP,而且可以將PHP作為Apache伺服器的內置模塊或CGI程序運行。

除了能夠精確的控制WEB頁面的顯示內容之外,用戶還可以通過使用PHP發送HTTP報頭。用戶可以通過PHP設置cookies,管理用戶身份識別,並對用戶瀏覽頁面進行重定向。PHP具有非常強大的資料庫支持功能,能夠訪問幾乎目前所有較為流行的資料庫系統。此外,PHP可以與多個外接庫集成,為用戶提供更多的實用功能,如生成PDF文件等。

用戶可以直接在WEB頁面中輸入PHP命令代碼,因而不需要任何特殊的開發環境。在WEB頁面中,所有PHP代碼都被放置在「< ?php」和「 ? >」中。此外,用戶還可以選擇使用諸如< SCRIPT LANGUAGE="php" >< /SCRIPT >等的形式。PHP引擎會自動識別並處理頁面中所有位於PHP定界符之間的代碼。

PHP腳本語言的語法結構與C語言和Perl語言的語法風格非常相似。用戶在使用變數前不需要對變數進行聲明。使用PHP創建數組的過程也非常簡單。PHP還具有基本的面向對象組件功能,可以極大的方便用戶有效組織和封裝自己編寫的代碼。

MySQL是一個真正多用戶、多線程的SQL資料庫伺服器. SQL 是世界上最普及的資料庫語言. MySQL是客戶/服務端機制,即包括一個後端的伺服器和許多不同的客戶程序和庫. MySQL資料庫是眾多的關系型資料庫產品中的一個,相比較其它系統而言,MySQL資料庫可以稱得上是目前運行速度最快的SQL語言資料庫。除了具有許多其它資料庫所不具備的功能和選擇之外,MySQL資料庫是一種完全免費的產品,用戶可以直接從網上下載資料庫,用於個人或商業用途,而不必支付任何費用。

閱讀全文

與php代碼自動生成原理相關的資料

熱點內容
vip韓國電視劇李鍾碩 瀏覽:934
stc15單片機驅動步進電機 瀏覽:120
一個壞媽媽金珠 瀏覽:804
申請農業銀行信用卡用什麼app 瀏覽:185
在線看的網站 瀏覽:696
金碟專業版的伺服器如何啟動 瀏覽:402
谷輪壓縮機上海 瀏覽:724
兩對情侶互換的電影 瀏覽:347
linux的解壓gz命令 瀏覽:377
排序演算法的測試用例 瀏覽:411
linux終端編碼 瀏覽:141
程序員決定去擺攤 瀏覽:213
戰術手語圖解命令手語 瀏覽:58
不同視覺演算法優缺點 瀏覽:523
兩台伺服器一台存儲怎麼冗餘 瀏覽:125
android的層次結構圖 瀏覽:459
極簡雲是什麼垃圾伺服器 瀏覽:260
怎麼給電腦硬碟解壓 瀏覽:337
大廠程序員年薪多少 瀏覽:303
小黃人電影在線觀看 瀏覽:595