2017年11月15日 星期三

PHP圖片上傳功能

來工作了那久,第一次有機會做到圖片(專案內容是證件照、銀行卡..)上傳功能,想想上傳功能要注意的點有哪些

1.權限(你的圖片不想給別人看)
2.安全性(用戶如果上傳病毒阿我要怎辦)



權限的部分:
系統管理者那些要看當初權限怎麼設計的,我們是資料庫、session、router相互配合。
不希望用戶登出的時候還能存取圖片,那這樣就要靠PHP來輸出圖片了。
https://blog.allenchou.cc/php-img/
判斷是否為圖片檔的三個方法
http://kuanghy.github.io/2015/11/25/php-isimg
圖片簡單壓縮
http://www.15jb.net/php%E5%AF%A6%E7%8F%BE%E5%9C%96%E7%89%87%E5%A3%93%E7%B8%AE%E7%9A%84%E5%85%A9%E5%89%87%E5%AF%A6%E4%BE%8B


儲存部分:
資料夾位置,盡量不要放在網站目錄下,因為萬一沒設定好,怕透過URL直接存取,像存取你首頁的圖片一樣簡單。
我會把用戶資料夾的"相對路徑"放到資料庫,讓用戶可以讀得到自己的圖片,相對路徑是因為資料夾可能會移位,不希望一動資料庫的欄位都要改

安全性的部分:
server端可以設定該目錄底下為"可讀"  "不可執行"
這樣如果上傳病毒SERVER也不用怕,客戶端就自求多福
https://technet.microsoft.com/zh-tw/dd632964.aspx
http://www.blueshop.com.tw/board/FUM20041006152627A9N/BRD20110515232653FL6.html

6個”檔案上傳”功能的資訊安全風險與防護
http://www.qa-knowhow.com/?p=1472

前端拖曳上傳功能,是說前端有套件可用喔..
http://code-beginner.logdown.com/posts/313821



因為若由 php 去讀取檔案內容並輸出 , 若流量大其實對系統也是個負擔
所以可以用一些 web server 特異功能
可以去Google 查一下 "lighttpd sendfile" 或 "apache sendfile"
可以用一串 header() 丟給 web server 去傳輸指定檔案 , 效能會快很多
https://twpug.net/discussion/5662/%E9%97%9C%E6%96%BC%E5%A6%82%E4%BD%95%E4%BF%9D%E8%AD%B7%E5%9C%96%E7%89%87%E8%88%87%E5%AD%98%E5%8F%96%E6%AC%8A%E9%99%90




以上為蒐集的資料~~~





怎麼傳JSON格式到后端PHP

會有這樣的想法是因為,jquery的ajax 用法裡面,可以直接傳JSON格式過去的,那就好奇到底要怎麼取這個JSON呢?



用這個啦
file_get_contents('php://input');

這就可以取出你傳來的所有INPUT囉
不用特別用
$_POST
$_GET
$_REQUEST
來取會取不到


參考至:
https://stackoverflow.com/questions/19004783/reading-json-post-using-php

php slim 框架設定的router沒作用

工作的時候用slim 來做RESTful專案,然後就因為更新的XAMPP之後設定的路由就失聯啦,


結果是因為.....
Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化

我在自己的httpd-vhosts.conf改這樣就OK囉
AllowOverride All
Require all granted

參考至:

https://oceandlnu.github.io/2016/08/25/Apache2.4%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9D%83%E9%99%90%E8%AE%BE%E7%BD%AE%E9%97%AE%E9%A2%98/


https://blog.longwin.com.tw/2014/03/apache-22-24-upgrade-conf-2014/


https://stackoverflow.com/questions/12343466/always-get-404-error-in-slim-framework-when-omitting-index-php-in-url






這篇主要是講加上meber.php/add/1像這樣路由就成功,實際上這樣加上附檔名我也成功但是不是原本路由功能阿....好醜
https://stackoverflow.com/questions/9747640/slim-framework-always-return-404-error

chrome 開發者模式滑鼠不見的情況

工作中常會遇到一些莫名其妙的事,導致工作時間的拉長.....


上網查可能是因為顯卡,一些雜七雜八的原因
解決方法


沒有根治,只是換個做法



















打勾以後,按F12滑鼠就不會不見囉



參考至:
https://www.zhihu.com/question/48587059

這篇說的嘗試失敗.....
https://www.mobile01.com/topicdetail.php?f=743&t=4462465

2017年3月8日 星期三

新工作新環境

2017/03/06到了新公司上班,開始安裝環境
1.裝php7
2.裝nginx
3.裝laravel


在上面幾個任務之中,需要注意的有幾項

Q:安裝完之後,進入網址列打上網址,nginx不認得.php檔
A:因為nginx透過fast-cgi溝通,所以需要啟動fast-cgi(詳情參考網址)

Q:nginx -t出現bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions)
A:可能是skype衝到,進skype設定換掉80port

Q:nginx和fast-cgi想要開機就執行怎辦
A:關鍵字→runhiddenconsole(詳情參考網址)

Q:安裝laravel 讀不到laravel這命令?
A:環境變數沒設好(詳情參考網址)

Q:需要在本機架多個站點,設定完卻出現No input file specified
A:因為nginx虛擬主機設定檔沒設定好(詳情參考網址)

參考自:
http://abcg5.pixnet.net/blog/post/114727133-windows-server%E4%B8%8A,%E5%9F%B7%E8%A1%8Cnginx-%2B-php-7

http://it-life.wyx-ccy.com/2016/05/laravel-windows.html

http://xiahongyuan.blog.51cto.com/906214/852424

http://blog.openlg.net/index.php/archives/266

2016年5月8日 星期日

腳本語言和系統程式語言

好久沒上來了,除了上來練打字以外,就記錄一下最近發生的事了,最近我終於找到自己想要做的工作了,但是想要做是一回事,做不做得來另是一回事,所以不想被開除的話,自己就要認真一點了,因為工作內容自己覺得還算有趣,要撐下去喔~~~


好了,那麼該從何說起呢,曾經有一張圖是這樣化的,他畫了一個滑鼠,上面疊了幾百個人的手,畫的非常的貼切,也有一篇好笑的文章https://vinta.ws/blog/695軟體工程師的鄙視鏈,有興趣可以看看。


做這一行有很多專業術語,來慢慢了解

因為現在學的是php,是一種腳本語言,那你知道腳本語言和系統程式(像是java)語言的差別嗎?
這篇文章講得算清楚喔
https://tw.answers.yahoo.com/question/index?qid=20070406000010KK07890

我就以自己理解來做一些整理吧

參考WIKI的敘述
把腳本語言的定義理解成
縮短傳統的「編寫、編譯、鏈接、運行」(edit-compile-link-run)過程而創建的計算機編程語言。...出自WIKI


先拿其中一點來講,DEBUG快
腳本語言通常採用直譯,這是一種轉換(翻譯)方式,然後電腦怎麼翻譯干我什麼事,應該說這種翻譯方式剛好可以省你DEBUG的時間

不管程式語言或是腳本語言,都是用我們人類看得懂的高階語言來寫的,然爾高階語言最終還是要轉成機器看得懂的機械語言,兩者只是翻譯的流程不同而已

直譯,一段翻譯完,執行完,再去翻譯下一段,做下一段......效能慢
編譯,全部先翻譯過再執行......效能快

而像是系統語言java則是兩種方式都採用


看完上述的解釋,你應該知道直譯的這種翻譯方式,不談效能等影響
,對coding的人員來說,debug比較省時,哪一段錯看哪一段就行,縮短我們開發的時間。


題外話那為何java要採用直譯?java採直譯不是為了開發人員的DEBUG流程
................................................
取自WIKI
Java語言在最開始應用的時候是沒有解釋層的,所有需要編譯的代碼都直接轉換成機器的原始代碼。這樣做的後果就是獲得了最佳的性能,但是程序臃腫異常。從JIT技術開始,Java的程序都經過一次轉換之後才變成機器碼。很多老牌的第三方虛擬機都使用一種叫做「動態編譯」的技術,也就是說虛擬機實時監測和分析程序的運行行為,同時選擇性地對程序所需要的部分進行編譯和優化。所有這些技術都改善了代碼的運行速度,但是又不會讓程序的體積變得失常。
................................................


以上就是腳本語言的其中一個快。當然這只是開發程序上的優點,還有許多優點之後再補

因為大環境驅使,老闆想要快,員工也想要快。
我聽過一個老師說
像是java這種系統語言是用來寫系統的,
而php這種腳本語言是用來寫應用的。

所以腳本語言在這樣硬體愈來愈進步、與要求快速開發的商業環境下,有了今天這樣的地位。



所以為什麼選擇腳本語言,原因無他,只因為開發快

回到PHP,PHP是個腳本語言,所以有著DEBUG快的優點,然後呢?
PHP還有著跨平台的優點,

又一個專業術語,跨平台
什麼叫做跨平台呢
機械語言→組合語言→程式語言
先從硬體開始說,每種cpu都有自己的指令集,那麼像是組合語言這種東西,就不能跨平台,這是硬體方面的限制。
到了程式語言像是c,可在不同的作業系統上編譯,各別在不同的作業系統上執行
這是作業系統的限制
再到了JAVA在不同的作業系統上有不同的jvm,在一個作業系統上編譯,就能在不同作業系統上執行。
http://www.techbang.com/posts/10678-fully-understand-arm-processors-cisc-and-risc-are-what-history-structure-a-see-through-the-computer-96-issues-cover-story-the-king?fb_action_ids=893460750779999&fb_action_types=og.comments&page=2

從上述的三點來看,要實行跨平台,就必須有一個擔任翻譯的角色,你之所以能夠跨平台,是因為有人幫你把翻譯做得好好的。


JAVA有JVM
那PHP











2016年3月2日 星期三

久違的廢文

荒廢了好一陣子,前陣子想說去7-11打工,打工完回家繼續加油努力,後來發現我錯了,回到家根本不想動別的東西,沒辦法我是需要生活的人,簡單來說就是"太懶了"。
好!切入主題,今天的主題是廢文一篇,是的~我等一下要去一家公司面試,在沒人要我的情況下,對於面試我也有些麻木了,所以面試前寫篇文章來抒發自己心情。
關於IT產業與自己的人生觀,來個哲學問題,怎樣算是成功的人生?
"目前"我給自己的定義是,開開心心的過就是成功的人生,沒辦法生平無大志,只求六十分的道理,我不想當總統、我不想當比爾蓋茲、哥不想當郭台銘、更不想當史蒂夫賈伯斯(WHY?太早死了!!!)如果可以,哥哥想開開心心渡完這一生,沒辦法,出國一趟發現這世界好大,難得爸媽讓你出現在這世界上,你不出去走走晃晃,對不起自己阿。
以上就是我"目前"的人生觀,我並不想花時間貢獻在人類社會上(好自私喔),林杯智商水平不高,哥哥如果真的要花時間在貢獻人類社會上,可能會把這輩子都賠進去喔,重要的事就交給有能力的人吧,沒辦法時間有限,我~不是那塊料。
回歸現實面,哥哥想要出去晃晃,要有資本阿,錢錢錢,幹!!錢這種不要臉的東西還真的很重要,所以我必須要去工作,聖經上說"每個人都需要工作",很有道理的一句話,個人姑且認為,只要你是為了滿足生活所需,你就是在工作(對自己要求也太寬鬆了吧!!),沒辦法真的是生在台灣過太爽,當你連喝一杯乾淨的水都有問題的時候,找一杯水就是你的工作啦!!從這裡我體悟到,生在台灣,不要只是活著,要懂得生活,不然對不起那些被不平等壓榨,來滿足你生活所需的人(我扯遠了)。
好啦!世界上這麼多職業,總該有適合自己的工作吧,你想想這個世界有多美,音樂家(i can't live without music)、藝術家(我不想活在只有黑白和直線條的世界)、運動員、農夫、服務生、作業員....#!$!#!#等等好多好多,每一種行業都是構成這世界的元素,但是不管做哪一行,開心最重要!!你活著不是為了不開心,莫忘初衷阿。