以鄙人自己寫的Pixiv抓圖器來說,
每個抓到的圖片位址都是像「http://ha2.tw/pixiv/{pixiv_id}_xxx.jpg」,
不過這樣代表我把圖片放在這台所謂ha2.tw的主機上嗎?
答案就不一定了。
事實上我是把實體圖片放在Amazon S3上,
每次有人存取時,我會到S3弄下圖片原檔經由PHP輸出。
為什麼這麼做,
因為不想讓使用者直接連我的S3啊(茶)。
(再怎麼說給其他人直連的話對我的信用卡而言可能會造成傷害Orz)
所以回到主題,要怎麼樣用PHP輸出圖檔呢?
這裡提供一個最簡單的實作方法:
以上的方法會讓你覺得很簡單到不可思議,
但其實也沒什麼,
畢竟圖片和文字檔都是數位內容,
只是因為載具和解讀的方式的不同,
而會有不同的輸出結果。
不相信嗎?
那麼你可以把第一行的header......註解掉後再重跑一次,
你會發現瀏覽器根本只跑出一堆你看不懂的亂碼。
原因在於第一行是我們為了讓瀏覽器知道這是甚麼類型的檔案而做的,
那一行代表我們告訴瀏覽器「等一下要載入一個圖片檔案,麻煩用圖片的方式解讀」,
有了這一行後瀏覽器才不會搞不清楚狀況用錯的解讀方式處理。
圖片的輸出大概就是這樣,
那麼下次有機會就說明一下防盜連的事吧。
(其實搞不好哪天又忘了這回事也不一定XD)
每個抓到的圖片位址都是像「http://ha2.tw/pixiv/{pixiv_id}_xxx.jpg」,
不過這樣代表我把圖片放在這台所謂ha2.tw的主機上嗎?
答案就不一定了。
事實上我是把實體圖片放在Amazon S3上,
每次有人存取時,我會到S3弄下圖片原檔經由PHP輸出。
為什麼這麼做,
因為不想讓使用者直接連我的S3啊(茶)。
(再怎麼說給其他人直連的話對我的信用卡而言可能會造成傷害Orz)
所以回到主題,要怎麼樣用PHP輸出圖檔呢?
這裡提供一個最簡單的實作方法:
<?php header('Content-Type:image/jpeg'); $content = file_get_contents('sample.jpg'); echo $content; ?>
以上的方法會讓你覺得很簡單到不可思議,
但其實也沒什麼,
畢竟圖片和文字檔都是數位內容,
只是因為載具和解讀的方式的不同,
而會有不同的輸出結果。
不相信嗎?
那麼你可以把第一行的header......註解掉後再重跑一次,
你會發現瀏覽器根本只跑出一堆你看不懂的亂碼。
原因在於第一行是我們為了讓瀏覽器知道這是甚麼類型的檔案而做的,
那一行代表我們告訴瀏覽器「等一下要載入一個圖片檔案,麻煩用圖片的方式解讀」,
有了這一行後瀏覽器才不會搞不清楚狀況用錯的解讀方式處理。
圖片的輸出大概就是這樣,
那麼下次有機會就說明一下防盜連的事吧。
(其實搞不好哪天又忘了這回事也不一定XD)
留言
不過ha2.tw那台機器是虛擬主機每個月都有固定流量可以浪費,所以沒關係......
我是不會用EC2這麼做啦,那樣成本太高了。