Bila anda tidak menambahkan setting timeout, contoh membuat crawler situs tertentu, script yang dibuat bisa hang tanpa menampilkan respon apapun. Biasanya aplikasi timeout bergantung ke settingan max_execution_time di php.ini, PHP-FPM menggunakan request_terminate_timeout bila di PHP-FPM tidak disetting maka akan mengambil nila dari php.ini.

Contoh script diambil dari sini

<?php
function fungsiCurl($url){
     $data = curl_init();
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     curl_setopt($data, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}
$url = fungsiCurl('http://162.212.57.192:8000/');
if($url){
$hasil2 = explode('</table></div>',$url);
$hasil3 = explode('</div>',$hasil2[1]);
echo "< pre>";
print_r($hasil3[0]);
echo "</ pre>";
}
else
{
	echo "ada error";
}
?>

Bila anda menjalankan script diatas, maka akan timeout, di Fedora 31 yang saya gunakan timeout setelah 2 menit.

time php icecast.php 
ada error
real	2m11.776s
user	0m0.032s
sys	0m0.018s

Solusi agar script tidak terlalu mencoba mengakses situs yang timeout, bisa ditambahkan setting di fungsiCurl()

CURLOPT_CONNECTTIMEOUT

fungsiCurl menjadi

function fungsiCurl($url){
     $data = curl_init();
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     curl_setopt($data, CURLOPT_CONNECTTIMEOUT, 10);
     curl_setopt($data, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

coba jalankan kembali script diatas, akan timeout setelah 10 detik.

> date;time php icecast.php; date
Wed 05 Feb 2020 10:54:37 AM WIB
ada error
real	0m10.052s
user	0m0.029s
sys	0m0.021s
Wed 05 Feb 2020 10:54:47 AM WIB

Leave a comment

Your email address will not be published. Required fields are marked *