本文目錄一覽:
- 1、什麼叫php高級工程師
- 2、php書籍推薦
- 3、如何最快速的學習PHP
- 4、學php如何?有前途嗎,去哪裡學好?
- 5、關於服務器架構問題
- 6、高手幫忙
什麼叫php高級工程師
PHP 工程師 (PHP Programmar)
定義: 正在以PHP程序為主要工作,並正在進行新產品的研發.可以同時使用C+/perl等輔助提高PHP程序性能的人是PHP工程師.
描述: PHP工程師是.
特徵:
1: 精通一種或多種linux.
2: 快速編寫結構清晰,代碼格式優美的PHP程序.
3: 能夠進行框架級通用程序的研發.
4: 能夠在程序開發初期就通過項目規劃避免未來可能出現的性能瓶頸.
5: 能夠使用框架/類庫加速項目開發進度.
6: 有自己的代碼庫.
7: 能夠勝任大部分服務器和部分服務器集群優化工作.
技術要求我就不說了.具體到PHP中級程序員之後,PHP程序員就開始選擇發展方向進行分化了.能夠到這一步的人,基本都對自己的職業規劃有清晰的認識.目前國內此類人才奇少.
關於其他:
1 PHP程序員從中級程序員階段就開始分化,具體方向根據公司性質,工作條件,自己的興趣等不一而同.因此需要擅長的詳細技能也不太相同.
例如: 公司使用 joomla 構建網站, 這就要求程序員必須精通joomla. 如果公司使用自研CMS+discuz構建網站,這就要求程序員能夠熟練進行DISCUZ的二次開發.強行要求程序員精通這精通那,意義不大.
到高級程序員開始.PHP程序員由於自己的職業經歷.肯定會有自己的專攻方向,有人擅長大負載下程序開發優化,有人擅長項目快速開發.而到這個階段,如果PHP程序員還需要看這篇文章規劃自己的職業生涯.那麼請自己列出自己擅長的PHP技術.並選擇一種最擅長的技術專攻.
2 關於coder和programmar. 字面上理解第一個是編碼員,第二個是程序員.實際因為國內名詞的混亂.第一個大多以程序員稱呼,第二個目前大多處於項目核心領導層面.故本文暫以工程師稱呼.
coder 是進行少量創新的,大量重複工作的人.
programmar 是進行新技術摸索開發,並實際領導/帶領大中型項目開發的人.
3 關於 C++ . PHP初期的語法(php3/4時代)和C幾乎一樣.我當初就是看一下午PHP速成+php手冊入的門.但到一定深度之後.有些PHP的特性需要實際閱讀PHP源碼才能理解(相關文檔不全或者不好找到).有些實際項目功能使用C++開發遠比PHP效率高.比如我現在做的項目需要爬蟲持續海量抓取,當帶寬足夠的情況時,純使用PHP實現效率不高.所以必須使用C++. 所以C++到需要用的時候自然而然的就要用了.不過如果有C/C++的基礎,學習PHP要輕鬆很多.
4 關於面向對象.面向對象還是很帥的,小型工程上使用意義不大,大中型工程可以極大的提升開發效率.在php4的時代對面向對象基本沒有什麼要求,但是現在需要完整掌握面向對象.
5 關於JAVA/Delphi 他們和php有關么? 我孤陋寡聞.請牛人指教.謝謝
6 關於軟件工程. 軟件工程是一個實際使用中才能學懂的學科.我才疏學淺,在大學的時候楞沒學懂.等實際領導項目了.才慢慢的明白其中的含義與奧妙.
8 關於開發模式. 開發模式的好壞直接關係這項目開發的速度與項目的質量.初期死摳模式意義不大.建議有一定積累了再說.
9 關於名氣. 嗯…怎麼說呢?高端PHP圈子很小,也就那麼些人.水平到了,自然就認識那些人了.
10 關於第三方庫,初期學習掌握一些,比如smarty.到一定階段需要決定到底是精通第三方庫還是使用自行積累開發的庫.總的來說,由於第三方庫大多是外國人開發,所以國內想要時刻緊跟比較被動,phpBB中文的沒落便是一例.如果使用自行積累開發的庫,難度較大,要注意通用性和可擴展性.
11 關於英文. 這個是廢話.最低要求是流暢閱讀英文文檔.
php書籍推薦
關注PHP的人越來越多了,可惜國內PHP5方面的好書還非常少,幾乎可以說沒有。
PHP4即將是明日黃花,所以學PHP最好直接學PHP5。下面是我認為比較好的PHP5書籍:
1. Core PHP Programming, 3rd Edition
這本書是PHP專家Leon Atkinson和PHP創始人之一Zeev Suraski合著的。國內有
第2版,講PHP4的,但這本第3版還買不到。學校圖書館有一本原版,可惜只有一本
(現在在我手裡,咔咔)。講得非常全面,做為Web編程方面的知識,幾乎全部包括
了。最有價值的是Part 4,講Software Enginerring的,介紹了設計、效率與調試,
還介紹了四種最常用的設計模式,非常有參考價值。可惜畢竟是03年的書,那時候
PHP5還在開發中,所以裏面有一些內容並不完全適合現在的PHP5,比如名字空間(
PHP5並不支持名字空間)。不過瑕不掩瑜,做為PHP5的一本綜合書籍,這本書非常
經典,可以用於入門,也可以用於提高。
2. PHP5 Power Programming
這本書是PHP的另一創始人Andi Gutmans寫的,專門針對PHP5。個人感覺這本書
不適合學習,但很適合提高時參考。裏面花了大量篇幅講述PHP5的面向對象機制,
不過基本上跟Core PHP Programming重複,所以看過Core後再看這些將很快,可以
當成溫故一遍。還有一章介紹了PHP5里的高級面向對象特性,如迭代器,反射API(
Reflection API,在其它面向對象語言里稱自省),也介紹了設計模式。
可惜的是,跟上面一本書一樣,都是只講PHP特性的書,具體到PHP高級應用的
實戰講得感覺比較欠缺,像MVC模式,兩本書都沒講到,而這些對PHP高級編程來說是
非常重要的。比較令人安慰的是這本書還介紹了很多PHP高級特性,像PEAR包,APC,
APD,Xdebug,還有Zend Studio的使用,等等,這些還是非常有價值的。
總之,這是一本很適合提高時使用的書籍,跟Core一樣,也是PHP書籍中的經典。
3. PHP and MySQL Web Development, 3rd Edition
這是國內唯一能買到的PHP5書籍,中文翻譯,但翻譯質量不怎麼樣,有些句子
讀起來莫名其妙。這本書比較適合初中級的PHP學習,而且非常實際,有很多基本應
用的實例,很適合入門。除了數據庫知識很不錯外,裏面也講到了使用PHP和MySQL
開發中等項目時所需要考慮到的問題,介紹了很多基本的軟件項目管理方法,非常
實用。後面幾章是一些實例,介紹了購物車(我最不喜歡這東西),郵件列表,內容
管理系統和論壇的編寫,不過都只是基礎,沒有高級技巧,所以看起來會覺得很不舒
服,呵呵。
裏面有一張泛泛地講到了電子商務安全,可以參考下。個人感覺相當不錯的內容
是MySQL部分,基本涵蓋了數據庫基礎和MySQL基礎及高級特性,但限於篇幅,沒有去
講得很深入,權當是入門指引了。
因為是國內能買到的,所以很多人可能會喜歡從這本書開始學PHP5,我覺得也不
錯。總之很推薦這本書。
4. Essential PHP Security
這是一本講述PHP編碼安全的書,非常需要引起PHP開發人員的重視。我覺得這是
一本必讀書籍,讀過後會讓你冒冷汗。現在注重安全編碼的人實在太少了,對於一個
專業的PHP程序員,PHP安全特性絕對要爛熟於胸,而這本書就提供了一個非常好的視
角。
5. PHP Architect’s Guide to PHP Design Patterns
這本書我正在看,對於PHP5面向對象的學習絕對非常有幫助。裏面介紹了非常多
的設計模式,直接以PHP語言實現出來,可以讓你一步到位使用模式思想。第17章介
紹了PHP里的MVC模式,可以說是帶了個好頭,很有參考價值。
由於還沒看完,所以不敢多評價,但可以肯定的是,這本書對於學PHP5面向對象
高級編程的人來說是絕對必備的。
國內有中文版,phpchina社區翻譯的,可以下載過來參考下。另外,好像關於
PHP設計模式的書又出了一本,叫做《PHP5: Objects, Patterns and Practice》,
可惜我Google了半天也找不到下載地址,只能作罷了,希望以後能找到。可以肯定這
又將是一本讓人振奮的書。
又將是一本讓人振奮的書。
最後想說明的是,Oreilly的PHP書就不用看了,包括PHP創始人Rasmus Lerdorf寫的
《Programming PHP》(現在好像出第2版了),講得東西基本上全是PHP手冊里的東
西,沒必要重複浪費時間。像《Learning PHP5》,《PHP Cookbook》之類,說實話
我個人感覺真的只是PHP手冊的子集。最近好像又出了本同樣可以看成是子集的書,
書名是《Learning PHP and MySQL》,看了一眼就沒看了。不是對Oreilly有偏見,
只是因為它的書全是入門級的,沒什麼含金量,屬於看過就扔的那種。想想KR的
《The C Programming Language》吧,呵呵。
最最後想說明的是,PHP手冊,一定要反覆看!這個是學PHP最重要的參考資料,每個
人都應該有一本以備不時之需。有中文翻譯版的,不過裏面的鏈接有錯誤,看起來不
是很方便,但多摸索幾次就能把鏈接弄對了。
大概就講這些了,只是我個人觀點,希望大家指點批評,共同進步。
如何最快速的學習PHP
1,必須先了解php是幹什麼的,了解html,css,js
2,了解完後就要先學習html,css,js,可以去W3school上看,或者慕課網上看,關鍵的是要勤動手。
3,把html,css,js熟練後,就可以學習php了,這裡要知道php最重要的地方其實就是把數據庫的資源和頁面做交互的作用,以這個作為中心點去學習。
4,學習中要邊學邊做,再簡單的例子都要自己動手敲一遍,建議使用慢慢的使用比較輕便的編輯器,比如subline,notepad++等,建議盡量少使用鼠標,以後就會明白為什麼要這樣。
5,要深入理解MVC,面向對象,數據庫
6,學習一款框架
做完上面的東西,你就是一個初級的php程序員了,中級的話就是做了很多的項目,對上面的知識運用熟練,精通。到高級的話就是可以做到不用框架也能把一個項目做得好,做得快,安全高效。
學php如何?有前途嗎,去哪裡學好?
首先回答你第一個問題:學PHP挺好的,因為現在APHP開發技術讓APHP成為了2017年移動互聯網追逐的熱點。也引得很多領域外的人才紛紛轉投於APHP發領域。
關於有沒有前途那就要看你學的怎麼樣了,學好了自然前途無量。學習PHP首先你需要了解PHP的學習需要你了解一定的HTML和CSS,當然,如果想要好工作,那麼JS也是要了解的。其本身並不算難事,掌握邏輯和概念之後,就可以通過實例來獲取大量的PHP開發經驗。能影響你學習成果的最重要的就是學習平台,在這裡說說口碑和就業名列前茅的扣丁學堂。在這裡畢業的學員一般初級大約6K—10K,中級10K—20k。高級開發人員一般都是拿年薪或是股份了。前景很好。
最後是去哪學的問題:線下學習費用高昂、地域限制,建議選擇線上平台。如今線上學習無論是就業還是教學均已完善。扣丁學堂具有完整系統的APHP開發培訓視頻教程,頂級行內大牛為學員們設定了可視化的學習線路直通車,讓沒有學習方向的學子一目了然,最快的進入APHP領域大門。
關於服務器架構問題
初級篇:(單機模式)
假設配置:(Dual core 2.0GHz,4GB ram,SSD)
基礎框架:apache(PHP) + Mysql / IIS + MSSQL
(最基礎框架,處理一般訪問請求)
進階1:替換Apache為Nginx,並在數據庫前加上cache層【數據庫的速度是最大的瓶頸】
Nginx(PHP) + Memcache + Mysql
(此時已經具備處理小型訪問量的能力)
進階2:隨着訪問量的上漲,最先面臨的問題就來了:CGI無法匹配上Nginx的高IO性能,這時候可以通過寫擴展來替代腳本程序來提升性能,C擴展是個好辦法,但是大家更喜歡用簡單的腳本語言完成任務,Taobao團隊開源了一個Nginx_lua模塊,可以用lua寫Nginx擴展,這時候可處理的並發已經超越進階1 一個檔次了。
Nginx(nginx_lua or C) + Memcache + Mysql
(此時處理個同時在線三四千人沒有問題了)
進階3:隨着用戶的增多,Mysql的寫入速度成了又一大瓶頸,讀取有memcache做緩存,但寫入是直接面對Mysql,性能受到了很大阻礙,這時候,要在Nginx和Mysql中間加入一層寫緩存,隊列系統就出場了,就以RabbitMQ為例,所有寫入操作全部丟到這隻兔子的胃裏面,然後屁股後面寫個接應程序,一條條的拉出來再寫入mysql。而RabbitMQ的寫入效率是Mysql的N倍,此時架構的處理能力又上一階層。
|—-write——RabbitMQ——–
Nginx(lua or c)—– |———Mysql
|—-read——Memcache——–
(此時的並發吞吐能力已經可以處理萬人左右在線)
中級篇:(分而治之)
此時我們在單機優化上已經算是達到極限,接下來就要集群來顯示作用了。
數據庫篇: 數據庫總是在整個環節中是吞吐能力最弱的,最常見的方法就是sharding。
sharding可以按多種方法來分,沒有定式,看情況。可以按用戶ID區段分,按讀寫分等等,可用參考軟件:mysql proxy(工作原理類似lvs)
緩存篇:memcache一般採用的是構建memcache pool,將緩存分散到多台memcache節點上,如何將緩存數據均勻分散在各節點,一般採用將各節點順序編號,然後hash取余對應到各個節點上去。這樣可以做到比較均勻的分散,但是有一個致命點就是,如果節點數增加或減少,將會帶來幾乎80%的數據遷移,解決方案我們在高級篇再提。
WEB服務器篇: web服務器集群的建設,最常見的就是lvs方式(memcache pool同樣可以如此組建),lvs的核心就是調度節點,調度節點負責將流量通過算法分散到各個節點上,因調度所耗資源很少,所以可以產生很高的吞吐率,後台節點數量可以任意增刪,但此法弊病就是如果調度節點掛了,則整個集群都掛了,解決方案我們在高級篇提。
高級篇:(高可用性+高可擴展性的集群)
單點調度故障解決:
集群的好處顯而易見,但是有一個弊端就是單節點進行調度,如果節點出現故障,則整個集群全部都無法服務,對此的解決方案,我們使用keepalived來解決。Keepalived for Linux
keepalived是基於VRRP協議(VRRP協議介紹)的,請一定先了解VRRP協議後再進行配置。
keepalived可以把多台設備虛擬出一個IP,並自動在故障節點與備用節點之間實現failover切換。這樣我們配置兩台貨多台lvs調度節點,然後配置好keepalived就可以做到lvs調度節點出現故障後,自動切換到備用調度節點。(同樣適用於mysql)
memcache集群擴展解決:
memcache因為我們一般採用的都是hash後除以節點數取余,然後分配到對應節點上,如果節點數出現變化,以前的緩存數據將基本都不能命中。
高手幫忙
隨着B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員也越來越多。但是由於這個行業的入門門檻不高,程序員的水平及經驗也參差不齊,相當大一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。
SQL注入是從正常的WWW端口訪問,而且表面看起來跟一般的Web頁面訪問沒什麼區別,所以目前市面的防火牆都不會對SQL注入發出警報,如果管理員沒查看IIS日誌的習慣,可能被入侵很長時間都不會發覺。
但是,SQL注入的手法相當靈活,在注入的時候會碰到很多意外的情況。能不能根據具體情況進行分析,構造巧妙的SQL語句,從而成功獲取想要的數據,是高手與「菜鳥」的根本區別。
根據國情,國內的網站用ASP+Access或SQLServer的佔70%以上,PHP+MySQ佔L20%,其他的不足10%。在本文,我們從分入門、進階至高級講解一下ASP注入的方法及技巧,PHP注入的文章由NB聯盟的另一位朋友zwell撰寫,希望對安全工作者和程序員都有用處。了解ASP注入的朋友也請不要跳過入門篇,因為部分人對注入的基本判斷方法還存在誤區。大家準備好了嗎?Let’s Go…
入 門 篇
如果你以前沒試過SQL注入的話,那麼第一步先把IE菜單=工具=Internet選項=高級=顯示友好 HTTP 錯誤信息前面的勾去掉。否則,不論服務器返回什麼錯誤,IE都只顯示為HTTP 500服務器錯誤,不能獲得更多的提示信息。
第一節、SQL注入原理
以下我們從一個網站開始(註:本文發表前已徵得該站站長同意,大部分都是真實數據)。
在網站首頁上,有名為「IE不能打開新窗口的多種解決方法」的鏈接,地址為:,我們在這個地址後面加上單引號』,服務器會返回下面的錯誤提示:
Microsoft JET Database Engine 錯誤 ‘80040e14’
字符串的語法錯誤 在查詢表達式 ‘ID=49” 中。
/showdetail.asp,行8
從這個錯誤提示我們能看出下面幾點:
1.網站使用的是Access數據庫,通過JET引擎連接數據庫,而不是通過ODBC。
2.程序沒有判斷客戶端提交的數據是否符合程序要求。
3.該SQL語句所查詢的表中有一名為ID的字段。
從上面的例子我們可以知道,SQL注入的原理,就是從客戶端提交特殊的代碼,從而收集程序及服務器的信息,從而獲取你想到得到的資料。
第二節、判斷能否進行SQL注入
看完第一節,有一些人會覺得:我也是經常這樣測試能否注入的,這不是很簡單嗎?
其實,這並不是最好的方法,為什麼呢?
首先,不一定每台服務器的IIS都返回具體錯誤提示給客戶端,如果程序中加了cint(參數)之類語句的話,SQL注入是不會成功的,但服務器同樣會報錯,具體提示信息為處理 URL 時服務器上出錯。請和系統管理員聯絡。
其次,部分對SQL注入有一點了解的程序員,認為只要把單引號過濾掉就安全了,這種情況不為少數,如果你用單引號測試,是測不到注入點的
那麼,什麼樣的測試方法才是比較準確呢?答案如下:
①
② and 1=1
③ and 1=2
這就是經典的1=1、1=2測試法了,怎麼判斷呢?看看上面三個網址返回的結果就知道了:
可以注入的表現:
① 正常顯示(這是必然的,不然就是程序有錯誤了)
② 正常顯示,內容基本與①相同
③ 提示BOF或EOF(程序沒做任何判斷時)、或提示找不到記錄(判斷了rs.eof時)、或顯示內容為空(程序加了on error resume next)
不可以注入就比較容易判斷了,①同樣正常顯示,②和③一般都會有程序定義的錯誤提示,或提示類型轉換時出錯。
當然,這只是傳入參數是數字型的時候用的判斷方法,實際應用的時候會有字符型和搜索型參數,我將在中級篇的「SQL注入一般步驟」再做分析。
第三節、判斷數據庫類型及注入方法
不同的數據庫的函數、注入方法都是有差異的,所以在注入之前,我們還要判斷一下數據庫的類型。一般ASP最常搭配的數據庫是Access和SQLServer,網上超過99%的網站都是其中之一。
怎麼讓程序告訴你它使用的什麼數據庫呢?來看看:
SQLServer有一些系統變量,如果服務器IIS提示沒關閉,並且SQLServer返回錯誤提示的話,那可以直接從出錯信息獲取,方法如下:
and user0
這句語句很簡單,但卻包含了SQLServer特有注入方法的精髓,我自己也是在一次無意的測試中發現這種效率極高的猜解方法。讓我看來看看它的含義:首先,前面的語句是正常的,重點在and user0,我們知道,user是SQLServer的一個內置變量,它的值是當前連接的用戶名,類型為nvarchar。拿一個nvarchar的值跟int的數0比較,系統會先試圖將nvarchar的值轉成int型,當然,轉的過程中肯定會出錯,SQLServer的出錯提示是:將nvarchar值 」abc」 轉換數據類型為 int 的列時發生語法錯誤,呵呵,abc正是變量user的值,這樣,不廢吹灰之力就拿到了數據庫的用戶名。在以後的篇幅里,大家會看到很多用這種方法的語句。
順便說幾句,眾所周知,SQLServer的用戶sa是個等同Adminstrators權限的角色,拿到了sa權限,幾乎肯定可以拿到主機的Administrator了。上面的方法可以很方便的測試出是否是用sa登錄,要注意的是:如果是sa登錄,提示是將」dbo」轉換成int的列發生錯誤,而不是」sa」。
如果服務器IIS不允許返回錯誤提示,那怎麼判斷數據庫類型呢?我們可以從Access和SQLServer和區別入手,Access和SQLServer都有自己的系統表,比如存放數據庫中所有對象的表,Access是在系統表[msysobjects]中,但在Web環境下讀該表會提示「沒有權限」,SQLServer是在表[sysobjects]中,在Web環境下可正常讀取。
在確認可以注入的情況下,使用下面的語句:
and (select count(*) from sysobjects)0
and (select count(*) from msysobjects)0
如果數據庫是SQLServer,那麼第一個網址的頁面與原頁面是大致相同的;而第二個網址,由於找不到表msysobjects,會提示出錯,就算程序有容錯處理,頁面也與原頁面完全不同。
如果數據庫用的是Access,那麼情況就有所不同,第一個網址的頁面與原頁面完全不同;第二個網址,則視乎數據庫設置是否允許讀該系統表,一般來說是不允許的,所以與原網址也是完全不同。大多數情況下,用第一個網址就可以得知系統所用的數據庫類型,第二個網址只作為開啟IIS錯誤提示時的驗證。
原創文章,作者:SEXIX,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/313458.html