Közlemény

Collapse
No announcement yet.

IIS10 szerveren PHP script nem tud végrehajtás közben a képenyőre írni, csak mikor lefutott

Collapse
X
 
  • Filter
  • Idő
  • Show
Clear All
new posts

  • IIS10 szerveren PHP script nem tud végrehajtás közben a képenyőre írni, csak mikor lefutott

    Az idegesít, hogy IIS webszerveren a hosszú ideig (akár 1-2-3 percen keresztül) futó PHP scriptek nem tudnak semmit kiírni a képernyőre futás közben, nem látom, hol tartanak, nem látom, elkakadt-e valahol, vagy nem, jó lenne üzeneteket látni a képernyőn menet közben is, nem csak a végén.

    Már próbálkoztam azzal, hogy hozzáadtam a PHP script elejéhez:

    Kód:
    ini_set('zlib.output_compression', 0);
    ini_set('implicit_flush', 1);​
    Illetve egy-egy képernyőre kiíratás után:

    Kód:
    // ez ahhoz kell, hogy menet közben is írjon a képenyőre
    ob_flush();
    flush();​
    De még mindig nem működik. Ötletek?

  • #2
    Próbáld meg ezt (feltéve, hogy a PHP-t FastCGI modulként telepítetted a telepítési utasításoknak megfelelően, PHP_via_FastCGI néven):

    Keresd meg a szerveren a %windir%\System32\inetsrv\config könyvtárban az applicationHost.config fájlt.

    A fájlban add hozzá a PHP_via_FastCGI sorhoz a responseBufferLimit="0" szöveget. így fog kinézni az egész sor:

    Kód:
    <add name="PHP_via_FastCGI" path="*.php" verb="*" modules="FastCgiModule" scriptProcessor="C:\PHP\php-cgi.exe" resourceType="Either" responseBufferLimit="0" />

    Parancssorból is megcsinálhatod:

    Kód:
    %windir%\system32\inetsrv\appcmd.exe set config /section:handlers "/[name='PHP_via_FastCGI'].ResponseBufferLimit:0"

    Comment


    • #3
      Erre van egy jobb trükk is:

      Kód:
      // Egy 7,5 millió karakter hosszú szóköz karakterláncot állít elő és jelenít meg,
      // hogy a válasz gyorsan megjelenjen a képernyőn, és megakadályozzuk a bufferelést, különösen, ha lassan (több perc alatt) fut le a script.
      
      echo str_repeat(" ", 7500000);
      Így működik az egész:

      HTML kód:
      <html>
      <body>
           <?php
           echo str_repeat(" ", 7500000);
      
           for ($counter = 0; $counter <= 10; $counter++) {
                echo "Message after " . $counter . " second(s)<br>";
                ob_flush();
                flush();
                sleep(1);
                }
           ?>
      </body>
      </html>
      Last edited by Karcsi; 2024-11-06, 17:37.

      Comment

      Working...
      X