Mysql
 sql >> база данни >  >> RDS >> Mysql

Реално max_execution_time за PHP на linux

Това е доста труден съвет, но определено ще направи това, което искате, ако сте готови да модифицирате и прекомпилирате PHP.

Разгледайте изходния код на PHP на адрес https:// github.com/php/php-src/blob/master/Zend/zend_execute_API.c (файлът е Zend/zend_execute_API.c ), във функция zend_set_timeout . Това е функцията, която прилага ограничение във времето. Ето как работи на различни платформи:

  • в Windows, създайте нова нишка, стартирайте таймер върху нея и когато приключи, задайте глобална променлива, наречена timed_out до 1, ядрото за изпълнение на PHP проверява тази променлива за всяка инструкция, след което излиза (много опростено)

  • на Cygwin, използвайте таймер с ITIMER_REAL, който измерва реален време, включително сън, изчакайте, каквото и да е, след това подайте сигнал което ще прекъсне всяко обработка и спиране на обработка

  • на други unix системи, използвайте таймер с ITIMER_PROF, който измерва само времето на процесора, прекарано от текущия процес (но както в потребителски режим, така и в режим на ядрото). Това означава, че чакането за други процеси (като MySQL) не се зачита в това.

Сега това, което искате да направите, е да промените таймера на вашия Linux от ITIMER_PROF на ITIMER_REAL, което разбира се трябва да направите ръчно, да прекомпилирате, инсталирате и т.н. Другата разлика между тези две е, че те също използват различен сигнал, когато таймерът работи навън. Така че моето предложение е да промените ifdef:

#   ifdef __CYGWIN__

в

#   if 1

така че да зададете както ITIMER_REAL, така и сигнала, който PHP чака, на SIGALRM.

Така или иначе цялата тази идея е непроверена (използвам я за някаква много специфична система, където ITIMER_PROF е счупен и изглежда да работи), неподдържан и т.н. Използвайте го на свой собствен риск. Може да работи със самия PHP, но може да повреди други модули в PHP и в Apache, ако по някаква причина използват сигнала SIGALRM или друг таймер.



  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:резултати от последните седем дни

  2. Използване на utf8mb4 с php и mysql

  3. съхраняване на mp3 файлове в mysql

  4. намаляване на производителността на низовете като първични ключове?

  5. MySQL Добавяне на уникално ограничение