Bagaimana cara memperbaiki batas waktu php?

Kita semua pernah menemukan kesalahan fatal yang ditakuti dari waktu eksekusi maksimal sekali atau dua kali, itu bisa sangat menyebalkan. Waktu eksekusi maksimum PHP ditetapkan pada 30 detik sebagai default, tetapi dalam beberapa kasus, itu harus lebih tinggi. PHP mendukung Anda, Anda dapat mengubah pengaturan default dengan menggunakan satu fungsi; . Dibutuhkan dua parameter, string, dan integer. Yang pertama adalah pengaturan persis yang ingin Anda ubah, dan yang kedua adalah jumlah detik yang ingin Anda atur pada pengaturan itu

Tingkatkan waktu eksekusi maksimal untuk satu skrip PHP

Untuk memperbaiki masalah skrip berat dengan cepat, tambahkan baris PHP berikut ke bagian paling atas skrip Anda

Dua poin penting yang perlu diperhatikan -

  • Perubahan pengaturan harus dilakukan di awal skrip, jika tidak, Anda berisiko mengeksekusi kode terhadap default dan waktu yang baru diatur, yang tidak akan berjalan dengan baik.
  • Ini hanya akan berlaku untuk halaman yang Anda tambahkan baris kode juga
ini_set('max_execution_time', 120); // 120 (seconds) = 2 Minutes

Menetapkan periode eksekusi maksimum yang tidak terbatas

Jika Anda tidak puas dengan menentukan jumlah detik yang tepat, Anda dapat menyetelnya menjadi tidak terbatas, artinya tidak ada waktu eksekusi maksimum. Ini, tentu saja, adalah praktik yang buruk, tetapi jika itu untuk tujuan pengembangan dan pengujian, ini sangat berguna. Pastikan Anda mencabut pengaturan sebelum Anda menerapkan kembali perubahan Anda

ini_set('max_execution_time', 0); // 0 = Unlimited
_

Atur Max_Execution_Time secara global di php. ini

Anda dapat mengeluarkan pengaturan ini ke semua halaman atau skrip proyek Anda dengan menggunakan PHP global. file ini. Dengan mengubah pengaturan default menjadi apa pun yang Anda butuhkan, maka Anda mungkin tidak perlu lagi mengaturnya di skrip. Untuk mengubah waktu eksekusi Anda di php. ini ikuti langkah-langkah di bawah ini

  1. Temukan dan buka folder build PHP Anda
  2. Temukan php. file ini dan membukanya
  3. Temukan baris berikut di file konfigurasi teks – max_execution_time=30
  4. Ubah nilai 30 ke nilai pilihan, Ingat, nilai ini dalam detik
  5. Simpan & Tutup
  6. Mulai ulang server web Anda agar perubahan diterapkan

Referensi

Lihat dokumentasi dari kedua fungsi PHP bawaan yang dibahas di artikel ini –

Bagaimana cara memperbaiki batas waktu php?

  • Fungsi Ini_Set
  • Jenis Konfigurasi

Ringkasan

Mengubah pengaturan ini tidak boleh dilakukan dengan tergesa-gesa, pikirkan kekurangannya terlebih dahulu, terutama jika itu akan menjadi proyek langsung. Pengaturan kecil ini bisa menjadi penyelamat, tetapi jika digunakan secara tidak benar, adalah bom waktu untuk server web Anda

Batas waktu adalah topik yang jarang dibahas dan diabaikan di banyak aplikasi, meskipun waktu tunggu dapat berdampak besar pada situs Anda saat beban tinggi dan saat layanan yang bergantung lambat. Untuk arsitektur layanan mikro, batas waktu penting untuk menghindari kegagalan kaskade saat layanan mati

Batas waktu soket default di PHP adalah 60 detik. Permintaan HTTP dilakukan dengan misalnya file_get_contents, fopen, SOAPClient atau DOMDocument::load menggunakan pengaturan batas waktu INI untuk memutuskan berapa lama menunggu tanggapan

Karena waktu tunggu soket/aliran tidak termasuk dalam waktu eksekusi maksimum PHP, Anda akan mendapat kejutan ketika permintaan memakan waktu hingga 30+60=90 detik dari antrian pemrosesan berharga server web Anda sebelum dibatalkan

Batas waktu itu menakutkan, karena Anda tidak tahu dalam kondisi apa Anda meninggalkan operasi saat dibatalkan. Tetapi dalam hal permintaan HTTP, biasanya klien mudah memutuskan apa yang harus dilakukan

  1. Batalkan permintaan saya sendiri dan tunjukkan kesalahan kepada pengguna
  2. Abaikan batas waktu dan jangan tampilkan datanya
  3. Coba lagi (maksimal 3-5 kali misalnya)

Dan mengonfigurasi batas waktu memiliki situs upsite lainnya

  • Jika server target saat ini memiliki masalah pemuatan, maka membatalkan dengan batas waktu lebih awal dapat mengurangi beban server cukup untuk pulih secara otomatis di beberapa titik
  • Anda dapat menunjukkan kesalahan kepada pengguna dengan cepat dan mereka tidak perlu menunggu beberapa detik hanya untuk diejek oleh halaman kesalahan

Menyetel batas waktu default

Sebelum melakukan hal lain, Anda harus mengurangi batas waktu default di awal kode Anda menjadi nilai antara 5 dan 10 detik

Anda harus memeriksa sistem pemantauan Anda (misalnya Tideways) untuk mengetahui durasi panggilan HTTP biasa untuk panggilan ke sistem internal atau pihak ketiga

Jika Anda memiliki banyak layanan internal atau pihak ketiga yang berbeda, masuk akal untuk mengonfigurasi waktu tunggu individual berdasarkan latensi biasanya

Penyiapan menyeluruh menentukan batas maksimum untuk setiap layanan internal dan pihak ketiga, lalu mengkodekannya dalam panggilan HTTP

Mengonfigurasi batas waktu untuk panggilan file_get_contents/fopen individual

Dalam panggilan berbasis aliran, Anda dapat mengonfigurasi waktu tunggu individual menggunakan konteks aliran. Ini berlaku untuk misalnya file_get_contents dan fopen

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 

Sadarilah bahwa penanganan timeout aliran tampaknya tidak terlalu akurat dan permintaan masih bisa memakan waktu lebih lama dari yang Anda konfigurasikan, terutama ketika Anda pergi di bawah 1 detik

Mengonfigurasi batas waktu untuk DOMDocument. memuat

Secara umum Anda tidak boleh menggunakan fungsi DOMDocument::load untuk memuat hapus XML atau HTML. Untuk memungkinkan kode penanganan kesalahan yang lebih baik, lebih mudah menggunakan klien HTTP secara langsung dan kemudian memuat dengan

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
2. Namun jika Anda harus menggunakannya atau beberapa pustaka melakukannya, Anda dapat mengonfigurasi waktu tunggu lagi dengan konteks aliran dengan cara ini

 array('timeout' => 1.0)));

libxml_set_streams_context($context);

$document = new DOMDocument();
$document->load('http://127.0.0.1/xml'); 

Ini memengaruhi semua panggilan HTTP yang dilakukan PHP melalui libxml

Mengkonfigurasi batas waktu untuk SOAPClient

Kelas SOAPClient tidak menggunakan PHP stream API karena alasan historis. Ini berarti konfigurasi batas waktu bekerja sedikit berbeda. Menyetel parameter

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
_3 dalam konteks aliran Klien SOAP tidak berfungsi

Alih-alih, Anda dapat menyetel setelan

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
_4 yang menangani waktu tunggu sebelum koneksi dibuat atau langsung menyetel
 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
5 dalam kode menggunakan ini_set. Satu-satunya cara lain adalah menimpa metode
 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
_6 untuk menggunakan cURL

 1));

try {
     $client->add(10, 10);
 } catch (SOAPFault $e) {
     if (strpos($e->getMessage(), 'Error Fetching http headers') !== false) {
         // this can be a timeout!
     } 
} 

Mengonfigurasi batas waktu untuk ekstensi cURL

Jika Anda ingin memiliki kontrol lebih besar tentang permintaan HTTP daripada dengan PHP yang dibangun dalam dukungan aliran, tidak ada jalan lain untuk ekstensi cURL

Kami memiliki kontrol batas waktu yang jauh lebih baik dengan cURL, dengan dua pengaturan satu untuk batas waktu koneksi dan satu untuk waktu eksekusi maksimum

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
_7 dan
 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
8 konstanta, tetapi manual memperingatkan bahwa ini mungkin masih hanya diperiksa setiap detik penuh tergantung pada bagaimana cURL dikompilasi dan pengaturan nilai di bawah satu detik biasanya memerlukan untuk mengabaikan sinyal dengan
 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
9 untuk menghindari kesalahan batas waktu segera

Satu hal penting untuk diingat adalah cURL memiliki batas waktu tidak terbatas secara default dan tidak mematuhi pengaturan

 array(
     'timeout' => 1.0,
     'ignore_errors' => true,
)));

$data = @file_get_contents("http://127.0.0.1/api", false, $context);

if ($data === false && count($http_response_header) === 0) {
     // request timed out, because $data is false even though we ignore
     // errors and we dont have response headers 
} 
5 INI. Ini berarti Anda harus mengonfigurasi batas waktu di setiap panggilan cURL dalam kode Anda. Dengan kode pihak ketiga ini bahkan mungkin rumit atau tidak mungkin

Bagaimana cara menghindari kesalahan batas waktu di PHP?

Namun, agar tugas cron selesai, server web harus menjaga agar mesin PHP tetap berjalan tanpa gangguan. Untuk mendapatkan fungsionalitas yang Anda inginkan dari aplikasi web, Anda mungkin perlu mencegah koneksi kedaluwarsa dan ditutup. Hal ini dapat dihindari dengan menggunakan variabel noconntimeout dan noabort dari LiteSpeed .

Bagaimana cara mengubah batas waktu habis PHP?

Atur Max_Execution_Time secara global di php. .
Temukan dan buka folder build PHP Anda
Temukan php. file ini dan membukanya
Temukan baris berikut di file konfigurasi teks – max_execution_time=30
Ubah nilai 30 menjadi nilai pilihan, Ingat, nilai ini dalam hitungan detik
Simpan & Tutup

Bagaimana cara memperpanjang waktu eksekusi di PHP?

Untuk menambah waktu eksekusi, kita menggunakan string bernama “max_execution_time“ yang merupakan nama setting di php. berkas ini . Sintaksis. ini_set('setting_name', nilai);

Apakah PHP memiliki batas waktu?

Waktu tunggu PHP terjadi ketika permintaan Drupal atau PHP memerlukan waktu lebih dari lima menit untuk menghasilkan keluaran, berhenti, dan menghasilkan kesalahan HTTP 500 . Sebagian besar browser web, bergantung pada kliennya, tidak menunggu lebih dari dua menit sebelum menghentikan permintaan dan menampilkan kesalahan.