[PHP] veel bestanden uploaden in één keer

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • LittleWan
  • Registratie: Februari 2003
  • Laatst online: 11-09 14:26
beste,

Ik ben bezig met een website in php en mysql waarbij ik graag grote hoeveelheden foto's wil uploaden. foto per foto is onmogelijk omdat de batch tot bijna 200 foto's kan gaan. Opsplitsen in kleinere delen zou een optie kunnen zijn, maar liever niet.

Momenteel doe ik het zo. Ik ga met FTP zelf mijn foto's uploaden. Daarna laat ik een php script los die de foto's in volgorde zet. Daarna de foto's leest, verschillende resoluties en thumbnails van maakt en ze in een andere directory opslaat. Daarna worden de gegevens in een mysql database geladen. Om te eindigen met het originele bestand te verwijderen.

Dit werkt redelijk, maar het script wordt altijd afgebroken door de timeout. Ik kan bij mijn host de timeout van mijn php niet aanpassen. Dus moet ik het script verschillende malen uitvoeren totdat alle bestanden bewerkt zijn en de originelen verwijderd zijn. Dit gaat zo lang door totdat er geen originelen meer zijn.

Weet iemand hoe ik dit het beste zou aanpakken om niet met de timeouts geconfronteerd te worden?

http://www.sillevl.be - blog http://www.sillevl.be/blog - flickr http://www.flickr.com/sillevl


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Alles in een keer blijft de timeout houden. Je ziet nogal eens wat java dingen bij sites waar je grote bestanden kan/moet uploaden. Hoe dat precies eruit ziet weet ik ook niet.

Ik ken verder de mogelijkheden van javascript niet goed genoeg, maar misschien kan je alleen een pad aangeven, waarna je met httprequest de foto's door een AJAX applicatie stuk voor stuk post naar de website?

Acties:
  • 0 Henk 'm!

  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Het HTTP protocol voorziet hierin gewoonweg niet, ook een batch draaien van honderden foto's met allemaal leuke gd lib functies duurt te lang. Voor zoiets moet je eigenlijk een eigen server hebben waar je alles kunt instellen en dan kun je bijvoorbeeld de boel kan uploaden via bijvoorbeeld een java appletje waarna je met php de thumbs kunt gaan maken b.v.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Met javascript redirecten naar dezelfde pagina na 5 minuten. Dan kom je om de timeout heen ( ok technisch niet, maar functioneel wel omdat het script toch om de 5 minuten opnieuw uitgevoerd wordt ).

Of gewoon een cli-php aanroepen vanaf je control panel, dan heb je bijna nooit een time-out.

Of gewoon crons aanmaken vanaf je control panel.

Het uploaden via ftp zie ik zo snel geen mogelijkheid omheen ( mede door de vermoedelijke grootte van de foto's ) 200 bestanden is op zich heel redelijk te zippen, dan naar de server te sturen en dan uitzippen. Maar ja als het over de 10 MB gaat zou ik het al niet meer op deze manier doen maar gewoon lekker via ftp.

Of een systeem wat ik ooit eens toegepast heb is gewoon aan de hand van de load bepalen of er tijdens 1 pageview 1 image omgezet kan worden. Voordeel hiervan is dat het het geen performance hit is op je server, het komt op een goedbezochte server vanzelf wel klaar, en de gebruiker vind elke pageview iets nieuws :)

Acties:
  • 0 Henk 'm!

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

Ik zou voor het uploaden een java applet gebruiken. Voor school hadden we eens een speciale week, toen kwamen er echt kweet-ik-veel hoeveel foto's binnen die zo snel mogelijk online moesten zijn. Wij deden dat toen ook met java. Mijn evaring is dat het is op de client wel een beetje traag is, maar het uploaden verder wel goed gaat.
Voor de tumbnails kan je doen wat Gomez12 zegt bijvoorbeeld.

Edit: Voor zo'n java ding kan je bijvoorbeeld bij hotscripts zoeken naar uploader :).

[ Voor 10% gewijzigd door ibmos2warp op 03-04-2007 23:03 ]

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


Acties:
  • 0 Henk 'm!

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 20-09 08:54

Jimbolino

troep.com

je kunt een php pagina maken die na elke foto refreshed (zichzelf opnieuw aanroept) totdat er geen foto's meer zijn.
Is iig het probleem van de timeout's opgelost...
(dan moet je nog wel je foto's uploaden via FTP)

ook zou je kunnen kijken of je de foto's in een grote zip file kunt doen en die op de server uit laten pakken... Als je die zip file in een keer kunt posten (afhankelijk van je php instellingen) is je probleem ook op te lossen...

[ Voor 48% gewijzigd door Jimbolino op 03-04-2007 23:08 ]

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Die java dingen hier genoemt connecten gewoon op een php pagina, met een upload, en doen het allemaal 1 voor 1.

Ofwel connecten ze gewoon op een ftp.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 08-07 14:27
Voor mijn werk hebben we het probleem omzeilt met een applet + server.

De applet verstuurd de bestanden naar de server welke ze dan in een tijdelijke directory zet, deze doet dan een post naar de http server met wat parameters waardoor het een gewone file upload lijkt.

Het was voornamelijk bedoeld om grotere bestanden te uploaden, maar het werkt ook prima voor grote hoeveelheden foto's

Connecten naar een ftp vanuit een applet is geen goed idee, aangezien een applet zonder problemen gedecompiled kan worden en dan hebben mensen gewoon toegang tot je ftp.

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


Acties:
  • 0 Henk 'm!

Verwijderd

Dit zou je met een webdav phpwrapper wel kunnen oplossen. Webdav is wat meer geschikt voor file transfers.

http://freshmeat.net/projects/class_webdav_client/

Acties:
  • 0 Henk 'm!

  • Kokkers
  • Registratie: Oktober 2000
  • Laatst online: 19-09 14:36
Blijf je met een standaard webbased oplossing niet altijd met het probleem zitten dat je aan de clientkant m.b.v. een HTML form altijd maar 1 foto tegelijk kan uploaden?

[Sideinfo]
In Wordpress kun je gebruik maken van de standaard ingebouwde 'Web publishing wizard' van Windows XP. Hier kun je met het laden van een enkele .REG file een custom Web publishing target aanmaken naar je eigen server.

/edit 'Lazyest gallery' heet de WP plugin als je wil kijken hoe dit werkt.

Via Windows Explorer kun je dan heel eenvoudig een batch foto's uploaden. Hoe je het verder aan de serverkant afhandeld is aan jou.

[ Voor 10% gewijzigd door Kokkers op 04-04-2007 10:23 ]


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

Ik heb het zo opgelost dat ik via CGI een zip bestand kan laten uploaden. Dit pak ik dan dmv PHP uit en verwerk ik ook via PHP. Je kunt dan zelfs progressbars enzo tonen. Google maar eens op "PHP CGI upload" => http://www.raditha.com/megaupload/upload.php

Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Toch grappig om te zien dat het probleem vooral gaat over het verwerken van een grote batch op de server, terwijl veel oplossingen gaan over hoe veel foto's ge-upload kunnen worden.

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

Janoz schreef op woensdag 04 april 2007 @ 14:44:
Toch grappig om te zien dat het probleem vooral gaat over het verwerken van een grote batch op de server, terwijl veel oplossingen gaan over hoe veel foto's ge-upload kunnen worden.
hey daar zit wel wat in ;)

ff samengevat: het gaat dus om een verwerking van veel data op de server. de bestanden zijn daarvoor al geupload.

oplossing zou zijn om bijvoorbeeld een cgi oid te starten vanuit dat script die lekker op de achtergrond alles gaat verwerken terwijl de gebruiker al een pagina krijgt die aangeeft dat de gegevens verwerkt worden. en dan bijvoorbeeld de webpagina met een automatische refresh laten pollen of hij al klaar is met verwerken.

[ Voor 0% gewijzigd door Verwijderd op 04-04-2007 15:10 . Reden: ik kan niet tiepun ]


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

@Janos, hehe vreemd hoe je je alleen op een titel blind staard ;)

@TS: Je zou het ook als volgt kunnen doen; Upload de files zoals gewoonlijk. Maak geen thumbnails aan, maar enkel de grote versies. Vervolgens laad je de plaatjes in, via een PHP script. Dit script streamt de thumbnail terug als deze al bestaat, en zo niet maakt hij de thumbnail aan.

Als het verwerken van grote files ook niet gaat, zou je alle files, nadat je ze hebt geupload in een soort tijdelijke tabel kunnen zetten. Hier laat je dan een script overheen lopen;
PHP:
1
2
3
4
5
6
<?php
// .. haal eerste 10 files uit tabel op
// ..verwerk x files ..
// .. verwijder deze files uit de tabel
// .. redirect naar jezelf, evt. door headers of door een javascript redirect
?>


Zo zou alles goed moeten gaan, althans zo deed ik het vroeger altijd.

Acties:
  • 0 Henk 'm!

  • Twilight
  • Registratie: December 2000
  • Laatst online: 19-08 11:49
Ik heb het opgelost door lokaal een php client te installeren die bij het inpluggen van je camera de foto's automatisch upload en daarna een url aanroept die e.e.a. resized.

www.nanon.nl


Acties:
  • 0 Henk 'm!

  • LittleWan
  • Registratie: Februari 2003
  • Laatst online: 11-09 14:26
hoi,

Iedereen bedankt voor de uitgebreide uitleg. De ééne manier past me beter als de andere.
Voorlopig heb ik het zo opgelost dat ik bestanden per 30 verwerk, en daarna met een url de volgende 30 doe, dit in een lus totdat alle bestanden verwerkt zijn.

Momenteel moet ik na elke 30 zelf op een url klikken om het zelf terug in gang te zetten voor de volgende. Ik heb geprobeerd om het met een header te doen, maar ik moet te veel foefelen.

Ik heb het gevonden met hoe ik het een javascript moet oplossen en het werkt dus goed naar mijn idee. Het is enkel gebruikt in een backend, maar werkt zeer goed !

bedankt iedereen !

[ Voor 13% gewijzigd door LittleWan op 04-04-2007 22:27 ]

http://www.sillevl.be - blog http://www.sillevl.be/blog - flickr http://www.flickr.com/sillevl


Acties:
  • 0 Henk 'm!

  • xces
  • Registratie: Juli 2001
  • Laatst online: 20-09 16:56

xces

To got or not to got..

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    /**
     * Redirection to another URL
     */
    function redirectTo($strURL)    {
        //
        // Write session variables to be sure
        if (session_id() != "") {
            session_write_close();
        }

        //
        // Perform redirect
        if (!headers_sent()) {
            header("Location: ".$strURL);
            header("Connection: close");
        } else {
            echo '<img src="/_/img/blank.gif" alt="" onload="top.location.href=\''.addslashes($strURL).'\'; this.parentNode.removeChild(this);" />';
        }
        die();
    }


voila, code gedeeltelijk gebaseerd op iets wat ik zelf gebruik. Je moet er wel voor zorgen dat het plaatje bestaat, dan heb je een universele redirect.

p.s. ik heb ergens gelezen dat de url ($strURL) in geval van de headers methode, wel volledig http://.../ moet zijn, anders is het niet volgens de HTTP/1.x specs.

[ Voor 11% gewijzigd door xces op 04-04-2007 22:35 ]

Pagina: 1