02. august 2008 - 18:01Der er
11 kommentarer og 1 løsning
Maksimal udførelse på 30 sek.
Hej.
Jeg har lige lavet et galleri, hvor jeg bare kan oprette en mappe på min server og smide billederne op, så vises de automatisk på siden. Når man går ind på siden, generes der et thumbnail, som uploades til serveren og det vil derefter blive vist i stedet for billedet i fuldstørrelse.
Jeg har uploadet godt og vel 160 billeder, men når jeg går ind på siden laver den ikke thumbnails af alle billederne. Næsten alle, men der mangler cirka en 20 - 30 stykker.
Derimod kommer den med følgende besked:
Fatal error: Maximum execution time of 30 seconds exceeded in /hsphere/local/home/snuzzer/snuzzer.dk/voresliv/thumbnail.php on line 7
thumbnail.php - som inkluderes i toppen af index.php: ------------------------------------------------------- function make_thumbnail($filename, $gallerydir) { $size = getimagesize("galleri/".$gallerydir."/".$filename);
Jeg har søgt lidt nærmere, og fundet ud af, at det har noget med max_execution_time() at gøre. På mit webhotel, Surftown, er den sat til 30 sek. og kan ikke ændres med set_time_limit(), da "safe mode" er slået til i php.ini.
Kan jeg på nogen måde ændre scriptet, så jeg kan udskrive alle billederne? Evt. bruge noget sideskift uden at skulle involvere en MySQL-database?
Jeg ved ikke om det hjælper at bruge glob() i stedet for dir() og om det kan gøre noget ved hastigheden, men du kan evt. lave et array over alle billederne der skal laves thumbnails af.
Derfra kan du egentlig gøre mange forskellige ting :).
- Lave noget ajax, som kalder en side der laver f.eks. 10 thumbnails pr. gang og automatisk reloader, så længe der er billeder i arrayet. - Ovenstående kan også laves med en almindelig POST til en side, som tager 10 billeder, laver thumbnails, fjerne de 10 billeder fra arrayet og POST'er det igen.
Du har et check i din kode sørger for ikke at lave thumbnails af samme billede flere gange, så du kan i teorien sagtens blive ved med at poste til samme fil.
Hvad hvis du laver en counter så kun løber 10 igennem inden du kalder samme side igen? Noget i form a:
Ovenstående bør måske lige skrive noget på skærmen, så man kan se hvor langt programmet er nået. I så tilfælde skal du ændre dit header()-kald til noget javascript som genindlæser siden.
Wups... du bliver nødt til at bruge følgende i stedet for: index.php: ------------------------------------------------------- [code] include("thumbnail.php");
Du kunne lave caching. Dvs., at den først tjekker om der allerede eksisterer en thumbnail er billedet. Dvs. når du går ind på siden første gang, så vil den forsøge at lave thumbnails for alle billederne (og gemmer billederne i en mappe). Du vil sikkert også få den der fejl først gang så, men næste gang skal den ikke lave thumbnail for alle billederne, men kun de resterende.
Næste gang du smider billeder op, så vil der ligeledes blive lavet thumbnails første gang du går ind på siden, men ikke de efterfølgende gange. Det vil spare dig for rigtig mange ressourcer og siden vil blive meget hurtigere til at indlæse.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.