[PHP] zipped jpg van binary-tekst, naar op te slaan bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Topicstarter
Ik heb het volgende script (de library die dit script gebruikt post ik er (nog) niet bij):

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$zip = m_zip_open("sampleFile.zip");

if ($zip) {
    while ($zip_entry = m_zip_read($zip)) {
        if (m_zip_entry_open($zip, $zip_entry, "r")) {
            $buf = m_zip_entry_read($zip_entry, m_zip_entry_filesize($zip_entry));
              header("Content-type: image/pjpeg");   
              echo $buf; 
            m_zip_entry_close($zip_entry);
        }


    }
    m_zip_close($zip);

} else echo('Cannot open zip file / file not found or unzip command not available');


Dit script pakt een jpg-plaatje uit een zip bestand, welke 1 plaatje bevat en laat het zien op het scherm in IE.
$buf bevat de binary tekst van het JPG plaatje.
Dit werkt perfect.


Nu heb ik twee vragen:

1. Hoe is het mogelijk om dit plaatje op te slaan (uploaden)? Dus van Binary-tekst,
naar .jpg bestand in directory?

2. Hoe is het mogelijk, dat als de zipfile meerdere jpg-bestanden bevat, deze
ondermekaar te laten zien, of deze apart op te slaan (zie vraag 1)?
Als er nu meerdere jpg-bestanden in de zipfile staan, laat IE alleen maar de
laatste zien.

(keywords: zip,ingepakt,binary,jpg,opslaan)

Acties:
  • 0 Henk 'm!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 15-09 18:24

dusty

Celebrate Life!

1.
Open file.
schrijf binary-stream naar file
Sluit file.

2.
Op deze manier niet. Output een image tag met de source naar de opgeslagen bestand, waardoor er dus verschillende plaatjes kan laten zien. Als je namelijk header("content-type: image/pjpeg") gebruikt betekent dat er EEN plaatje komt. En kan je dus ook maar een plaatje laten zien.( Eigenschap van HTTP-images )

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Topicstarter
Ok...
Na een beetje proberen ben ik er achtergekomen dat dit zipscript ook daadwerkelijk de files uitpakt in een aangegeven directory wat ook de bedoeling was, maar alleen maar als er 3 of meer foto's in de zipfile staan.

Als er 2 of minder foto's in de zip file staan dan doet het script niets en staat er niets in de aangegeven dir.
Pas als je heel even F5 vasthoudt, met het PHP bestand, dan komt er iets in de directory te staan, maar dan ook wel vier keer, omdat het script zo vaak gereload is.

Is dit vaag of is er een reden voor BV: de server wil het script sneller uitvoeren dan dat het script eigenlijk nodig heeft, oid.
En klopt het ook dat er een map aangemaakt wordt in de aangegeven uitpak dir met ongeveer deze naam: Z71085099934660907zip_file.zip
Zou dit een sessie zijn oid.? want hoe wil ik weten welke map ik nou moet hebben, om de net uitgepakte foto's te krijgen?


Wat ik namelijk wil maken is een systeempje wat het mogelijk maakt in een keer veel foto's te uploaden en dat deze, wanneer ze in de 'temp' dir staan, behandeld worden (resizen ofzo) en dan ergens anders worden opgeslagen en dat de 'temp' dir weer leeggehaald wordt.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
intermusic schreef op 08 maart 2004 @ 23:40:
Ok...
Na een beetje proberen ben ik er achtergekomen dat dit zipscript ook daadwerkelijk de files uitpakt in een aangegeven directory wat ook de bedoeling was, maar alleen maar als er 3 of meer foto's in de zipfile staan.

Als er 2 of minder foto's in de zip file staan dan doet het script niets en staat er niets in de aangegeven dir.
Pas als je heel even F5 vasthoudt, met het PHP bestand, dan komt er iets in de directory te staan, maar dan ook wel vier keer, omdat het script zo vaak gereload is.

Is dit vaag of is er een reden voor BV: de server wil het script sneller uitvoeren dan dat het script eigenlijk nodig heeft, oid.
Zie script.

Het staat niet aangegeven in de code die gepost is dus kan niemand je aan de hand van de geposte code helpen.
intermusic schreef op 08 maart 2004 @ 23:40:
En klopt het ook dat er een map aangemaakt wordt in de aangegeven uitpak dir met ongeveer deze naam: Z71085099934660907zip_file.zip
Zou dit een sessie zijn oid.? want hoe wil ik weten welke map ik nou moet hebben, om de net uitgepakte foto's te krijgen?
Wederom zie script.
intermusic schreef op 08 maart 2004 @ 23:40:
Wat ik namelijk wil maken is een systeempje wat het mogelijk maakt in een keer veel foto's te uploaden en dat deze, wanneer ze in de 'temp' dir staan, behandeld worden (resizen ofzo) en dan ergens anders worden opgeslagen en dat de 'temp' dir weer leeggehaald wordt.
Enigste probleem is dan toch dat je meerdere files tegelijk moet uploaden??? Als je kan resizen dan moet dat toch ook lukken in een andere dir (vb tmp-dir) En leeghalen is over het algemeen ook niet echt een probleem als je ze er al opgekregen hebt.

Hint zie php.net over gd-library en file handling

Acties:
  • 0 Henk 'm!

  • intermusic
  • Registratie: September 2002
  • Laatst online: 25-03 14:05

intermusic

Marc Hoekstra

Topicstarter
intermusic schreef op 08 maart 2004 @ 23:40:
Als er 2 of minder foto's in de zip file staan dan doet het script niets en staat er niets in de aangegeven dir.
Pas als je heel even F5 vasthoudt, met het PHP bestand, dan komt er iets in de directory te staan, maar dan ook wel vier keer, omdat het script zo vaak gereload is.

Is dit vaag of is er een reden voor BV: de server wil het script sneller uitvoeren dan dat het script eigenlijk nodig heeft, oid.
Ik heb het inmiddels gevonden.
Er zat een fout in het script wat betreft het afsluiten of openen van een map.
Pas nadat je F5 had gedaan kreeg het script toegang tot een map waar de plaatjes in moesten komen te staan.


Nu heb ik dus een script die gewoon in één keer alle plaatjes uit een zipbestand uitpakt naar map met als naam de sessie-id (vanwegen eventuele meerdere mensen die op hetzelfde moment bezig zijn) in de 'temp' map.

Echt een grandioos script.
Als iemand er belang bij heeft kan je mij een mailtje sturen.