Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Max_execution_time nyata untuk PHP di linux

Ini adalah saran yang cukup rumit, tetapi pasti akan melakukan apa yang Anda inginkan, jika Anda bersedia untuk memodifikasi dan mengkompilasi ulang PHP.

Lihat kode sumber PHP di https:// github.com/php/php-src/blob/master/Zend/zend_execute_API.c (filenya adalah Zend/zend_execute_API.c ), pada fungsi zend_set_timeout . Ini adalah fungsi yang menerapkan batas waktu. Berikut cara kerjanya di berbagai platform:

  • di Windows, buat utas baru, mulai penghitung waktu, dan ketika selesai, atur variabel global yang disebut timed_out ke 1, inti eksekusi PHP memeriksa variabel ini untuk setiap instruksi, lalu keluar (sangat disederhanakan)

  • di Cygwin, gunakan pengatur waktu dengan ITIMER_REAL, yang mengukur nyata waktu, termasuk tidur, tunggu, apa pun, lalu naikkan sinyal yang akan mengganggu apa saja memproses dan menghentikan pemrosesan

  • pada sistem unix lain, gunakan timer dengan ITIMER_PROF, yang hanya mengukur waktu CPU yang dihabiskan oleh proses saat ini (tetapi keduanya dalam mode pengguna dan mode kernel). Ini berarti menunggu proses lain (seperti MySQL) tidak diperhitungkan.

Sekarang yang ingin Anda lakukan adalah mengubah timer di Linux Anda dari ITIMER_PROF menjadi ITIMER_REAL, yang tentu saja perlu Anda lakukan secara manual, kompilasi ulang, instal dll. Perbedaan lain antara keduanya adalah mereka juga menggunakan sinyal yang berbeda ketika timer berjalan keluar. Jadi saran saya adalah mengubah ifdef:

#   ifdef __CYGWIN__

ke dalam

#   if 1

sehingga Anda menyetel ITIMER_REAL dan sinyal yang ditunggu PHP ke SIGALRM.

Pokoknya seluruh ide ini belum diuji (saya menggunakannya untuk beberapa sistem yang sangat spesifik, di mana ITIMER_PROF rusak, dan sepertinya untuk bekerja), tidak didukung, dll. Gunakan dengan risiko Anda sendiri. Ini dapat bekerja dengan PHP itu sendiri, tetapi dapat merusak modul lain, di PHP dan di Apache, jika karena alasan apa pun, gunakan sinyal SIGALRM atau pengatur waktu lainnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Memilih data dari beberapa tabel semua dengan struktur yang sama tetapi data yang berbeda

  2. Gunakan mysqldump untuk Mencadangkan MySQL atau MariaDB

  3. Bagaimana cara menduplikasi tabel dengan kunci &fitur struktur lainnya yang dipertahankan di MySQL?

  4. Membuat Aplikasi Web Dari Awal Menggunakan Python Flask dan MySQL:Bagian 2

  5. Bagaimana cara menggunakan indeks secara efisien dalam kueri mysql