您看到的是這個吧!
照理說 imagecreatefromstring
應該只會回傳資源和 false
才對。
對 但是 imagecreatefromstring 會印出錯誤訊息,並非單純回傳fasle
能提供出現的警告嗎?
Felix
Notice: imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: premature end of data segment in D:\website\packagerent\test\ttt.php on line 6
Notice: imagecreatefromstring(): gd-jpeg, libjpeg: recoverable error: Corrupt JPEG data: 5888 extraneous bytes before marker 0xd9 in D:\website\packagerent\test\ttt.php on line 5
Warning: imagecreatefromstring(): gd-jpeg: JPEG library reports unrecoverable error: in D:\website\packagerent\test\ttt.php on line 5
Warning: imagecreatefromstring(): Passed data is not in 'JPEG' format in D:\website\packagerent\test\ttt.php on line 5
Warning: imagecreatefromstring(): Couldn't create GD Image Stream out of Data in D:\website\packagerent\test\ttt.php on line 5
您好 類似這個 我放入imagecreatefromstring()的值是隨便key的
謝謝
於程式碼最上方加入此行:
ini_set('gd.jpeg_ignore_warning', 1);
並將原本的 $source
改為下列所示:
$source = @imagecreatefromstring($data_upload);
也請回覆結果,謝謝!
先說一件事,在運行策略程式中跑INI函式,是很不好的行為。
基本有很多判斷的方式。
就目前而言,finfo_open這個函式會對你來說比較好用。
如果是運行在8.1版的話,已經可允許空資源了。
GD函式其實我現在比較少用了。最多只拿來生成驗証圖。
學到一課了呢!
㊣浩瀚星空㊣
你好 我使用
$a是base64字串
可以印出檔案資訊,但是我試著將base64破壞後,他還是顯是圖檔(執行imagecreatefromstring會錯誤),好像沒辦法很正確的判斷base64檔案的正確性 謝謝
是的,其實認真來說。這並不是BASE64的問題。
正規安全的做法是將其檔案建檔生成後。再用檔案方式來判斷讀取。
早期還會搭配exif的特性。這樣是最好驗証的方式。
只是這樣子做很操主機效能。一般並不建議這樣子處理。
畢竟,只是為了判斷。
如果是為了注入,一般只會去檢查base64的資料格式正不正確。
GD函式其實要用來建立不確定的圖片格式。都很容易報錯。
這也是我為何不期望你用GD的函式處理。
畢竟你光目前的類型都無法確定了。使用GD函式一定是死一片的。
另外 finfo 只是幫你驗証帶進來的資料 mime 格式的正確性。
並無法幫你驗証內容。
基本上來說mime正確就大致上OK了。
你還是得利用 finfo 的方式去生成檔案並處理的。
如果你真的想要完整的處理,你可能也只剩下生成 temp 檔後再做判斷了。(很操機器喔!!)