Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skrypt użytkownika PHP foreach sprawia, że ​​Apache się zawiesza

To zachowanie brzmi jak blokowanie sesji. Domyślnym sposobem działania sesji PHP jest zablokowanie sesji (aby uniemożliwić dwóm procesom zapis do obiektu sesji). Jest to zwykle dobre dla typowych krótkotrwałych skryptów PHP, ale może cię ugryźć, gdy masz coś, co trwa długo.

Jeśli Twoja aplikacja w ogóle nie używa sesji, wyłącz session.auto_start w php.ini lub .htaccess:http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start (Jeżeli go tam nie widzisz lub jest już wyłączony, ale używasz jakiegoś frameworka, framework może rozpocząć dla ciebie sesję; jeśli tak, łatwiej jest przejść do następnego rozwiązania niż próbować walczyć ramy.)

Jeśli używasz sesji na niektórych stronach, ale nie w tym długotrwałym procesie, rozwiązaniem jest zamknięcie sesji na początku skryptu za pomocą session_write_close() :

<?
set_time_limit(0);

require '../connect.php';
require '../includes/ses.php';

session_write_close();

$i = 1;
....

Ponownie, ostrzeżenie o frameworku:jeśli framework rozpoczyna dla Ciebie sesję, wpisz session_write_close(); po dołączeniu plików frameworka, nie przed! (Wspomniałeś o tym w swoich komentarzach, dlatego umieściłem to po wierszach wymaganych).

Jeśli Twój długotrwały proces musi korzystać z sesji, ale tylko do odczytu, powyższe nadal działa. Zobacz https://stackoverflow.com/a/14409902/841830 (Jak pokazuje ta odpowiedź, jeśli musisz pisać do sesji pod koniec długotrwałego procesu, jest to również możliwe.)

(ps>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak korzystać z phpfastcache?

  2. Zwracanie zestawu wyników

  3. filtrowanie wyników według dwóch wybranych opcji

  4. Jak wybrać różne pary w łączeniu MySQL (ta sama tabela) z przechodniością?

  5. Sphinx bez użycia identyfikatora auto_increment