① 如何建網站的詳細步驟
一、確定網站主題
網站主題就是你建立的網站所要包含的主要內容,一個網站必須要有一個明確的主題。特別是對於個人網站,你不可能像綜合網站那樣做得內容大而全,包羅萬象。你沒有這個能力,也沒這個精力,所以必須要找准一個自己最感興趣內容,做深、做透,突顯出自己的特色,這樣才能給瀏覽者留下深刻的印象。網站的主題沒有限制,只要是你感興趣的,任何內容都可以,但主題要鮮明,在你的主題范圍內內容做到大而全、精而深。
二、搜集材料
明確了網站的主題以後,你就要圍繞主題開始搜集材料了。俗語說:「巧婦難為無米之炊」。要想讓自己的網站有血有肉,能夠吸引住瀏覽者,你就要盡量搜集材料,搜集得材料越多,以後製作網站就越容易。材料既可以從圖書、報紙、光碟、多媒體上得來,也可以從網路上搜集,然後把搜集的材料去蕪存菁,作為自己製作網頁的素材。
三、規劃網站
一個網站設計得成功與否,設計者的規劃能力有相當程度的影響力,規劃網站就像建築師設計大樓一樣,紙上作業設計好了,才能建成一座漂亮的樓房。網站規劃包含的內容很多,如網站的結構、項目的設定、網站的風格、顏色搭配、版面布局、文字圖片的運用等,你只有在製作網頁之前把這些方面都考慮到了,才能在製作時駕輕就熟,胸有成竹。也只有如此製作出來的網頁才能有個性、有特色,具有吸引力。如何規劃網站的每一項具體內容,我們在下面會有詳細介紹。
四、選擇合適的製作工具
盡管選擇什麼樣的工具並不會影響你設計網頁的好壞,但是一款功能強大、使用簡單的軟體往往可以起到事半功倍的效果。網頁製作涉及的工具比較多,首先就是網頁製作工具了,目前大多數人選用的都是所見即所得的編輯工具,這其中的優秀者當然是Dreamweaver和Frontpage了,如果是初學者,
Frontpage2000是首選,專業的使用者則建議使用dreamweaver。除此之外,還有圖片編輯工具,如photoshop等;動畫製作工具,如Flash、Cool
3d、Gif
Animator等,你可以根據需要靈活運用。
五、製作網頁
材料有了,工具也選好了,下面就需要按照規劃一步步地把自己的想法變成現實了,這是一個復雜而細致的過程,一定要按照先大後小、先簡單後復雜來進行製作。所謂先大後小,就是說在製作網頁時,先把大的結構設計好,然後再逐步完善小的結構設計。所謂先簡單後復雜,就是先設計出簡單的內容,然後再設計復雜的內容,以便出現問題時好修改。在製作網頁時要多靈活運用模板,這樣可以大大提高製作效率。
六、上傳測試
網頁製作完畢,最後要發布到Web伺服器上,才能夠讓全世界的朋友觀看,現在上傳的工具有很多,有些網頁製作工具本身就帶有FTP功能,利用這些FTP工具,推薦leapftp(點擊下載),你可以很方便地把網站發布到自己申請的主頁存放伺服器上。網站上傳以後,你要在瀏覽器中打開自己的網站,逐頁逐個鏈接的進行測試,發現問題,及時修改,然後再上傳測試。全部測試完畢就可以把你的網址告訴給朋友,讓他們來瀏覽。
七、推廣宣傳
網頁做好之後,還要不斷地進行宣傳,這樣才能讓更多的朋友認識它,提高網站的訪問率和知名度。推廣的方法有很多,例如到搜尋引擎上注冊、與別的網站交換連結等。
八、維護更新
網站要注意經常維護更新內容,保持內容的新鮮,不要一做好就放在那兒不變了,只有不斷地給它補充新的內容,才能夠吸引住瀏覽者。
② php的其他方面
PHP 在資料庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的資料庫或是數據文件:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相當多的通訊協議 (protocol),包括了與電子郵件相關的 IMAP,POP3;網管系統 SNMP;網路新聞NNTP;帳號共用 NIS;全球信息網 HTTP 及 Apache 伺服器;目錄協議 LDAP 以及其它網路的相關函數。
除此之外,用 PHP 寫出來的 Web 後端 CGI 程序,可以很輕易的移植到不同的操作系統上。例如,先以 linux 架的網站,在系統負荷過高時,可以快速地將整個系統移到 SUN 工作站上,不用重新編譯 CGI 程序。面對快速發展的 Internet,這是長期規劃的最好選擇。
相關語法及概念
php 支持八種原始類型。
四種標量類型:boolean(布爾型) integer(整型) float(浮點型,也作「double」) string(字元串)
兩種復合類型:array(數組)object(對象)
最後是兩種特殊類型:resource(資源)NULL
為了確保代碼的易讀性,本手冊還介紹了一些偽類型:mixed、number、callback
語法(例子中均忽略了PHP代碼邊界符 <?php ?>):
注釋的語法有三種: //comment這個是單行注釋/*comment*/這個是多行注釋#comment這個是腳本類型注釋,很少用基本的結構控制語句: //分支結構(選擇結構)if(condition){//Statement}if(condition){//Statement}else{//Statement}if(condition){//Statement}elseif(condition){//Statement}//多分支結構switch($變數){case'值'://Statementbreak;case'值2'://Statementbreak;default://Statement}//循環結構while(condition){//Statement}do{//Statement}while(condition);for(初始化;判斷;變化){//Statement}//數組遍歷專用循環語句foreach($Arrayas$value){echo$value;}foreach($Arrayas$key=>$value){echo$key;echo$value;}一個PHP實例: <html><head><title>Firstprogram</title></head><body>//php中string類型的拼接符和其它大多數採用+號運算符不一樣,而是採用.號運算//在一般語言中用於對象屬性和方法調用的.運算符,則和C語言的結構體一樣用=><?phpechohelloworld.!;?></body></html>php對面向對象的支持
面向對象編程的概念:
不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面:
1.抽象數據類型和信息封裝
2.繼承
3.多態
在PHP中是通過類來完成封裝的: //在OOP類中,通常採用大雙駝峰命名法,每個單詞的首字母都大寫classSomething{//作用域修飾符:public公共的;private私有的;protected受保護的;//屬性的名稱一般用全小寫private$x=null;//在編程建議中,內部使用的屬性應該給私有修飾符,然後通過方法取值賦值//方法的名稱一般用小駝峰命名法,第一個單詞全小寫,剩下的單詞首字母大寫//因為PHP不會自動為變數使用$this所以必須主動加上$this偽變數來指向操作的對象publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}}當然你可以按自己的喜好進行定義,但最好保持一種標准,這樣會更有效。數據成員在類中使用var聲明來定義,在給數據成員賦值之前,它們是沒有類型的。一個數據成員可以是一個整數,一個數組,一個相關數組(associative array)或者是一個對象。方法在類中被定義成函數形式,在方法中訪問類成員變數時,你應該使用$this->name,否則對一個方法來說,它只能是局部變數。
使用new操作符來創建一個對象: $obj=newSomething;然後你可以使用成員函數通過: $obj->setX(5);$see=$obj->getX();echo$see;在這個例子中,setX成員函數將5賦值給對象的成員變數x(不是類的),然後getX返回它的值5。可以象:$obj->x=6那樣通過類引用方式來存取數據成員,這不是一個很好的OOP習慣。我強烈建議通過方法來存取成員變數。如果你把成員變數看成是不可處理的,並且只通過對象句柄來使用方法,你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變數,所以不良代碼在PHP中也是允許的。繼承在PHP中很容易實現,只要使用extends關鍵字。 classAnotherextendsSomething{private$y;publicfunctionsetY($v){$this->y=$v;}functiongetY(){return$this->y;}}Another類的對象擁有了父類(Something)的全部的數據成員及方法,而且還加上了自己的數據成員和方法。
你可以使用 $obj2=newAnother;$obj2->setY(5);echo$obj2->getY();PHP只支持單繼承,所以你不能從兩個或兩個以上類派生出新的類來。你可以在派生類中重定義一個方法,如果我們在Another類中重定義了getX方法(方法重寫),我們就不能使 用Something中的getX方法了。如果你在派生類中聲明了一個與基派同名的數據成員,那麼當你處理它時, 它將「隱藏」基類的數據成員。
你可以在你的類中定義構造函數。構造函數是一個與類名同名的方法,當你創建一個類的對象時會被調用,例如: classSomething{private$x=null;//新版本的構造函數放棄使用類名,而統一使用__construct()publicfunction__construct($x){$this->x=$x;}publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}//析構函數publicfunction__destruct(){}}所以你可以創建一個對象,通過: $obj=newSomething(6);構造函數會自動地把6賦值給數據變數x。構造函數和方法都是普通的PHP函數(」__「兩個下劃線,魔術方法),所以你可以使用預設參數。 publicfunction__construct($x=3,$y=5){}接著: $obj=newSomething();//x=3andy=5$obj=newSomething(8);//x=8andy=5$obj=newSomething(8,9);//x=8andy=9預設參數使用C++的方式,所以你不能忽略Y的值,而給X一個預設參數,參數是從左到右賦值的,如果傳入的參數少於要求的參數時,其作的將使用預設參數。
當一個派生類的對象被創建時,只有它的構造函數被調用,父類的構造函數沒被調用,如果你想調用基類的構造函數,你必須要在派生類的構造函數中用parent::__construct()調用。可以這樣做是在派生類中所有父類的方法都是可用的。 classAnotherextendsSomething{publicfunction__construct(){parent::__construct(5,6);//顯示調用基類構造函數}}OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個介面。設計者通常使用抽象類來強迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標準的方法,但是:如果你需要這個特性,可以通過定義基類,並在它的構造函數後加上die 的調用,這樣就可以保證基類是不可實例化的,在每一個方法(介面)後面加上die 語句,所以,如果一個程序員在派生類中沒有覆蓋方法,將引發一個錯誤。而且因為PHP 是無類型的,你可能需要確認一個對象是來自於你的基類的派生類,那麼在基類中增加一個方法來實義類的身份(返回某種標識id),並且在你接收到一個對象參數時校驗這個值。當然,如果一個不好的邪惡程序員在派生類中覆蓋了這個方法,這種方法就不起作用了,不過一般問題多在懶惰的程序員身上,而不是邪惡的程序員。
當然,能夠讓基類對程序員無法看到是很好的,只要將介面列印出來做他們的工作就可以了。PHP 5 引入了析構函數的概念,這類似於其它面向對象的語言,如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
重載(與覆蓋不同)在PHP中不支持,因為PHP是弱類型語言。在OOP中,你可以重載一個方法來實現兩個或重多的方法具有相同的名字,但是有不同數量或類型的參數(這要看語言)。PHP 是一種鬆散類型的語言,所以通過類型重載不起作用,然而通過參數的個數不同來重載也不起作用。
有時在OOP中重載構造函數非常好,這樣你可以通過不同的方法創建對象(變數函數)。在PHP中實現它的技巧是: classMyclass{publicfunctionMyclass(){$name=Myclass.func_num_args();//這個函數返回的是傳過來參數的個數$this->$name();//這里使用的是一個變數函數,以這個變數的值作為函數的名稱調用}publicfunctionMyclass1($x){//code}publicfunctionMyclass2($x,$y){//code}}通過在類中的額外的處理,使用這個類對用戶是透明的: $obj1=newMyclass('1');//將調用Myclass1$obj2=newMyclass('1','2');//將調用Myclass2有時這個非常好用。
多態
多態是對象的一種能力,它可以在運行時刻根據傳遞的對象參數,決定調用哪一個對象的方法。例如,如果你有一個figure的類,它定義了一個draw的方法。並且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個函數,它希望使用一個參數x,並且可以調用$x->draw()。如果你有多態性,調用哪個draw方法就依賴於你傳遞給這個函數的對象類型。
多態性在象PHP這樣的解釋語言(想像一下一個C++編譯器生成這樣的代碼,你應該調用哪一個方法?你也不知道你擁有的對象是什麼類型的,好,這不是重點)是非常容易和自然的。所以PHP當然支持多態性。 classCalc{functionniceDrawing($x){//假設這是Board類的一個方法$x->draw();}}classCircle{publicfunctiondraw(){echo畫了一個圓;}}classRectangle{publicfunctiondraw(){echo畫了一個矩形;}}$board=newCalc;$obj=newCircle(3,187);$obj2=newRectangle(4,5);$board->niceDrawing($obj);//將調用Circle的draw方法$board->niceDrawing($obj2);//將調用Rectangle的draw方法用PHP進行面向對象編程
一些純化論者(purists)可能會說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項目只用對象和類。
隨著項目越來越大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟體工程的基礎。在基於web的項目中應用這些概念就成為將來網站成功的關鍵。
高級OOP技術
在看過基本的OOP概念後,我就可以向你展示更高級的技術:
序列化(Serializing)
PHP不支持永久對象,在OOP中永久對象是可以在多個應用的引用中保持狀態和功能的對象,這意味著擁有將對象保存到一個文件或資料庫中的能力,而且可以在以後裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它可以通過對象進行調用,序列化方法可以返回對象的字元串表示。然而,序列化只保存了對象的成員數據而不包括方法。
在PHP4中,如果你將對象序列化到字元串$s中,然後釋放對象,接著反序列化對象到$obj,你可以繼續使用對象的方法!我不建議這樣去做,因為(a)文檔中沒有保證這種行為在以後的版本中仍然可以使用。(b) 這個可能導致一種誤解,在你把一個序列化後的版本保存到磁碟並退出腳本時。當以後運行這個腳本時,你不能期待著在反序列化一個對象時,對象的方法也會在那裡,因為字元串表示根本就不包括方法。
總而言之,PHP 進行序列化對於保存對象的成員變數非常有用。(你也可以將相關數組和數組序列化到一個文件中)。
例子 : $obj=newClassfoo();$str=serialize($obj);//保存$str到磁碟上$obj2=unserialize($str);//幾個月以後//從磁碟中裝入str你恢復了成員數據,但是不包括方法(根據文檔所說)。這導致了只能通過類似於使用$obj2->x來存取成員變數(你沒有別的方法!)的唯一辦法,所以不要在家裡試它。
有一些辦法可以解決這個問題,我把它留著,因為對這篇簡潔的文章來說,他們太不好。我會很高興地歡迎在PHP的後續版本中有全序列化的特性。
使用類進行數據存儲PHP和OOP一件非常好的事情就是,你可以很容易地定義一個類來操作某件事情,並且無論何時你想用的時候都可以調用相應的類。假設你有一個HTML表單,用戶可以通過選擇產品ID號來選擇一個產品。在資料庫中有產品的信息,你想把產品顯示出來,顯示它的價格等等。你擁有不同類型的產品,並且同一個動作可能對不同的產品具有不同的意思。例如,顯示一個聲音可能意味著播放它,但是對於其它種類的產品可能意味著顯示一個存在資料庫中的圖片。你可以使用OOP或PHP來減少編碼並提高質量:
定義一個產品的類,定義它應該有的方法(例如:顯示),然後定義對每一種類型的產品的類,從產品類派後出來(SoundItem類,ViewableItem類,等等),覆蓋在產品類中的方法,使它們按你的想法動作。
根據資料庫中每一種產品的類型(type)欄位給類命名,一個典型的產品表可能有(id,type,price,description,等等欄位)...然後在處理腳本中,你可以從資料庫中取出type值,然後實例化一個名為type的對象: $obj=new$type();$obj->action();這是PHP的一個非常好的特性,你可以不用考慮對象的類型,調用$obj的顯示方法或其它的方法。使用這個技術,你不需要修改腳本去增加一個新類型的對象,只是增加一個處理它的類。
這個功能很強大,只要定義方法,而不去考慮所有對象的類型,在不同的類中按不同的方法實現它們,然後在主腳本中對任意對象使用它們,沒有if...else,也不需要兩個程序員,只有高興。
你同意編程是容易的,維護是便宜的,可重用是真的嗎?
如果你管理一組程序員,分配工作就是很簡單的了,每個人可能負責一個類型的對象和處理它的類。
可以通過這個技術實現國際化,根據用戶所選的語言欄位應用相應的類就可以了,等等。
拷貝和克隆
當你創建一個$obj的對象時,你可以通過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),所以它具有$obj在當時的狀態。有時候,你不想這樣,你只是想生成一個象obj類一樣的一個新的對象,可以通過使用new語句來調用類的構造函數。在PHP中也可以通過序列化,和一個基類來實現,但所有的其它類都要從基類派生出來。
進入危險區域
當你序列化一個對象,你會得到某種格式的字元串,如果你感興趣,你可以調究它,其中,字元串中有類的名字(太好了!),你可以把它取出來,象: $herring=serialize($obj);$vec=explode(':',$herring);//以:為標識符把字元串拆分成一個數組$nam=str_replace(,'',$vec[2]);所以假設你創建了一個Universe的類,並且強制所有的類都必須從universe擴展,你可以在universe 中定義一個clone的方法,如下: classUniverse{//在新的PHP版本中克隆(__clone())是一個魔術方法,不要和這個方法搞混了functionclone(){$herring=serialize($this);$vec=explode(':',$herring);$nam=str_replace(,'',$vec[2]);$ret=new$nam;return$ret;}}//然後$obj=newSomething();//從Universe擴展$other=$obj->clone();你所得到的是一個新的Something類的對象,它同使用new方法,調用構造函數創建出的對象一樣。我不知道這個對你是否有用,但是Universe類可以知道派生類的名字是一個好的經驗。想像是唯一的限制。
模板引擎 Smarty:Smarty的特點是將模板編譯成PHP腳本,然後執行這些腳本。很快,非常方便。 Heyes Template Class:一個非常容易使用,但功能強大並且快速的模板引擎,它幫助你把頁面布局和設計從代碼中分離。 FastTemplate:一個簡單的變數插值模板類,它分析你的模板,把變數的值從HTML代碼中分離處理。 ShellPage:一個簡單易用的類,可以讓你的整個網站布局基於模板文件,修改模板就能改變整個站點。 STP Simple Template Parser:一個簡單、輕量級並且易於使用的模板分析類。它可以從多個模板中組裝一個頁面,把結果頁面輸出到瀏覽器或者文件系統。 OO Template Class:一個你可以用在自己程序中的面向對象的模板類。 SimpleTemplate:一個可以創建和結構化網站的模板引擎。它可以解析和編譯模板。 bTemplate:短小但是快速的模板類,允許你把PHP邏輯代碼從HTML修飾代碼中分離。 Savant:一個強大且輕量級的PEAR兼容模板系統。它是非編譯型的,使用PHP語言本身做為它的模板語言。 ETS - easy template system:可以使用完全相同數據重組模板的模板系統。 EasyTemplatePHP:適用於你的站點的一個簡單但是強大的模板系統。 vlibTemplate:一個快速、全能的模板系統,它包含一個緩存和調試類。 AvanTemplate:多位元組安全的模板引擎,佔用很少系統資源。它支持變數替換,內容塊可以設置顯示或隱藏 Grafx Software』s Fast Template:一個修改版本的Fast Template系統,它包括緩存功能,調試控制台以及沉默去除為賦值塊。 TemplatePower:一個快速、簡單、功能強大的模板類。主要功能有嵌套的動態塊支持,塊/文件包含支持以及顯示/隱藏未賦值的變數。 TagTemplate:這個庫的功能被設計來使用模板文件,同時允許你從HTML文件檢索信息。 htmltmpl: templating engine:一個適用於Python和PHP的模板引擎。它面向希望在項目中分離代碼和設計的web應用開發人員。 PHP Class for Parsing Dreamweaver templates:一個分析Dreamweaver模板的簡單類,被用於Gallery 2 和WordPress的自定義模塊中。 MiniTemplator (Template Engine):針對HTML文件的一個緊湊型模板引擎。對於模板變數和塊定義它具有簡單的語法。其中塊可以嵌套。 Layout Solution:簡化網站開發和維護。它擁有常用的變數和頁面元素使你不需要重復做頁面布局工作。 Cached Fast Template:它已經納入 FastTemplate ,允許你緩存模板文件,甚至可以在分離的塊內容上緩存不同的規格。 TinyButStrong:一個支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7個方法和兩個屬性。 Brian Lozier』s php based template engine:只有2K大小,非常快並且是面向對象設計。 WACT:一個從設計中分離代碼的模板引擎。 PHPTAL:一個PHP下面的XML/XHTML模板庫。 Rong_View_Wudimei:Wudimei開發的國產框架Rong Framework的模板引擎,它類似於smarty,優點是速度快,缺點是模板標簽較少,不過夠用了。 框架介紹thinkphp
ThinkPHP是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,創立於2006年初,遵循Apache2開源協議發布,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。並且擁有眾多的原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進,已經成長為國內最領先和最具影響力的WEB應用開發框架,眾多的典型案例確保可以穩定用於商業以及門戶級的開發。
PHP認證級別
PHP課程由初級(IFE)、中級(IPE)和高級(IAE)三個部分。 IFE即Index Front-end Engineer的縮寫,指數前端工程師的意思。 IPE即 Index PHP Engineer 的縮寫,意思是指數PHP工程師。 IAE即 Index architecture/advanced engineer 的縮寫,意思是:指數高級/架構工程師。 PHP安全
PHP其實不過是Web伺服器的一個模塊功能,所以首先要保證Web伺服器的安全。當然Web伺服器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。常見的web安全漏洞有:注入攻擊,跨站攻擊,伺服器自身漏洞等,對應的詳細解釋,詳見:擴展閱讀中的《WEB安全性-2010_OWASP_TOP10》,這里有很詳盡的解釋。
PHP的優點學習過程和方法
PHP的語法類似於C,Perl,ASP或者JSP。對於那些對上述之一的語言較熟悉的人來說,PHP太簡單了。相反的,如果你對PHP了解較多,那麼你對於其他幾種語言的學習都很簡單了。你只需要很短的時間內將PHP的核心語言特點全部掌握,你可能已經非常了解HTML,甚至你已經知道怎樣用編輯設計軟體或者手工來製作好看的WEB站點。由於PHP代碼能夠無障礙的添加進你的站點,在你設計和維護站點的同時,你可以很輕松的加入PHP使得你的站點更加具有動態特性。
資料庫連接
PHP可以編譯成具有與許多資料庫相連接的函數。PHP與MySQL是絕佳的組合,如果再加上Apache伺服器,就是相當完美的了。你還可以自己編寫外圍的函數取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕松的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。
可擴展性
就像前面說的那樣,PHP已經進入了一個高速發展的時期。對於一個非程序員來說為PHP擴展附加功能可能會比較難,但是對於一個PHP程序員來說並不困難。
PHP可伸縮性
傳統上網頁的交互作用是通過CGI來實現的。CGI程序的伸縮性不很理想,因為它為每一個正在運行的CGI程序開一個獨立進程。解決方法就是將經常用來編寫CGI程序的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP可以具有更高的可伸縮性。
PHP免費安裝
PHP源代碼包安裝版:這個版本適合已經有自己獨立的網站域名、網站空間的專業網站建設用戶。使用方法依然其為簡單,只需三步:
第一、到官方網站:下載 PHP源代碼包安裝版最新版本,解壓下載文件,將其中的全部內容上傳到你的支持PHP的網站空間
第二、改更文件屬性,請將根目錄下以PHP為後綴名的文件和」/include/domain.php」和 「/attachments」 和 「/data」文件夾以及文件夾下所有的文件屬性改成「可讀」、「可寫」、「可執行」,通常是「755」。
第三、打開你的網站根目錄,系統會自動運行setup安裝程序,按提示點下一步操作即可。
友情提示:當你下載我們的軟體並看到這份說明時,則說明你一定是對企業網站建設有一定的需求或者你是一個網站建設技術學習者。
文件格式 對於只含有 php 代碼的文件,我們將在文件結尾處忽略掉 ?>。這是為了防止多餘的空格或者其它字元影響到代碼。 例如:
$foo = 'foo'; 縮進應該能夠反映出代碼的邏輯結果,盡量使用四個空格,禁止使用製表符TAB,因為這樣能夠保證有跨客戶端編程器軟體的靈活性。 例如: if(1==$x){$indented_code=1;if(1==$new_line){$more_indented_code=1;}}變數賦值建議保持相等間距和排列。 例如: $variable='demo';$var='demo2';每行代碼長度應控制在80個字元以內,最長不超過120個字元。因為 linux 讀入文件一般以80列為單位,就是說如果一行代碼超過80個字元,那麼系統將為此付出額外操作指令。這個雖然看起來是小問題,但是對於追求完美的程序員來說也是值得注意並遵守的規范。 每行結尾不允許有多餘的空格。 Php文件記事本編輯亂碼問題
一般情況下,記事本編輯器在對文件進行完編輯並保存之時,其默認編碼為ANSI,中文。然則更多的時候,php在語言環境設置時語言多數為utf-8,直接保存並用於apache等http-server解析後就會出現亂碼。
為此,應該注意在用記事本編輯完後可將文件用「另存為」的方式對文件進行保存,並將「文件類型」選擇「所有文件」,編碼與文件指定語言編碼一致即可。
算數運算符
PHP 的運算符包括算術運算符、賦值運算符、比較運算符和邏輯運算符。
算數運算符:
加,減,乘,除,取模(取余)+、-、*、/、%
賦值運算符:(以下解釋在許多書中有所不同)
賦值,加賦值,減賦值、乘賦值、除賦值,連字賦值
=、+=、-=、*=、/=、.=
位運算符:
位與、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比較運算符:
等於、全等於、不等於、不全等於、大於、小於、大於等於、小於等於
==、===、!=(<>)、!==、>、<、>=、<=
邏輯運算符:
邏輯與、邏輯或、邏輯非、邏輯亦或
&&、||、!、xor
字元串運算符:
. 連接兩個字元串
③ 有人跟著抖音Nice然姐做過項目嗎是真的可以賺錢嗎
我是一個八零後.兩個孩子的媽媽!我以各人的名義發誓、我是真真切切跟著然姐賺到錢了、而且一跟就是四年我會一直做下去!像我這種沒有文化沒有長相的人跟著然姐賺錢.是我以前連想也不敢想的事情.大愛我的然姐
④ 旋律,易語言是解釋性的還是得編譯
ご旋乄律シ(699770) 23:03:35 解釋性 是什麼意思 ご旋乄律シ(699770) 23:04:10 易語言唯一一點好處 就是 debug的時候 他會准確的顯示錯誤代碼 ㊣nicevoice(6436688) 23:04:35 解釋性就是腳本 ㊣nicevoice(6436688) 23:04:40 比如asp php ご旋乄律シ(699770) 23:04:49 編譯的. ㊣nicevoice(6436688) 23:04:49 代碼寫完了直接運行,不用編譯 ご旋乄律シ(699770) 23:05:07 跟delphi一樣 會生成一個 臨時PE文件
⑤ 翻譯:英文轉中文 謝絕機譯
1991 年7 月3 日在comp.os.minix 上發布的post 上就已經提到了正在搜集POSIX 的資料。(當然此時還不存在Linux 這個名稱,當時Linus 的腦子里想的可能是FREAX ,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,並且在Linux 最初的時候已經想到要實現與POSIX(UNIX 的國際標准)的兼容問題了。
Linux 操作系統的誕生
1981 年IBM 公司推出享譽全球的微型計算機IBM PC。在1981-1991 年間,MS-DOS 操作系統一直是微型計算機上操作系統的主宰。此時計算機硬體價格雖然逐年下降,但軟體價格仍然是居高不下。當時Apple 的MACs 操作系統可以說是性能最好的,但是其天價沒人能夠輕易靠近。
當時的另一個計算機技術陣營是Unix世界。但是Unix操作系統就不僅是價格貴的問題了。為了尋求高利率,Unix經銷商將價格抬得極高,PC小用戶就根本不能靠近它。曾經一度受到Bell Labs的許可而可以在大學中用於教學的UNIX源代碼一直被小心地守衛著不需公開。對於廣大的PC用戶,軟體行業的大型供應商始終沒有給出有效的解決該問題的手段。正在此時,出現了MINIX操作系統,並有一本詳細的書本描述它的設計實現原理。由於AST的書寫的非常詳細,並且敘述有條有理,幾乎全世界的計算機愛好者都在看這本書以理解操作系統的工作原理。其中也包括Linux系統的創始者Linus Benedict Torvalds。當時(1991年),Linus Benedict Torvalds 是赫爾辛基大學計算機科學系的二年級學生,也是一個自學hacker。這個21 歲的芬蘭年輕人喜歡鼓搗計算機,測試計算機的能力和限制。但當時缺乏的是一個專業級的操作系統。MINIX 雖然很好,但只是一個用於教學目的簡單操作系統,而不是一個強有力的實用操作系統。
到1991 年,GNU 計劃已經開發出了許多工具軟體。最受期盼的Gnu C 編譯器已經出現,但還沒有開發出免費的GNU 操作系統。即使是MINIX 也開始有了版權,需要購買才能得到源代碼。而GNU 的操作系統HURD 一直在開發之中,但並不能在幾年內完成。對於Linus 來說,已經不能等待了。從1991 年4 月份起,他開始醞釀並著手編制自己的操作系統。剛開始,他的目的很簡單,只是為了學習Intel 386 體系結構保護模式運行方式下的編程技術。但後來Linux 的發展卻完全改變了初衷。
1991 年初,Linux 開始在一台386sx 兼容微機上學習minix 操作系統。通過學習,他逐漸不能滿足minix 系統的現有性能,並開始醞釀開發一個新的免費操作系統。根據Linus 在comp.os.minix 新聞組上發布的消息,我們可以知道他逐步從學習minix 系統到開發自己的Linux 的過程。
Linus 第1 次向comp.os.minix 投遞消息是在1991 年3 月29 日。題目是"gcc on minix-386 doesn't optimize",是有關gcc 編譯器在minix-386 上運行的優化問題,由此可知,Linus 在1991 年的初期已經開始深入研究了minix 系統,並在這段時間有了改進minix 操作系統的思想,而且在進一步學習minix系統中,逐步演變為想自己重新設計一個基於Intel 80386 體系結構的新操作系統。他在回答有人提出minix 上的一個問題時,所說的第一句話是"閱讀源代碼"("RTFSC (Read the Fucking Source Code :-)")。他認為答案就在源程序中。這也說明了對於學習系統軟體來說,你不光需要懂得系統的工作基本原理,還需要結合實際系統,學習實際系統的實現方法。因為理論畢竟是理論,其中省略了許多枝節,而這些枝節問題雖然沒有太多的理論含量,但卻是一個系統必要的組成部分,就像麻雀身上的一根羽毛。
從1991 年的4 月份開始,Linus 幾乎花了全部時間研究386-minix 系統(hack the kernel),並且嘗試著移植GNU 的軟體到該系統上(GNU gcc、bash、gdb 等)。並於4 月13 日在comp.os.minix 上發布說自己已經成功地將bash 移植到了minix 上,而且已經愛不釋手、不能離開這個shell 軟體了。
第一個與Linux 有關的消息是在1991 年7 月3 日在comp.os.minix 上發布的(當然此時還不存在Linux 這個名稱,當時Linus 的腦子里想的可能是FREAX ,FREAX 的英文含義是怪誕的、怪物、異想天開等)。其中透露了他正在進行Linux 系統的開發,並且在Linux 最初的時候已經想到要實現與POSIX(UNIX 的國際標准)的兼容問題了。
在Linus 的下一發布的消息中(1991 年8 月25 日 comp.os.minix),他向所有minix 用戶詢問"What would you like to see in minix?"("你最想在minix 中見到什麼?"),在該消息中他首次透露出正在開發一個(免費的)386(486)操作系統,並且說只是興趣而已,代碼不會很大,也不會象GNU 的那樣專業。開發免費操作系統這個想法從4 月份就開始醞釀了,希望大家反饋一些對於minix 系統中喜歡那些特色不喜歡什麼等信息,由於實際的和其它一些原因,新開發的系統剛開始與minix 很象(並且使用了minix 的文件系統)。並且已經成功地將bash(1.08 版)和gcc(1.40 版)移植到了新系統上,而且在過幾個月就可以實用了。
最後,Linus 申明他開發的操作系統沒有使用一行minix 的源代碼;而且由於使用了386 的任務切換特性,所以該操作系統不好移植(沒有可移植性),並且只能使用AT 硬碟。對於Linux 的移植性問題,Linus 當時並沒有考慮。但是目前Linux 幾乎可以運行在任何一種硬體體系結構上。
到了1991 年的10 月5 日,Linus 在comp.os.minix 新聞組上發布消息,正式向外宣布Linux 內核系統的誕生(Free minix-like kernel sources for 386-AT)。這段消息可以稱為Linux 的誕生宣言,並且一直廣為流傳。因此10 月5 日對Linux 社區來說是一個特殊的日子,許多後來Linux 的新版本發布時都選擇了這個日子。所以RedHat 公司選擇這個日子發布它的新系統也不是偶然的。
Linux 操作系統版本的變遷 0.00 (1991.2-4?) 兩個進程分別顯示AAA BBB
將Linux 系統0.13 版內核直接改稱0.95 版,Linus 的意思是讓大家不要覺得離1.0 版還很遙遠。同時,從0.95 版開始,對內核的許多改進之處(補丁程序的提供)均以其他人為主了,而Linus 的主要任務開始變成對內核的維護和決定是否採用某個補丁程序。
Linux 名稱的來由
Linux 操作系統剛開始時並沒有被稱作Linux,Linus 給他的操作系統取名為FREAX,其英文含義是怪誕的、怪物、異想天開等意思。在他將新的操作系統上載到ftp.funet.fi 伺服器上時,管理員Ari Lemke很不喜歡這個名稱。他認為既然是Linus 的操作系統就取其諧音Linux 作為該操作系統的目錄吧,於是Linux 這個名稱就開始流傳下來。
在Linus 的自傳《Just for Fun》一書中,Linus 解釋說:"坦白地說,我從來沒有想到過要用Linux 這個名稱發布這個操作系統,因為這個名字有些太自負了。而我為最終發布版准備的是什麼名字呢?Freax。實際上,內核代碼中某些早期的Makefile - 用於描述如何編譯源代碼的文件 - 文件中就已經包含有"Freax"這個名字了,大約存在了半年左右。但其實這也沒什麼關系,在當時還不需要一個名字,因為我還沒有向任何人發布過內核代碼。而Ari Lemke,他堅持要用自己的方式將內核代碼放到ftp 站點上,並且非常不喜歡Freax 這個名字。他堅持要用現在這個名字(Linux),我承認當時我並沒有跟他多爭論。但這都是他取的名字。所以我可以光明正大地說我並不自負,或者部分坦白地說我並沒有本位主義思想。但我想好吧,這也是個好名字,而且以後為這事我總能說服別人,就象我現在做的這樣。"-- Linus Torvalds《Just for fun》第84-88 頁。
通過上述說明,我們可以對上述Linux 的五大支柱歸納如下:
① UNIX 操作系統 -- UNIX 於1969 年誕生在Bell 實驗室。Linux 就是UNIX 的一種克隆系統。UNIX的重要性就不用多說了。
② MINIX 操作系統 -- Minix 操作系統也是UNIX 的一種克隆系統,它於1987 年由著名計算機教授Andrew S. Tanenbaum 開發完成。由於MINIX 系統的出現並且提供源代碼(只能免費用於大學內)在全世界的大學中颳起了學習UNIX 系統旋風。Linux 剛開始就是參照Minix 系統於1991 年才開始開發。
③ GNU 計劃-- 開發Linux 操作系統,以及Linux 上所用大多數軟體基本上都出自GNU 計劃。Linux只是操作系統的一個內核,沒有GNU 軟體環境(比如說bash shell),則Linux 將寸步難行。
④ POSIX 標准 -- 該標准在推動Linux 操作系統以後朝著正規路上發展起著重要的作用。是Linux前進的燈塔。
⑤ INTERNET -- 如果沒有Intenet 網,沒有遍布全世界的無數計算機駭客的無私奉獻,那麼Linux最多隻能發展到0.13(0.95)版的水平。
⑥ 代碼反平庸嗎
代碼反混淆(deobfuscation)和代碼混淆(obfuscation)對應,是其逆過程。維基網路將代碼混淆定義為故意生成人類難以理解的源代碼或機器碼的過程("In software development, obfuscation is the deliberate act of creating source or machine code that is difficult for humans to understand.")。代碼反混淆可以理解為將原本人類難以理解的代碼轉化為簡單的、可理解的、直觀的代碼的過程。
這篇文章主要介紹一下
"Big Code" 在代碼反混淆領域的應用。更具體一點就是介紹一下提出 "JSNice" 和 "Deguard"
的兩篇文章,這兩篇文章雖然已經發錶快五年了,但至今沒有文章Follow這兩份工作,因為文章已經將使用 "Big Code"
做代碼命名反混淆做到了極致。後來的人無法在這個問題上推陳出新,脫穎而出。
"Big Code": 代碼託管網站如GitHub上的大量免費可用的高質量代碼被稱為 "Big Code" ,這些數據結合統計推理或深度學習為新興的開發工具的出現提供了契機。
概率圖模型:概率圖模型是用圖來表示變數概率依賴關系的理論,結合概率論與圖論的知識,利用圖來表示與模型有關的變數的聯合概率分布。
問題
為了項目的安全,開發者在打包發布項目時會對代碼進行混淆加密,包括但不限於用無意義的短變數去重命名類、變數、方法,以免代碼被輕易破解泄露。另外由於JS腳本主要用於Web開發,對其進行混淆還能壓縮腳本的大小,使得瀏覽器下載、載入更加快速,提升用戶的瀏覽體驗。
這一類通過對類、變數、方法重命名的混淆方案確實能加大其他開發者對代碼的理解難度。其他開發者不幹了,為了能方便理解他人混淆後的代碼,學習(抄襲)他人的經驗,針對這一類混淆方法的反混淆方法也應運而生。
下面先展示一下安卓APP的代碼混淆技術:
其他元素,比如類名,Feilds名稱的不等約束比較簡單,直接處理就行。
所有不等約束以集合 表示, , 中任意兩個節點的名稱必須不一樣。
注意這個約束只用與預測階段,因為訓練數據(未混淆)本身滿足這些約束。很容易可以把這些約束結合到JSNice的演算法1中。
Deguard的概率圖優化演算法和JSNice也不一樣,採用的是pseudo likelihood estimation。具體闡述推薦閱讀文章[3]。
值得注意的是,為什麼JSNice就沒有Deguard中提到的相等約束和不等約束,筆者個人認為還是由問題和語言特性共同決定,JSNice的名稱預測其實只預測了局部變數,而JS的語言特性導致其本身不需要檢測局部變數的名稱沖突,只有執行結果報錯才會說明程序出錯。也就是說其實JS本身語言特性就沒有這類約束,自然不需要建模。
⑦ 怎樣在c語言程序中顯示將nice to meet you 變成 nice nice to to meet meet you you
#include"stdio.h"
#include"string.h"
voidmain()
{
char*p=NULL;
char*q=NULL;
chara[]="nicetomeetyou";
charstr1[10]={0};
charstr2[10]={0};
charstr3[10]={0};
charstr4[10]={0};
p=strchr(a,'');
strncpy(str1,a,p-a);
q=strchr(p+1,'');
strncpy(str2,p+1,q-(p+1));
p=strchr(q+1,'');
strncpy(str3,q+1,p-(q+1));
strncpy(str4,p+1,strlen(a)-(p-a));
printf("%s%s%s%s%s%s%s%s ",str1,str1,str2,str2,str3,str3,str4,str4);
}
四個字元數組分別存單詞nice,to,meet,you
結果如下:
⑧ 如何使用 visual studio code 編譯和調試 java 代碼
Visual Studio Code的宣傳語是:
一個運行於Mac OS X、Windows和Linux之上的,針對於編寫現代Web和雲應用的跨平台源代碼編輯器。
按說的,Visual Studio Code特別適合來作為前端開發編輯器。
內置html開發神器emmet(zencoding),對css及其相關編譯型語言Less和Sass都有很好的支持。
當然,最nice的還是寫js代碼了,這也是接下來要著重介紹的功能。
因為之前微軟推出了typescript語言,結合tsd文件,用visual studio寫typescript代碼是相當爽的,智能提示的功能非常nb。
這個功能理所應當也被vsc繼承了。
目前主流的前端類庫/框架,包括node.js及其模塊/框架都有相應的tsd文件,可以去DefinitelyTyped上找一下。
在項目中引入對應文件,就可以有智能提示了。
這里以angular為例,使用步驟如下:
全局安裝tsd,通過tsd安裝.d.ts文件。這樣會在項目下面生成.typings目錄,目錄下面就是下載的.d.ts文件,再寫代碼的時候就會有智能提示了。具體用法參考tsd用法。
npm install -g tsd
tsd query angular --action install
如果不想自己手工引入,也可以在angular變數後面按ctrl+k,會有個燈泡圖片,點擊燈泡圖片就會有對應提示,選擇下載xx.d.ts文件就可以了,編輯器會下載對應文件放在.typings目錄。
過程如下圖:
vsc是用atom-shell(現在叫electron)寫的,這和node-webkit(現在叫nw.js)一樣,都是把node.js和chrome結合起來的工具,所以可以這么使用。
不過vsc使用到的node.js模塊並不多,比如引用util和vm等會報錯,用node-webkit就不會這樣。
⑨ 進程nice值可以在編譯時指定嗎
Linux內核的三種調度方法:
1、SCHED_OTHER 分時調度策略。
2、SCHED_FIFO實時調度策略,先到先服務。
3、SCHED_RR實時調度策略,時間片輪轉。
實時進程將得到優先調用,實時進程根據實時優先順序決定調度權值,分時進程則通過nice和counter值決定權值,nice越小,counter越大,被調度的概率越大,也就是曾經使用了cpu最少的進程將會得到優先調度。
所有任務都採用linux分時調度策略時即nice時,採用以下方式設置任務時間片。
1,創建任務指定採用分時調度策略,並指定優先順序nice值(-20~19)。
2,將根據每個任務的nice值確定在cpu上的執行時間(counter)。
3,如果沒有等待資源,則將該任務加入到就緒隊列中。
4, 調度程序遍歷就緒隊列中的任務,通過對每個任務動態優先順序的計算(counter+20-nice)結果,選擇計算結果最大的一個去運行,當這 個時間片用完後(counter減至0)或者主動放棄cpu時,該任務將被放在就緒隊列末尾(時間片用完)或等待隊列(因等待資源而放棄cpu)中。
5,此時調度程序重復上面計算過程,轉到第4步。
6,當調度程序發現所有就緒任務計算所得的權值都為不大於0時,重復第2步。
⑩ nicelabel創建資料庫連接時,取excel文件就提示database login
你自己安裝的資料庫,但在PHP里沒有配置資料庫連接信息,比如host、username、password之類的,你要在php程序里找db、conn之類的文件把資料庫信息改對才行。
具體如下:
1、簡介
編程是編寫程序的中文簡稱,就是讓計算機代為解決某個問題,對某個計算體系規定一定的運算方式,是計算體系按照該計算方式運行,並最終得到相應結果的過程。
為了使計算機能夠理解人的意圖,人類就必須將需解決的問題的思路、方法和手段通過計算機能夠理解的形式告訴計算機,使得計算機能夠根據人的指令一步一步去工作,完成某種特定的任務。這種人和計算體系之間交流的過程就是編程。
2、匯編程序
匯編程序。使用匯編語言編寫計算機程序,程序員仍然需要十分熟悉計算機系統的硬體結構,所以從程序設計本身上來看仍然是低效率的、繁瑣的。但正是由於匯編語言與計算機硬體系統關系密切,在某些特定的場合,如對時空效率要求很高的系統核心程序以及實時控製程序等,迄今為止匯編語言仍然是十分有效的程序設計工具。
3、執行原理
計算機對除機器語言以外的源程序不能直接識別、理解和執行,都必須通過某種方式轉換為計算機能夠直接執行的。這種將高級編程硬體程序設計語言編寫的源程序轉換到機器目標程序的方式有兩種:解釋方式和編譯方式。