路老闆個人品牌網站
0
  • 會員登入
  • 關於我們
    回主選單
    • 關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    回主選單
    • 線上課程
    • 預約服務
    • 活動報名
  • 商品總覽
  • 創作與紀錄
    回主選單
    • 部落格
    • 影像紀錄
    • Podcast
    • 我的作品
  • 最新消息
  • 聯絡我們
  • Join us
  • Login
  • 0
    路老闆個人品牌網站
  • 關於我們
    關於我們
  • 服務項目
  • 我的錄音小間
  • 課程活動
    線上課程 預約服務 活動報名
  • 商品總覽
  • 創作與紀錄
    部落格 影像紀錄 Podcast 我的作品
  • 最新消息
  • 聯絡我們
部落格
  • 文章總覽
  • 分類
  • 技術筆記
  • 日本旅遊
  • 網站搬家
  • 時事觀察
  • 投資理財
  • 公司經營
  • 主機架設
  • 接案
  • 遊戲心得
  • 產品開箱
  • 網頁相關
  • 金流串接
  • 遊戲經濟
  • 閒聊
  • 直銷
  • CodeIgniter
  • cpanel
  • 出書材料
  • 個人品牌
  • SEO
  • 讀書心得
  • 金流物流
  • 線上課程心得
  • 日劇
    • 大河劇
      • 真田丸
  • AI
91app ClubHouse php8 imunify360 cdn apache php nginx linode digitalocean
  1. 首頁
  2. 部落格
  3. [php程式] 用戶從網頁上傳的圖片 要以怎樣的狀態存在 server 才好?

[php程式] 用戶從網頁上傳的圖片 要以怎樣的狀態存在 server 才好?

2012 Sep 29 未分類

其實這篇之前有寫在草稿
但是只寫了標題

過了一兩個禮拜之後
只看標題 就想不起來這篇要寫什麼了 T_T
剛好最近又遇到一個案例

用戶從網頁上傳的圖片/檔案
要以怎樣的狀態存在 server 才好?



一開始我也跟其他寫網站的菜鳥一樣
開個目錄
把上傳的檔案用 mv 搬到這個目錄

然後開始有人亂搞了
把 php 或是一些 script 傳上去
做一些壞事
感覺很可怕

所以除了上傳的時候做一些檔案類別(file type)檢查以外
也開始把圖片/檔案存到資料庫裡面



然後又因為不是很熟 mysql 怎麼存 binary file
所以又把檔案內容先用 base64_encode 以後
再塞資料庫
mime_type 也在上傳的時候順便塞入資料庫
以便顯示的時候搭配 header 使用

這樣既然可以避免掉有人塞惡意程式到圖檔裡面上傳之類的問題
圖片/檔案透過 php 管理
可以計算下載次數
也可以跟 ckeditor 一類的 html editor 配合
(因為 ckeditor 如果要用它的圖片上傳功能 是要另外付費的)



但是最近遇到一些不老實的主機
資源卡的很緊
(應該說之前租的主機都太好心 資源放很寬)

有的頁面一次開超多圖片的時候
所有的圖片都透過 php 去開
主機的 連線數量又有限
(主機商只開 Entry Process 我覺得很少)
(Entry Process 可以大概當成同時可以跑幾個php程式)
所以只要同時有兩三個人開首頁
就爆炸了



後來沒辦法
只好改 code, 把存在資料庫的圖片存到目錄裡面
第一個遇到的問題是

假設上傳機制有漏洞
有人把php偽裝成圖片塞到這個目錄裡面怎麼辦?

可以設定 .htaccess
讓這個目錄只能開特定附檔名的圖片檔


SetEnvIfNoCase Request_URI ".(gif|jpe?g|png|bmp)$" picture
Order Deny,Allow

Deny from All
Allow from env=picture


這樣就行了




另外
原本可以動態透過php去決定縮圖大小的功能
也沒辦法做了

只能在上傳的時候決定要縮小的縮圖大小
在上傳的時候做完

如果改變縮圖尺寸
可能就要再用程式批次修改了


由這次的經驗也了解
很多主機商都是非常不老實 "穩賺不賠" 的經營主機生意

例如一個月流量給你開幾百G, 甚至 "無限流量"
但是連線數只給你開10個 或是 Entry Process
(通常規格上都不會寫)
或是 CPU 給你 3% 上限

就像小時候我們玩那種貼紙的蒐集遊戲
總共有九張
最後一角那張永遠都集不到

主機商只要卡住一個重要的資源
其他資源開再多你也用不完/吃不到

當然主機商的挑選還有很多面相
不過主機商真的要慎選
好的主機商讓你每天都可以安心睡覺
不好的主機商讓你每天都看晨星
  • 分享此文章
0則留言

相關文章

[講座] “謝哲青” 玩出不一樣的深度之旅

CodeIgniter 2.x 升級到 3.x

路老闆外出取材

路老闆的幹話

很久沒新增文章了...

沒錢做網站怎麼辦?

關於路老闆

推薦連結

  • Alice 你的理財陪跑教練
  • 羅鈞鴻/小虎老師
  • 徐慧玲Lynn
  • 寶寶牙醫 沈醫師
  • 保險資訊懶人包
  • 你的好感度教練
  • 天下為暢

聯絡我們

  • Email: louis@boss-louis.tw
  • 營業時間: 09:00~18:00
  • 聯絡電話: 02-77252950
  • 地址: 106 台北市大安區忠孝東路四段270號17樓
  • 隱私權政策
COPYRIGHT ©路老闆個人品牌網站 All rights reserved | Powered by 路老闆