[php] Bestand openen dat net is geschreven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Ik heb een probleem met een script dat een bestand probeert te lezen dat zojuist naar bestand is geschreven.

Het bestand wordt wel degelijk geschreven, want als je het script herlaadt werkt het wel.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        // see if image already exists
        if (file_exists($source_dir . 'cache/' . $input))
        {
                readfile($source_dir . 'cache/' . $input); 
        }
        else
        {
                // load image data
                // bouw hier het plaatje op
                
                // save & output
                imagepng($image, $source_dir . 'cache/' . $input);
                readfile($source_dir . 'cache/' . $input);
        }


Zoals je hier ziet wordt het bestand naar een cachedir geschreven. Wanneer het bestand bestaat werkt het script gewoon. Wanneer het bestand niet bestaat wordt het netjes aangemaakt, alleen dan geeft readfile een error dat het bestand niet bestaat.

Wat doe ik hier in godsnaam fout. Het bestand wordt gewoon aangemaakt, dus ik zou het gewoon moeten kunnen openen.

Ik ontken het bestaan van IE.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Is dit daadwerkelijk al je code of heb je er dingen tussen uit gehaald?

Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Depress schreef op maandag 12 februari 2007 @ 20:02:
Is dit daadwerkelijk al je code of heb je er dingen tussen uit gehaald?
De code die $image vult met het plaatje heb ik ertussenuit gehaald. Deze code is niet het probleem, omdat het plaatje correct opgebouwd wordt en in de cache geschreven :) .

Dit zie je dan ook wanneer je het script herlaad, het plaatje wordt dan direct door readfile geopend en uitgeschreven. Het gaat fout wanneer het plaatje wordt geladen direct nadat het gegenereerd is.

Ik ontken het bestaan van IE.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Het kan zijn dat de image word aangemaakt in een andere thread omdat deze vertraging kan oplopen. En dat de file dan nog niet beschikbaar is omdat er in geschreven word.

Is een wilde gok.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Depress schreef op maandag 12 februari 2007 @ 22:11:
Het kan zijn dat de image word aangemaakt in een andere thread omdat deze vertraging kan oplopen. En dat de file dan nog niet beschikbaar is omdat er in geschreven word.

Is een wilde gok.
zit ik ook aan te denken, echter dan zouden er veel meer mensen last van moeten hebben. je bent vast niet de eerste die zoiets probeerd.

ik zat zelf te zoeken naar ene soort van flush() voor I/O operaties maar kon zo 123 niets vinden.

ah na een paar minuten zoeken:

PHP:
1
2
3
4
ob_start();
imagepng($image);  //plaatje maken
$input = ob_get_contents();  //plaatje in string duwen
ob_end_clean();

hiermee kan je je 'cache' mapje overslaan

[ Voor 17% gewijzigd door BasieP op 12-02-2007 22:21 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • DexterDee
  • Registratie: November 2004
  • Laatst online: 13:59

DexterDee

I doubt, therefore I might be

Als je nu eens in plaats van dat plaatje opnieuw in te lezen van disk, het plaatje in het geheugen dumpt naar de standaard output?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        // see if image already exists
        if (file_exists($source_dir . 'cache/' . $input))
        {
                readfile($source_dir . 'cache/' . $input); 
        }
        else
        {
                // load image data
                // bouw hier het plaatje op
                
                // save & output
                imagepng($image, $source_dir . 'cache/' . $input);
                imagepng($image);  // dump plaatje naar standaard output
        }

Lijkt me gezien je code de simpelste oplossing :)

Klik hier om mij een DM te sturen • 3245 WP op ZW


Acties:
  • 0 Henk 'm!

  • cyberstalker
  • Registratie: September 2005
  • Niet online

cyberstalker

Eersteklas beunhaas

Topicstarter
Het probleem is opgelost. Het probleem was dat er bij het genereren van de plaatjes warnings werden gegenereerd (die ik niet zag met content-type: image/png). Daardoor was het plaatje niet te bekijken. De fouten werden echter niet in het bestand opgeslagen, dus dat werkte wel.

Bedankt voor jullie hulp allemaal :) .

Ik ontken het bestaan van IE.

Pagina: 1