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