[PHP] Percentage weergeven verwerken bestanden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het volgende is het geval:

De webmaster upload foto's naar de map upload en drukt op start.
Het script gaat tellen hoeveel foto's er zijn en verdeeld deze in groepjes van drie.
Na de verwerking elke drie foto's update hij de pagina en gaat verder met de volgende drie foto's.

Nu wil ik dus dat er om de drie foto's een percentage update is, zodat de webmaster ziet dat er iets gebeurt.

Nu heb ik deze code:
PHP:
1
2
3
4
5
6
7
$id = $_GET['id'];;
            $perc = $perc+1;
            echo "Percentage: ".$perc;
            ob_flush();
            flush();
            sleep(3);
            header("location: verwerk.php?verwerken=true&id=$id&percentage=$perc");

Om te testen of de flush werkt.

Maar het enige wat ik na 5 seconden te zien krijg is "Percentage: 1" en dan breekt het script af.
Er wordt niet meer geupdate of iets dergelijks, en dat is wat ik wel wil.

Heeft iemand een idee wat ik fout doe?

Acties:
  • 0 Henk 'm!

  • M-ThijZ
  • Registratie: Maart 2003
  • Laatst online: 22:57

M-ThijZ

Riding on Rails

Hier kun je het beste een stukje javascript voor gebruiken.

Acties:
  • 0 Henk 'm!

  • itons
  • Registratie: Oktober 2003
  • Niet online
$perc = $_GET['percentage'];

maar dat is geen gokje : <

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
itons schreef op woensdag 02 augustus 2006 @ 12:03:
$perc = $_GET['percentage'];

maar dat is geen gokje : <
Dit is puur om te testen of mijn pagina uberhaupt een tussentijdse weergave wil doen, maar het lijkt erop of er helemaal niets gebeurt.

Ik heb bovenaan al $perc gedeclareerd als 1.

[ Voor 7% gewijzigd door Verwijderd op 02-08-2006 12:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
M-ThijZ schreef op woensdag 02 augustus 2006 @ 12:02:
Hier kun je het beste een stukje javascript voor gebruiken.
Hoe zie jij dat voor je dan? Het script moet sowieso om de drie foto's worden aangeroepen omdat de timeout van de server te laag is. Het moet dan toch ook mogelijk zijn om een voortijdige output te laten zien zonder dat het script helemaal klaar is?

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

header kan je alleen sturen als er nog geen output geweest is, waarschijnlijk krijg je, als je je script met Error_reporting(E_ALL); begint een 'unable to send header' melding

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheRookie schreef op woensdag 02 augustus 2006 @ 12:28:
header kan je alleen sturen als er nog geen output geweest is, waarschijnlijk krijg je, als je je script met Error_reporting(E_ALL); begint een 'unable to send header' melding
Volgens mij heb ik geen output voor de header.

Dit is alles wat er in m'n script staat:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
    error_reporting(E_ALL);
    session_start();
    include("checkadmin.php");
    include("mysql.php");

    $perc = 10;
    if($_GET['verwerken']==true) {
        if($_POST['album']) {
            /* Wanneer script compleet is kan deze weer geactiveerd worden
            mysql_query("INSERT INTO `f_albums`(`naam`) VALUES ('".$_POST['album']."') ") or die(mysql_error());
            $sql = mysql_query("SELECT id FROM f_albums WHERE naam = ('".$naam."')");
            $res = mysql_fetch_object($sql);
            $id=$res->id;
            */
            $id=4;
            header("location: verwerk.php?verwerken=true&id=$id");
        } elseif($_GET['id']==true && $test < 10) {
            ob_start();
            $id = $_GET['id'];
            //$perc = $_GET['percentage'];
            $perc = $perc+1;
            echo "MOeder: ".$perc;
            ob_end_flush();
            sleep(3);
            header("location: verwerk.php?verwerken=true&id=$id&percentage=$perc");
        }
    } else {
?>
    <html>
        <head>
            <title>Bezig met verwerken...</title>
            <style type="text/css">
                .input {background-color: orange; font-weight: bold; font-size: 12px; color: #000000; border : 1px solid #000000;}
                .input2 {background-color: white; font-weight: bold; font-size: 12px; color: #000000; border : 1px solid #000000;}
            </style>
        </head>
        <body>
            <form action="verwerk.php?verwerken=true" method="post">
                <input class="input2" type="text" name="album" value="albumnaam" onclick="value=''">
                <input class="input" type="submit" name="submit" value="Go">
            </form>
        </body>
    </html>
<?php
}
?>

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Ik denk dat wat jij wilt niet mogelijk is. Je zult hier denk ik Ajax voor nodig hebben, of gewoon steeds zoals je nu doet met de header gaan werken. Ik raad je ajax aan!

Volgens mij is alles wat je uit de $_GET var haalt een string. Probeer eens == 'true'

[ Voor 20% gewijzigd door Depress op 02-08-2006 12:53 ]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

regel 23 staat een echo.

Stond die error_reporting er al, of heb je die net toegevoegd ?

Waarom doe je overigens $_GET['id'] == true en niet (!empty($_GET['id']) && is_numeric($_GET['id']))
Waar komt $test vandaan ?

[edit]
als ik bovenstaand script run krijg ik (onder andere) keurig
Warning: Cannot modify header information - headers already sent by [knip]
te zien

[ Voor 27% gewijzigd door TheRookie op 02-08-2006 13:04 . Reden: typo ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Depress schreef op woensdag 02 augustus 2006 @ 12:52:
Ik denk dat wat jij wilt niet mogelijk is. Je zult hier denk ik Ajax voor nodig hebben, of gewoon steeds zoals je nu doet met de header gaan werken. Ik raad je ajax aan!

Volgens mij is alles wat je uit de $_GET var haalt een string. Probeer eens == 'true'
Hmm dan moet ik me maar eens gaan verdiepen in AJAX.
Het script loopt gewoon door de loop heen, maar geeft op dit moment niets meer terug.

In mijn vorige versie, gaf hij na 2 seconden wel de echo weer, maar hij deed geen refresh. De waarde bleef hetzelfde.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Je hoeft je niet te verdiepen in ajax. Gewoon begrijpen hoe html werkt zal je al een stuk helpen. Je kunt geen content sturen samen met een header redirect. De header geeft de opdracht om naar een andere pagina te gaan. De browser gaat dan niet de pagina afbeelden. Wat jij wilt is pas na 2 seconden (oid) naar de volgende pagina gaan. Dit kun je doen met javascript of met een meta tag.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op woensdag 02 augustus 2006 @ 13:04:
Je hoeft je niet te verdiepen in ajax. Gewoon begrijpen hoe html werkt zal je al een stuk helpen. Je kunt geen content sturen samen met een header redirect. De header geeft de opdracht om naar een andere pagina te gaan. De browser gaat dan niet de pagina afbeelden. Wat jij wilt is pas na 2 seconden (oid) naar de volgende pagina gaan. Dit kun je doen met javascript of met een meta tag.
Nee dat is het niet.

Die sleep die er in zit, die simuleerd het foto-verwerk-script, maar ik wil daarvoor al laten zien op hoeveel procent het script is.

[ Voor 5% gewijzigd door Verwijderd op 02-08-2006 13:38 ]


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Je wil dus per foto laten zien hoe ver het script is met het verwerken van die foto ?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 02 augustus 2006 @ 13:38:
[...]


Nee dat is het niet.

Die sleep die er in zit, die simuleerd het foto-verwerk-script, maar ik wil daarvoor al laten zien op hoeveel procent het script is.
Dat is toch helemaal niet in tegenspraak met wat ik zeg? Het enige verschil is dat je de redirect niet na 3 seconde wilt hebben, maar gelijk wanneer de hele pagina binnen is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheRookie schreef op woensdag 02 augustus 2006 @ 13:41:
Je wil dus per foto laten zien hoe ver het script is met het verwerken van die foto ?
Nee. Je hebt bijvoorbeeld 200 foto's. Deze moeten allemaal verwerkt worden.

Nu doe ik het per 3. Dus hij verwerkt er 3, en daarna geeft hij een refresh van de pagina met het aantal % waar hij op dat moment is.
Daarna doet hij er weer 3 en moet er weer een status update komen.

[ Voor 5% gewijzigd door Verwijderd op 02-08-2006 13:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op woensdag 02 augustus 2006 @ 13:50:
[...]


Dat is toch helemaal niet in tegenspraak met wat ik zeg? Het enige verschil is dat je de redirect niet na 3 seconde wilt hebben, maar gelijk wanneer de hele pagina binnen is.
Je hebt gelijk. Maar die header functie zorgt er toch voor dat hij die pagina laadt? Waarom kan ik niet voordat ik de functie uitvoer alvast de echo laten verschijnen.

Is het anders een optie om eerst de functie over 3 foto's te laten draaien en het aantal % weer te geven en de pagina daarop alvast te bufferen inclusief de functie?

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Nope, gaat ook niet werken, je zal ipv de header functie bijvoorbeeld
PHP:
1
print("<meta http-equiv=\"refresh\" content=\"2;url=verwerk.php?verwerken=true&id=$id&percentage=$perc\">");

moeten gebruiken

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheRookie schreef op woensdag 02 augustus 2006 @ 14:02:
Nope, gaat ook niet werken, je zal ipv de header functie bijvoorbeeld
PHP:
1
print("<meta http-equiv=\"refresh\" content=\"2;url=verwerk.php?verwerken=true&id=$id&percentage=$perc\">");

moeten gebruiken
Hmm dat is dan een heel andere aanpak dan ik in gedachten had.
Want ik weet natuurlijk niet of die functie na 2 seconden al klaar is.

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

het foto-bewerkingsdeel zal natuurlijk eerst afgerond moeten zijn voordat je die meta tag print :)

als je 't quick-'n-dirty zou willen:
PHP:
1
2
3
echo "MOeder: ".$perc;
sleep(3); // oftewel 3 foto's bewerken
print("<meta http-equiv=\"refresh\" content=\"2;url=test.php?verwerken=true&id=$id&percentage=$perc\">");

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 02 augustus 2006 @ 13:57:
[...]


Je hebt gelijk. Maar die header functie zorgt er toch voor dat hij die pagina laadt? Waarom kan ik niet voordat ik de functie uitvoer alvast de echo laten verschijnen.

Is het anders een optie om eerst de functie over 3 foto's te laten draaien en het aantal % weer te geven en de pagina daarop alvast te bufferen inclusief de functie?
Nee, die header functie zorgt ervoor dat er aan de response een specifieke header toegevoegd wordt. Headers worden voor de html verstuurd en geven extra informatie over de getoonde html (is het een foutpagina of normale, mag het gecached worden, welke content en mimetype is de pagina)

Wanneer je halverwege wilt doorsturen dan zul je dat, zoals al meerdere keren in dit topic aangegeven, middels javascript moeten doen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
TheRookie schreef op woensdag 02 augustus 2006 @ 14:40:
het foto-bewerkingsdeel zal natuurlijk eerst afgerond moeten zijn voordat je die meta tag print :)

als je 't quick-'n-dirty zou willen:
PHP:
1
2
3
echo "MOeder: ".$perc;
sleep(3); // oftewel 3 foto's bewerken
print("<meta http-equiv=\"refresh\" content=\"2;url=test.php?verwerken=true&id=$id&percentage=$perc\">");
Ah maar is het niet zo dat je nu maar even ziet op hoeveel procent alles is?
Ik ga maar even kijken hoe dat met javascript werkt.

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Nee, hij toont hoever hij was, voert fotobewerking uit, gaat naar nieuwe pagina en laat het % zien waar hij was na die batch van x foto's
Pagina: 1