果你曾經使用過其他語言進行過WEB開發的話,有可能會覺得文件上傳很麻煩,往往需要各種包,需要寫大量的代碼。但是今天跟大家分享的是ThinkPHP文件上傳的教程,通過這篇教程,讓你愛上文件上傳。
圖片來自網絡
在ThinkPHP中使用文件上傳功能無需進行特別處理。例如,下面是一個帶有附件上傳的表單提交:
文件上傳HTML代碼
注意,要使用上傳功能 你的表單需要設置 enctype="multipart/form-data" method="post"
文件上傳控制器代碼
需要注意的事,雖然我們設置了maxSize為3M,但是大多PHP的默認上傳限制為2M,所以當我們上傳大小超過2M的文件時會出現下面的錯誤:
超出PHP上傳限制
我們需要打開php.ini文件,將upload_max_size修改為合適的大小即可。
ThinkPHP提供了靈活的上傳屬性設置,我們可以根據需要設置。Upload類支持的屬性設置包括:
Upload類屬性
如果我們需要一次性上傳多個文件,可以使用下面的代碼:
上傳多個文件代碼
文件上傳成功之后,我們可以通過$info來獲取文件上傳信息,如下:
上傳文件信息
可以看出,info變量中包含一個file數組,其中file對應表單name值,file數組中包含原始文件名、文件格式、文件大小、表單name值、文件擴展名、文件MD5、文件sha1值、文件保存名、文件保存路徑。我們可以通過$info['file']['savepath'].$info['file']['savename']來獲取文件的實際存儲地址。
使用ThinkPHP上傳文件非常輕松,只要稍加聯系就可以掌握基本的上傳功能。如果需要更進一步的操作,可以通過ThinkPHP官方文檔學習。今天就到這里了,小編要去看比賽了,RNG牛逼恭喜WE,希望RNG、WE匯師鳥巢!
了解過世界最大的PHP站點,Facebook的后臺技術后,今天我們來了解一個百萬級PHP站點的網站架構:Poppen.de。Poppen.de是德國的一個社交網站,相對Facebook、Flickr來說是一個很小的網站,但它有一個很好的架構,融合了很多技術,如 Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5以及Tsung。
Poppen.de目前有200萬注冊用戶數、2萬并發用戶數、每天20萬條私有消息、每天25萬登錄次數。而項目團隊有11個開發人員,兩個設計,兩個系統管理員。該站點的商業模式采用免費增值模式,用戶可以使用搜索用戶、給好友發送消息、上載圖片和視頻等功能。
如果用戶想享受不受限制發送消息和上載圖片,那么就得根據需要支付不同類型的會員服務,視頻聊天及網站其他服務也采用同樣的策略。
Nginx
Poppen.de 所有的服務都是基于Nginx服務上的。前端有兩臺Nginx服務器在高峰期提供每分鐘15萬次請求的負載,每個機器已經有四年壽命,并且只有一個CPU 和3GB RAM。Poppen.de擁有三臺獨立的圖像服務器,由三臺Nginx服務器為*.bilder.poppen.de提供每分鐘8萬次請求服務。
Nginx 架構中一個很酷的設計就是有很多請求是由Memcached處理的,因此請求從緩存中獲取內容而不需要直接訪問PHP機器。比如,用戶信息頁(user profile)是網站需要密集處理的內容,如果把用戶信息頁全部緩存到Memcached上,那么請求直接從Memcached上獲取內容。 Poppen.de的Memcached每分鐘可以處理8000次請求。
架構中有三個Nginx圖像服務器提供本地圖像緩存,用戶上載圖 像到一個中央文件服務器。當向這三個Nginx之一中請求圖像時,如果服務器本地中沒有存在該圖像,則從中央文件服務器下載到該服務器上作緩存并提供服 務。這種負載均衡的分布式圖像服務器架構設計可以減輕主要存儲設備的負載。
到了這里可能很多人會覺得這些有些難懂, 沒關系,我為大家準備了一套精品PHP教程,里面涵蓋Nginx,Memcached等學習教程,如果你已經會了,想要精通進階中高級PHP,我這里也有專注于PHP中高級進階的教程,點擊下方標題鏈接即可獲取方法!
全套laravel框架、ThinkPHP框架全套教程分享,PHP程序員福利!
PHP開發三年只懂增刪改查?那是你沒有規劃好php學習路線
PHP-FPM
該網站運行在PHP- FPM上。共有28臺雙CPU、6GB內存的PHP機器,每個機器上運行100個PHP-FPM的工作線程。使用啟用了APC的PHP5.3.x。 PHP5.3可以降低CPU和內存使用率的30%以上。
程序代碼是基于Symfony1.2框架之上開發的。一是可以使用外部資源,二是 能夠提高項目開發進度,同時在一個著名的框架上可以讓新開發人員更容易加入到團隊中來。雖然沒有任何事情都是十全十美的,但可以從Symfony框架中得 到很多好處,讓團隊可以更多的精力放在Poppen.de的業務開發上去。
網站性能優化使用XHProf,這是Facebook開源出來的一個類庫。這個框架非常容易個性化和配置,能夠可以緩存大部分高代價的服務器計算。
MySQL
MySQL是網站主要的RDBMS。網站又幾個MySql服務器:一臺4CPU、32GB的服務器存儲用戶相關信息,如基本信息、照片描述信息等。這臺機器已經使用了4 年,下一步計劃會使用共享集群來替換它。目前仍基于這個系統上進行設計,以簡化數據訪問代碼。根據用戶ID進行數據分區,因為網站中大部分信息都是以用戶 為中心的,如照片、視頻、消息等。
有三臺服務器按主-從-從配置架構提供用戶論壇服務。一臺從服務器負責網站自定義消息存儲,到現在有 2.5億條消息。另外四臺機器為主-從配置關系。另外由4臺機器配置成NDB族群專門服務于密集型寫操作數據,如用戶訪問統計信息。
數據表設計盡量避免關聯操作,盡可能緩存最多的數據。當然,數據庫的結構化規范已經完全被破壞掉了。因此,為了更容易搜索,數據庫設計創建了數據挖掘表。大部分表是MyISAM型表,可以提供快速查找。現在的問題是越來越多的表已經全表鎖住了。Poppen.de正考慮往XtraDB存儲引擎上遷移。
Memcached
網站架構中Memcached應用相當多,超過45GB的高速緩存和51個節點。緩存了Session會話、視圖緩存以及函數執行緩存等。架構中有一個系統 當記錄被修改時可以自動地把數據更新到緩存中去。未來改善緩存更新的可能方案是使用新的Redis Hash API或者MongoDB。
RabbitMQ
在 2009年中開始在架構中使用RabbitMQ。這是一個很好的消息解決方案,便于部署和集中到這個架構中去,在LVS后運行了兩臺RabbitMQ服務 器。在上個月,已經把更多的東西集成到該隊列中,意味著同一時刻有28臺PHP服務器每天要處理50萬次請求。發送日志、郵件通知、系統消息、圖像上載等 更多的東西到這個隊列中。
應用PHP-FPM中的fastcgi_finish_request()函數集成隊列消息,可以把消息異步發 送到隊列中。當系統需要給用戶發送HTML或JSON格式響應時,就調用這個函數,這樣用戶就沒有必要等到PHP腳本清理。
這個系統可以改善架構資源管理。例如,在高峰期服務每分鐘可以處理1000次登錄請求。這表示有1000并發更新用戶表保存用戶的登錄時間。由于使用了隊列機制,可以 按相反的順序來運行這些查詢。如果需要提高處理速度,只需要增加更多的隊列處理者即可,甚至可以增加更多的服務器到這集群中去,而不需要修改任何配置和部 署新節點。
CouchDB
日志存儲CouchDB運行在一臺機器上。在這臺機器上可以根據模塊/行為進行日志查詢 /分組,或者根據錯誤類型等等。這對定位問題非常有用。在使用日志聚合服務CouchDB之前,不得不逐臺登錄到PHP服務器上設法日志分析定位問題,這 是非常麻煩的。而現在把所有的日志集中到隊列中保存到CouchDB中,可以集中進行問題檢查和分析。
Graphite
網站使用Graphite采集網站實時信息并統計。從請求每個模塊/行為到Memcached的命中和未命中、RabbitMQ狀態監控以及Unix負載等等。Graphite服務平均每分鐘有4800次更新操作。實踐已經證實要監測網站發發生什么是非常有用的,它的簡單文本協議和繪圖功能可以方便地即插即 用的方式用于任何需要監控的系統上。
一件很酷的事情是使用Graphite同時監控了網站的兩個版本。一月份部署了Symfony框架新 版本,以前代碼作為一個備份部署。這就意味著網站可能會面臨性能問題。因此可以使用Graphite來對兩個版本在線進行對比。
發現新版本上的Unix負載表較高,于是使用XHProf對兩個版本進行性能分析,找出問題所在。
Red5
網站為用戶也提供了兩種類型的視頻服務,一種是用戶自己上載的視頻,另外一種是視頻聊天,用戶視頻互動和分享。到2009年年中,每月為用戶提供17TB的流量服務。
Tsung
Tsung 是一個Erlang編寫的分布式基準分析工具。在Poppen.de網站中主要用于HTTP基準分析、MySQL與其他存儲系統(XtraDB)的對比分 析。用一個系統記錄了主要的MySQL服務器的流量,再轉換成Tsung的基準會話。然后對該流量進行回放,由Tsung產生數以千計的并發用戶訪問實驗 室的服務器。這樣就可以在實驗環境中與真實場景非常接近。
、ThinkPHP介紹
ThinkPHP是一款優秀的網站內容管理系統,因其功能強大,操作簡單,擁有海量用戶
和其他CMS一樣,安全漏洞也是其無法避免的問題。雖然官方不斷發布補丁、升級版本,但安全問題依然存在。
下面我們講述如何在不修復程序的情況下,通過安全加固的方法,快速解決ThinkPHP系統的安全問題。
二、安全防護方法
要解決ThinkPHP安全問題,我們需要使用一款網站專用防護軟件-【護衛神·網站鎖系統】。
【護衛神·網站鎖系統】通過部署ACL權限策略、安全訪問策略和零信任策略,對每一個文件進行細粒度加固,對每一次訪問行為進行精準控權,對網站后臺做零信任防護,從而杜絕黑客入侵,有效防掛馬、防黑鏈、防篡改,讓網站安全無憂!
該系統支持幾乎所有CMS系統,具有一鍵部署、不限站點數量、不限部署次數、不改網頁代碼、無視網頁木馬、后臺授權通知等功能特點。
三、部署流程
網站鎖使用非常簡單,只需三步:①下載安裝軟件->②添加網站策略-->③后臺訪問授權
1、下載安裝軟件
首先進入網站鎖官網(https://www.hws.com/soft/wzs/)下載軟件到服務器安裝。
安裝后需要注冊軟件,如果沒有授權,請先到 https://u.hws.com/buy/soft.asp?id=8 申請免費試用。
小提示:申請授權需要先注冊一個用戶名(用于管理授權),注冊地址:https://u.hws.com/user/reg.asp
注冊完成后,會在桌面生成“網站鎖使用說明.txt”,后續備用。
2、添加網站策略
打開網站鎖,進入“網站策略”-“添加策略”。
選擇需要部署安全的網站和匹配的安全策略,點擊“確定”開始部署。
① 可以點擊“智能匹配”圖標自動選擇安全模板。
② ThinkPHP的后臺是和首頁集合在一起的,因此無法做后臺保護,這里留空。注意需要去掉勾選“后臺保護”。
部署后,可以點擊“刷新”按鈕,查看部署結果。當狀態為“成功”或“正常”時,表示部署成功。
3、后臺訪問授權
由于ThinkPHP的后臺是和首頁集合在一起的,因此無法做后臺保護,可以直接訪問后臺。
四、服務器加固
網站加固后,還需要對服務器進行加固,因為服務器一旦被入侵,所有網站都會遭殃。
服務器加固只需兩步搞定:①加固系統安全->②部署防護系統
1、加固系統安全
加固內容:更新系統補丁、常用軟件加固、系統權限加固、禁用危險服務、刪除危險組件、防火墻加固。
如果您不知道怎么操作,就找護衛神的工程師幫您弄吧,省時省心。
2、部署防護系統
推薦使用【護衛神·入侵防護系統】,一款服務器專用防火墻。
護衛神·入侵防護系統擁有數十項安全模塊,在黑客入侵的每一個環節進行攔截,將一切不速之客拒之門外,值得每臺服務器安裝。
入侵防護系統設置方法請點這里:https://www.hws.com/help/sec/1454.html
以上就是ThinkPHP安全防護方法,不改任何代碼,只需點幾下鼠標即可徹底解決安全問題。雖然ThinkPHP系統漏洞多多,但是有了護衛神·網站鎖系統,安全就不再是問題!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。