Toto chování zní jako zamykání relace. Výchozí způsob, jakým PHP sessions fungují, je uzamknout relaci (aby se zabránilo zápisu dvou procesů do objektu session). To je normálně v pořádku pro typické krátkotrvající PHP skripty, ale může vás kousnout, když máte něco, co je dlouho spuštěné.
Pokud vaše aplikace vůbec nepoužívá relace, měli byste vypnout session.auto_start
v php.ini nebo .htaccess:http ://www.php.net/manual/en/session.configuration.php#ini.session.auto-start
(Pokud ho tam nevidíte nebo je již vypnutý, ale používáte nějaký druh frameworku, může za vás framework spouštět relaci; pokud ano, je jednodušší přejít k dalšímu řešení, než se snažit bojovat rámec.)
Pokud relaci používáte na některých stránkách, ale ne na tomto dlouhotrvajícím procesu, řešením je ukončit relaci na začátku skriptu pomocí session_write_close() :
<?
set_time_limit(0);
require '../connect.php';
require '../includes/ses.php';
session_write_close();
$i = 1;
....
Opět varování rámce:pokud vám framework zahajuje relaci, vložte session_write_close();
po zahrnutí souborů frameworku, ne dříve! (Ve svých komentářích jste uvedl, že tomu tak bylo, a proto jsem to umístil za požadované řádky.)
Pokud váš dlouho běžící proces potřebuje použít relaci, ale pouze pro čtení, výše uvedené stále funguje. Viz https://stackoverflow.com/a/14409902/841830 (Jak ukazuje tato odpověď, pokud potřebujete napsat do relace na konci dlouhotrvajícího procesu, je to také možné.)
(P.S. Toto už bylo zodpovězeno v komentářích, ale vzal jsem Wrikkena na jeho nabídku zveřejnit to jako odpověď. Ano, fámy jsou pravdivé:Udělám cokoliv za pár opakování...)