Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: php flush ominaisuus

Ferdi [08.01.2023 17:34:11]

#

Olen uudella palvelimella yrittänyt saada php flushia toimimaan.

ob_start();
echo 'Flused, wait 3sec<br />';

ob_flush();
flush();
sleep(3);

echo 'End ...<br />';

Palvelimella (php 7.4.33) on laitettu output_buffering päälle mutta se ei auttanut.
Onko vika tuossa koodissa vai pitääkö php.iniä vielä säädellä?

Metabolix [08.01.2023 18:59:24]

#

Mitä halusit tapahtuvan, ja millä tavalla ei toimi?

Jos tavoitteena on saada sisältö suoraan selaimelle, niin PHP:n puskurointi (output buffering) vaikuttaa tähän enintään kielteisesti ja PHP:n asetusten lisäksi pitäisi tutkia HTTP-palvelimen asetukset, selaimen asetukset sekä kaikki näiden välillä oleva. Ylipäänsä tuollainen viivytysviritelmä on todellakin viritelmä, ja nykyaikaisempaa olisi tuottaa heti toimiva sivu ja jatkaa hitaampaa lataamista sitten vaikka JS:n fetch-funktiolla.

Ferdi [09.01.2023 20:26:03]

#

Tuo oli testi esimerkki.
Toimivassa sivustossa on pitkä php-kysely jonka suorittaminen vie minuutin niin tuon flushin avulla olen saanut osan sivustosta näkyviin jonka aikana tuo pitkä php-komentosarja ajetaan läpi ja tulokset päivitetään javascriptillä sivustoon.

Ferdi [09.01.2023 20:29:14]

#

Niin tuossa testi esimerkissä 'Flushed, wait 3sec' ei tulostu flush-komennolla vaan kaikki tulostukset tulevat yhtäaikaa.

Metabolix [09.01.2023 21:07:25]

#

Koodissasi ei ole suoranaista vikaa mutta ideassa on. PHP ei ole suoraan yhteydessä selaimeen, vaan tieto kulkee HTTP-palvelimen välityksellä, ja siksi pelkästään PHP-koodilla et voi taata tiedon siirtymistä käyttäjälle asti. Esimerkiksi kaikki nykyaikaan kuuluva pakkaus ja kryptaus tai ihan vain HTTP-palvelimen sisäinen optimointi voi aiheuttaa ylimääräistä puskurointia, jota ei voi PHP:n puolella hallita. Ihan tulevaisuuttakin ajatellen kannattaa hankkiutua tuosta flush-viritelmästä eroon saman tien. Laita suosiolla se hidas kysely eri skriptiksi ja hae se fetchillä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta