Saya memanggil serangkaian tautan menggunakan file_get_contents()
metode ini dalam satu lingkaran. Setiap tautan mungkin membutuhkan waktu lebih dari 15 menit untuk diproses. Sekarang, saya khawatir tentang apakah PHP file_get_contents()
memiliki periode waktu habis?
Jika ya, itu akan habis dengan panggilan dan pindah ke tautan berikutnya. Saya tidak ingin memanggil tautan berikutnya tanpa yang sebelumnya selesai.
Jadi, tolong beri tahu saya apakah file_get_contents()
ada periode waktu habis. File yang berisi file_get_contents()
diatur set_time_limit()
ke nol (tidak terbatas).
php
timeout
file-get-contents
Flora Clinton
sumber
sumber
Jawaban:
Batas waktu default ditentukan oleh
default_socket_timeout
pengaturan-awal , yaitu 60 detik. Anda juga dapat mengubahnya dengan cepat:Cara lain untuk mengatur batas waktu, adalah dengan menggunakan
stream_context_create
untuk mengatur batas waktu sebagai opsi konteks HTTP dari pembungkus aliran HTTP yang digunakan:sumber
Seperti @diyism menyebutkan, " default_socket_timeout, stream_set_timeout, dan stream_context_create timeout adalah semua timeout dari setiap baris baca / tulis, bukan seluruh koneksi timeout. " Dan jawaban teratas oleh @stewe telah mengecewakan saya.
Sebagai alternatif untuk menggunakan
file_get_contents
, Anda selalu dapat menggunakancurl
dengan batas waktu.Jadi, inilah kode yang berfungsi untuk memanggil tautan.
sumber
fsockopen
bukancurl
): stackoverflow.com/a/3690321/1869825Iya! Dengan melewatkan konteks aliran di parameter ketiga:
Di sini dengan batas waktu 1s :
Sumber di bagian komentar https://www.php.net/manual/en/function.file-get-contents.php
Opsi konteks HTTP :
Konteks lain: https://www.php.net/manual/en/context.php
sumber
stream_context_create
hanya berfungsi untuk batas waktu koneksi. Jika server membalas (mengirim beberapa data) dalam batas waktu yang diberikan, tetapi membutuhkan waktu selamanya untuk mengirim sisa muatannya, batas waktu ini tidak mengganggu transfer yang lambat.Perlu dicatat bahwa jika mengubah default_socket_timeout dengan cepat, mungkin berguna untuk mengembalikan nilainya setelah panggilan file_get_contents Anda :
sumber
Bagi saya bekerja ketika saya mengubah php.ini di host saya:
sumber