/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Billedarkiv med login
Fra : Anders Lund


Dato : 22-08-04 20:57

Hej

Jeg har en hjemmeside hvor der er en masse billeder. Jeg har lavet et
system, hvor disse billeder ikke kan tilgåes udefra, uden at logge ind.
Dette gøres ved at billederne er placeret uden for webroden og bliver
hentet hentet med PHP, hvis brugeren er logget ind.

Jeg kalder billderne på denne måde:

<img src="billed.php?path=2003/billed1.jpg">

billed.php laver blandt andet kontrol af brugeren og hente billederne
frem til browseren. Billederne hentes og sendes på denne måde:

header("Content-Type: image/jpeg");
header("Content-Length: " . filesize($filename));
readfile($filename);

Problemet er bare at dette tager en del processorkraft og derved tid at
hente frem på denne måde. Jeg har testet med at fjerne alt andet i
billed.php, så det er dette stykke som tager det meste af tiden.

Er der en hurtigere måde at gøre det på?

Eller er der en måde jeg kan få PHPen til at fortælle hvilke brugere som
er godkendte til Apache serveren, så serveren kan servere billederne
direkte uden om PHPen?

--
Anders Lund - anders@andersonline.dk

 
 
Anders Lund (22-08-2004)
Kommentar
Fra : Anders Lund


Dato : 22-08-04 21:01

Anders Lund wrote:

> Problemet er bare at dette tager en del processorkraft og derved tid at
> hente frem på denne måde. Jeg har testet med at fjerne alt andet i
> billed.php, så det er dette stykke som tager det meste af tiden.

Det skal siges at problemet er størsts/mest irreterende, når man henter
en oversigt med fx 20 thumbnails. Andre brugere "går i stå" imens
billederne hentes frem til den ene bruger.

Jeg har også testet min server op imod rene <img src="billed1.jpg"> tags
- altså helt uden PHP kode og her går det stærkt nok.

--
Anders Lund - anders@andersonline.dk

Anders Thorsen Holm (22-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 22-08-04 21:04

Hej navnebror!

Anders Lund <anders@andersonline.dk> wrote:

> header("Content-Type: image/jpeg");
> header("Content-Length: " . filesize($filename));
> readfile($filename);
[snip]
> Er der en hurtigere måde at gøre det på?

Jeg ved ikke, om det er hurtigere - måske er det ligefrem mere
ressourcekrævende - men følgende har fungeret udmærket for mig:

header("Content-type: image/jpeg");
$source = imagecreatefromjpeg($file);
imagejpeg($source);
imagedestroy($source);

Hvad siger I andre?

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Peter Brodersen (22-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 22-08-04 21:27

On 22 Aug 2004 20:04:21 GMT, Anders Thorsen Holm
<usenet@thorsenholm.invalid> wrote:

>header("Content-type: image/jpeg");
>$source = imagecreatefromjpeg($file);
>imagejpeg($source);
>imagedestroy($source);
>
>Hvad siger I andre?

readfile() er klart mindst ressourcekrævende (og jeg bruger det selv
til at spytte filer mellem 10 og 50 MB afsted). imagecreatefromjpeg
kræver en instans af billedet i hukommelsen, sandsynligvis i
ukomprimeret udgave.

Jeg oplever ikke det problem, Anders lader til at opleve.
--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'

Anders Thorsen Holm (22-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 22-08-04 21:33

Peter Brodersen <usenet@ter.dk> wrote:

> readfile() er klart mindst ressourcekrævende (og jeg bruger det selv
> til at spytte filer mellem 10 og 50 MB afsted).

Det anede mig. Jeg har først for nyligt givet mig i kast med
billedgenerering via PHP og GD, så jeg lærer hele tiden noget nyt.

> imagecreatefromjpeg kræver en instans af billedet i hukommelsen,
> sandsynligvis i ukomprimeret udgave.

Forstår jeg det korrekt, når imagecreatefromjpeg er tiltænkt on-the-
fly-generering af eksempelvis thumbnails ud fra eksisterende billeder?

> Jeg oplever ikke det problem, Anders lader til at opleve.

Ja, jeg må melde pas angående den problematik

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Peter Brodersen (22-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 22-08-04 21:47

On 22 Aug 2004 20:33:05 GMT, Anders Thorsen Holm
<usenet@thorsenholm.invalid> wrote:

>> imagecreatefromjpeg kræver en instans af billedet i hukommelsen,
>> sandsynligvis i ukomprimeret udgave.
>Forstår jeg det korrekt, når imagecreatefromjpeg er tiltænkt on-the-
>fly-generering af eksempelvis thumbnails ud fra eksisterende billeder?

Ja, præcis. Billedet indlæses med alle GDs muligheder for
efterfølgende manipulation af samme.

Da billedet først skal "udpakkes", vil det komme til at optage den rå
størrelse i hukommelsen (så et billede på fx 1600x1200 i 24bit farver
vil optage knap 6MB).

Ikke at det behøver at være et problem, men hvis man jonglerer med
flere billeder i samme php-script, kan man risikere at støde på phps
memory_limit. Heller ikke det behøver at være et problem, hvis man har
mulighed for at justere på hukommelsesforbruget.

--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'

Anders Thorsen Holm (22-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 22-08-04 21:52

Peter Brodersen <usenet@ter.dk> wrote:

> Ikke at det behøver at være et problem, men hvis man jonglerer med
> flere billeder i samme php-script, kan man risikere at støde på
> phps memory_limit. Heller ikke det behøver at være et problem,
> hvis man har mulighed for at justere på hukommelsesforbruget.

Jeg formoder, man altid bør benytte imagedestroy() for at undgå
slige situationer? Selvom man selvfølgelig ikke kan frigøre
hukommelsen, førend man er *helt* færdig med det givne billede.

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Anders Lund (22-08-2004)
Kommentar
Fra : Anders Lund


Dato : 22-08-04 23:03

Peter Brodersen wrote:

> readfile() er klart mindst ressourcekrævende (og jeg bruger det selv
> til at spytte filer mellem 10 og 50 MB afsted).

Det der giver det største problem er også selve håndteringen af filerne.
Når det er større (enkelte) billeder, bliver de smidt afsted med en
lille forsinkelse, men ellers i samme fart som et almindelige billed.

> Jeg oplever ikke det problem, Anders lader til at opleve.

Jeg har lavet en lille testside hvor i andre kan teste det. Der er 2
links, den med ren HTML og den med PHP indblandet. Det er PHPen som er
den langsomme. Jeg har desuden lavet 8 kopier, så i ikke behøver at
tømme jeres browsers cache hvis i vil teste mere end en gang. :)

http://andersonline.dk/test/

--
Anders Lund - anders@andersonline.dk

Peter Brodersen (23-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 23-08-04 00:58

On Mon, 23 Aug 2004 00:03:27 +0200, Anders Lund
<anders@andersonline.dk> wrote:

>Jeg har lavet en lille testside hvor i andre kan teste det. Der er 2
>links, den med ren HTML og den med PHP indblandet. Det er PHPen som er
>den langsomme. Jeg har desuden lavet 8 kopier, så i ikke behøver at
>tømme jeres browsers cache hvis i vil teste mere end en gang. :)
>
>http://andersonline.dk/test/

Yep, jeg kan se problemet. Kører PHP som CGI eller som Apache-modul?
Et bud ville være, at den skulle afvikle php-processen hver enkelt
gang, hvis den kørte som CGI, hvilket kan give lidt overhead.

Hvis man alligevel bruger Apache, så kan man også tilsvarende lige så
godt køre PHP som modul. Det er mit bedste råd. Apache vil så have
childs ventede, der på forhånd rummer php.

--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'

Anders Lund (23-08-2004)
Kommentar
Fra : Anders Lund


Dato : 23-08-04 10:09

Peter Brodersen wrote:

> Yep, jeg kan se problemet. Kører PHP som CGI eller som Apache-modul?
> Et bud ville være, at den skulle afvikle php-processen hver enkelt
> gang, hvis den kørte som CGI, hvilket kan give lidt overhead.

Det har du jo ret i. Det vil jeg lige prøve at ekspermentere meed.

Tak for tippet, du er bare alletiders! :D

--
Anders Lund - anders@andersonline.dk

Peter Brodersen (22-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 22-08-04 21:29

On Sun, 22 Aug 2004 21:57:20 +0200, Anders Lund
<anders@andersonline.dk> wrote:

> header("Content-Type: image/jpeg");
> header("Content-Length: " . filesize($filename));
> readfile($filename);
>
>Problemet er bare at dette tager en del processorkraft og derved tid at
>hente frem på denne måde. Jeg har testet med at fjerne alt andet i
>billed.php, så det er dette stykke som tager det meste af tiden.

Du fortæller ikke helt klart, hvordan $_REQUEST['path'] bliver til
$filename - og hvad $filename for eksempel indeholder.

Kan det tænkes, at der er tale om en hel URL, og både readfile() og
filesize() derfor først skal hente filen over HTTP?

Giv et eksempel på hvad $filename indeholder.

--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'

Anders Thorsen Holm (22-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 22-08-04 21:58

Peter Brodersen <usenet@ter.dk> wrote:

> Kan det tænkes, at der er tale om en hel URL, og både readfile()
> og filesize() derfor først skal hente filen over HTTP?

Jeg tror ikke, det er tilfældet, jvf.:

Anders Lund <anders@andersonline.dk> wrote:
>> Dette gøres ved at billederne er placeret uden for webroden og
>> bliver hentet hentet med PHP, hvis brugeren er logget ind.

Filerne kan vel ikke tilgås via HTTP, hvis de ligger uden for webregi?
Eller overser jeg noget?

På forhånd undskyld mine Spørge-Jørgen-tendenser

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Anders Lund (22-08-2004)
Kommentar
Fra : Anders Lund


Dato : 22-08-04 22:59

Anders Thorsen Holm wrote:

> Filerne kan vel ikke tilgås via HTTP, hvis de ligger uden for webregi?
> Eller overser jeg noget?

Nej, det er korrekt, det er lokale filer.

--
Anders Lund - anders@andersonline.dk

Peter Brodersen (23-08-2004)
Kommentar
Fra : Peter Brodersen


Dato : 23-08-04 00:55

On 22 Aug 2004 20:57:38 GMT, Anders Thorsen Holm
<usenet@thorsenholm.invalid> wrote:

>Jeg tror ikke, det er tilfældet, jvf.:
>
>>> Dette gøres ved at billederne er placeret uden for webroden og
>>> bliver hentet hentet med PHP, hvis brugeren er logget ind.
>
>Filerne kan vel ikke tilgås via HTTP, hvis de ligger uden for webregi?
>Eller overser jeg noget?

Nej, jeg antager blot, før jeg læser. Beklager midlertidigt at have
afsporet diskussionen :)

--
- Peter Brodersen
php -r 'print floor(8.2-0.2);'
perl -le 'print 5-4.9;'

Anders Thorsen Holm (23-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 23-08-04 01:13

Peter Brodersen <usenet@ter.dk> wrote:

> Nej, jeg antager blot, før jeg læser. Beklager midlertidigt at
> have afsporet diskussionen :)

Helt i orden. Jeg har gjort mig skyldig i samme mere end een gang denne
weekend ^_^'

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Anders Thorsen Holm (23-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 23-08-04 01:21

Peter Brodersen <usenet@ter.dk> wrote:

> php -r 'print floor(8.2-0.2);'

7

LOL! Hvad hulen går der galt i den udregning?

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Anders Thorsen Holm (23-08-2004)
Kommentar
Fra : Anders Thorsen Holm


Dato : 23-08-04 01:26

Anders Thorsen Holm <usenet@thorsenholm.invalid> wrote:

>> php -r 'print floor(8.2-0.2);'
>
> 7
>
> LOL! Hvad hulen går der galt i den udregning?

Welcome to the world of floating points....

--
Anders Thorsen Holm, BSc i datalogi-multimedier.

Jeg søger fuldtidsjob i eller nær Århus - gerne studierelevant,
men ingen betingelse. Læs mit CV: http://www.thorsenholm.dk/cv/

Jacob Atzen (22-08-2004)
Kommentar
Fra : Jacob Atzen


Dato : 22-08-04 21:53

Anders Lund <anders@andersonline.dk> writes:

> Jeg har en hjemmeside hvor der er en masse billeder. Jeg har lavet
> et system, hvor disse billeder ikke kan tilgåes udefra, uden at
> logge ind. Dette gøres ved at billederne er placeret uden for
> webroden og bliver hentet hentet med PHP, hvis brugeren er logget
> ind.

Du kan alternativt opnå dette igennem Apaches egen autoriserings
mekanisme. Det kræver at du har adgang til at konfigurere Apache eller
i det mindste har rettigheder til at oprette en .htaccess fil.

--
Med venlig hilsen
- Jacob Atzen

Anders Lund (22-08-2004)
Kommentar
Fra : Anders Lund


Dato : 22-08-04 23:11

Jacob Atzen wrote:

> Du kan alternativt opnå dette igennem Apaches egen autoriserings
> mekanisme. Det kræver at du har adgang til at konfigurere Apache eller
> i det mindste har rettigheder til at oprette en .htaccess fil.

Det er helt min egen server, så jeg kan gøre hvad jeg vil. :)

Jeg har kigget på .htaccess filer og den kan faktisk bruges. Problemet
er bare at min hjemmeside er bygget op om PHP administration og derfor
gerne vil fortsætte der.

Men jeg får en tanke - jeg kan vel lade min PHP administration skrive
til .htaccessfilerne. Så kan brugeren få logindskærmen fra Apache
serveren... kan PHP så opfange bruger og adgangskoden med
http://www.php.net/manual/en/features.http-auth.php?

Altså, jeg har en forside med en "logind" knap, som henviser til
/beskyttet/index.php. Her vil Apache så læse .htaccessfilen og bede om
user/pass, før jeg kan læse index.php. Kan index.php så opfange bruger
og andgangskode, som Apache serveren modtager fra brugeren?

--
Anders Lund - anders@andersonline.dk

Jacob Atzen (23-08-2004)
Kommentar
Fra : Jacob Atzen


Dato : 23-08-04 10:56

Anders Lund <anders@andersonline.dk> writes:

> Men jeg får en tanke - jeg kan vel lade min PHP administration skrive
> til .htaccessfilerne. Så kan brugeren få logindskærmen fra Apache
> serveren... kan PHP så opfange bruger og adgangskoden med
> http://www.php.net/manual/en/features.http-auth.php?
>
> Altså, jeg har en forside med en "logind" knap, som henviser til
> /beskyttet/index.php. Her vil Apache så læse .htaccessfilen og bede om
> user/pass, før jeg kan læse index.php. Kan index.php så opfange bruger
> og andgangskode, som Apache serveren modtager fra brugeren?

Ja, på den side du refererer til står der, hvordan du fra PHP læser det
brugernavn og kodeord som Apache modtager.

--
Med venlig hilsen
- Jacob Atzen

Anders Lund (23-08-2004)
Kommentar
Fra : Anders Lund


Dato : 23-08-04 11:20

Jacob Atzen wrote:

> Ja, på den side du refererer til står der, hvordan du fra PHP læser det
> brugernavn og kodeord som Apache modtager.

Det bliver nok løsningen sammen med at jeg flytter min PHP fra at kører
som CGI til modul. Så får jeg sikkert verdens hurtigeste webserver! :)

--
Anders Lund - anders@andersonline.dk

Anders K. Madsen (23-08-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 23-08-04 01:47



Anders K. Madsen (23-08-2004)
Kommentar
Fra : Anders K. Madsen


Dato : 23-08-04 02:02



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste