Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perlindungan Asas Terhadap Had Masa Pelaksanaan Maks

Perlindungan Asas Terhadap Had Masa Pelaksanaan Maks

Susan Sarandon
Susan Sarandonasal
2024-09-25 20:10:02675semak imbas

Basic Protection Against Max Execution Time Limit

Sesiapa sahaja yang telah berurusan dengan mengimport atau mengeksport data berkemungkinan menghadapi masalah skrip berjalan ke dalam had masa pelaksanaan yang singkat. Penyelesaian terpantas selalunya melibatkan pelarasan konfigurasi PHP atau melumpuhkan sepenuhnya had pada permulaan skrip. Walau bagaimanapun, memanjangkan masa pelaksanaan dengan ketara atau melumpuhkannya sama sekali memperkenalkan risiko keselamatan. Skrip latar belakang yang tidak boleh dihalang boleh menyebabkan penggunaan sumber yang berlebihan.

Apabila memproses tugasan melalui lelaran, anda boleh memantau pas individu dalam masa dan cuba menamatkan pelaksanaan dengan anggun sebelum had masa tamat.

// initialize basic variables for further work
$maxExecutionTime = (int)ini_get('max_execution_time');
$estimateCycleTime = 0;
$startTime = microtime(true);

// For demonstration purposes, we use an "infinite" loop with a simulated task lasting 10 seconds
while (true) {
   sleep(10);

   // Calculate the current runtime
   $currentRunTime = microtime(true) - $startTime;

   // Termination can be done either with a fixed constant
   // or by measuring the time of one pass and trying to use
   // the longest possible segment of the runtime
   // limit (has its problem).
   if ($estimateCycleTime === 0) {
       $estimateCycleTime = $currentRunTime;
   }

   // Check if the iteration stop time is approaching.
   // Subtract the time of one pass, which likely won't fit
   // within the window. 
   if (($maxExecutionTime - $estimateCycleTime) < $currentRunTime) {
       echo 'Time is end';
       break;
   }
}

Pemberhentian awal berdasarkan pengiraan satu pas adalah sesuai untuk kes di mana terdapat sejumlah besar pas yang perlu diproses dalam sesedikit mungkin pelaksanaan baharu, dan setiap operasi dalam satu pas juga memakan masa yang sama. Jika pas individu berbeza dalam keperluan masa mereka, pekali mesti ditambah pada masa lulus. Pilihan lain ialah menggunakan masa yang telah ditetapkan:

$beforeEndTime = 1;

if (($maxExecutionTime - $beforeEndTime) < $currentRunTime) {
    echo 'Time is end';
    break;
}

Jika skrip diteruskan selepas lelaran, seperti menutup sambungan ke titik akhir API, menutup fail atau menjalankan operasi lain, adalah penting untuk diingat untuk menambah masa ini.

Atas ialah kandungan terperinci Perlindungan Asas Terhadap Had Masa Pelaksanaan Maks. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn