วิธีแก้ไขปัญหา function imagejpeg() ใน PHP 5.4.x ไม่แสดงรูป

หลังจากที่อัพ PHP เป็น version 5.4 ทำให้พบปัญหา Error มากมายอย่างไม่หยุดหย่อน ล่าสุดพบว่าฟังชั่น imagejpeg() มันไม่แสดงรูป

ก็ลองไปเช็กค่า GD ว่าเปิดอยู่หรือป่าว ก็เปิดตามปกติ

; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.

extension=php_bz2.dll
extension=php_curl.dll
extension=php_mbstring.dll
extension=php_exif.dll
;extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_gettext.dll
;extension=php_gmp.dll

ลองเข้า phpinfo() GD ก็ทำงานปกติ

ลอง fix error notice แล้ว รูปก็ยังไม่ขึ้น

วิธีแก้ไข PHP Notice: Undefined index, Notice: Undefined variable

จนพบปัญหาจุดใต้ตำตอของปัญหา นั่นก็เพราะว่า

การใช้ ‘ ‘ หรือ ” “ แทนค่า NULL ใน PHP 5.4.x นั้น มันให้ผลลัพท์ต่างกัน!!!

ต่างกันตรงที่ว่า ถ้าเราใช้เงื่อนไขแบบนี้

$text =  '';
if(isset($text))
    echo 'true';
else
    echo  'false';

ค่าที่ได้มันจะเป็น true ทันทีครับ
แต่หากเปลี่ยนเป็น

$text =  NULL;
if(isset($text))
    echo 'true';
else
    echo 'false';

ค่าที่ได้จะเป็น false

เมื่อได้ความตามนั้น ก็เลยจัดแจงแก้ไขฟังชั่นตามนี้

imagejpeg($img,'',50);

แก้เป็น

imagejpeg($img,NULL,50);

 

เนื่องจากว่ามันพยายามมองหา path filename ที่เราระบุเอาไว้นั่นเอง ทำให้มันหาที่เก็บรูปไม่เจอ ดังนั่น ใครที่เคยใช้ หรือ “” แทนค่าว่าง หรือค่า NULL จนเคยชินนั้น ควรเปลี่ยนเสียแต่บัดนี้ครับ