Friday, November 18, 2011

Segmentation Fault di PHP

Tadi siang tiba-tiba file bot PHP gw mati. Setelah gw cek, ternyata ada 1 line code yang selalu menyebabkan file tersebut mati, yaitu str_get_html . Matinya pun aneh, berenti tiba-tiba tanpa permisi ataupun teriak-teriak di log. Akhirnya kucoba memasang try-and-catch-exception, eh anehnya tetap lolos.

Pusing begitu, akhirnya bertanyalah ke mbah google, stackoverflow, dll. Disarankan untuk verbosing, aku memasang kode berikut ini:

error_reporting(E_ALL);  
ini_set('display_errors', 1);

Dan voila, muncullah si brengsek satu itu "segmentation fault". Wuahhh, langsung deh teringat dengan nostalgia masa kuliah, ketika memprogram dengan bahasa C ^^. Ternyata, segmentation fault itu terjadi akibat PHP kehabisan jatah memori untuk memproses string kode HTML menjadi linked-DOM-object.

Akhirnya diputuskan, kalau ternyata panjang stringnya udah keterlaluan, maka ga usah diparse menjadi linked-DOM-object.

So, kode programnya menjadi seperti ini:


$html_code_str = get_html_code($link);
$html = null;
if (strlen($html_code_str) < 500000) {
    $html = str_get_html($html_code_str);
} else {
    print "exceed max string length => unprocessed";
}

No comments: