Avatar billede wip13 Nybegynder
05. august 2004 - 16:20 Der er 12 kommentarer og
1 løsning

php download af fil

Jeg vil gerne kunne taste en adresse ind i et felt på min side (ie: http://www.dr.dk/etellerandetbillede.jpg) hvorefter php henter den fil ned på serveren og gemmer den som en fil.
Det eneste jeg mangler er det stykke kode som skal stå for nedhentning og gemning af filen. Hvad skal jeg der bruge?
Avatar billede detox Nybegynder
05. august 2004 - 16:26 #1
Mener du ikke 'hente ned til klienten'?
Avatar billede wip13 Nybegynder
05. august 2004 - 16:27 #2
nej, filen skal gemmes på serveren
Avatar billede detox Nybegynder
05. august 2004 - 16:53 #3
Du kunne fx lave linket sådan:

<?php
$url = 'http://www.dr.dk/etellerandetbillede.jpg';
$url = urlencode($url);
echo '<a href="test.php?url='.$url.'">Gem billede</a>';
?>
Avatar billede detox Nybegynder
05. august 2004 - 16:54 #4
test.php:

<?PHP
$filename = urldecode($_GET['url']);
$handle = fopen($filename, 'r');
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
$filename = 'billede.jpg';
touch($filename);
$handle = fopen($filename, 'w');
fwrite($handle, $contents);
fclose($handle);
echo "<img src='billede.jpg' alt='' />";
?>
Avatar billede detox Nybegynder
05. august 2004 - 16:58 #5
Lidt mere dynamisk, altså med samme filnavn som det hentede billede:

<?PHP
$filename = urldecode($_GET['url']);
$gemnavn = basename($filename);
$handle = fopen($filename, 'r');
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
touch($gemnavn);
$handle = fopen($gemnavn, 'w');
fwrite($handle, $contents);
fclose($handle);
echo "<img src='billede.jpg' alt='' />";
?>
Avatar billede detox Nybegynder
05. august 2004 - 17:24 #6
En anden mulighed er at bruge image funktioner:

$filename = urldecode($_GET['url']);
$gemnavn = basename($filename);
$im = imagecreatefromjpeg($filename);
touch($gemnavn);
imagejpeg($im, $gemnavn);
Avatar billede wip13 Nybegynder
05. august 2004 - 17:55 #7
Jeg kikker på det imorgen, men det ser da lovende ud, så smid et svar, så accepterer jeg sikkert i morgen
Avatar billede detox Nybegynder
05. august 2004 - 18:15 #8
Ok, det sidste eksempel virker udelukkende med billeder (nærmere bestemt JPG-filer).
Avatar billede wip13 Nybegynder
05. august 2004 - 20:00 #9
hmm...jeg har prøvet at lege lidt med det:

<?php
$filename = urldecode($_GET['http://www.dr.dk/nyheder/multimedia/archive/00090/Henrik_Flach_90077a.jpg']);
$gemnavn = "test2.jpg";
$im = imagecreatefromjpeg($filename);
touch($gemnavn);
imagejpeg($im, $gemnavn);
?>

men jeg får:
Warning: imagejpeg(): supplied argument is not a valid Image resource in /home/index.php on line 6


hvorfor gør den det?
Avatar billede detox Nybegynder
05. august 2004 - 20:11 #10
Fordi filen er lavet til at modtage urlen fra den anden side. Så det skal bare være:

<?php
$filename = 'http://www.dr.dk/nyheder/multimedia/archive/00090/Henrik_Flach_90077a.jpg';
$gemnavn = "test2.jpg";
$im = imagecreatefromjpeg($filename);
touch($gemnavn);
imagejpeg($im, $gemnavn);
?>
Avatar billede wip13 Nybegynder
05. august 2004 - 20:13 #11
nu virker det sq :D
....kan du forklare mig hvorfor man ikke skal bruge urldecode?
...og hvad gør touch()?
Avatar billede detox Nybegynder
05. august 2004 - 20:18 #12
urldecode() skal kun bruges når en variabel har været gennem urlencode(). Den er beregnet til at sende variabler via url (som i mit eksempel).
touch() laver en fil og er faktisk ikke nødvendig i dette eksempel, imagejpeg() selv laver filen.
Avatar billede wip13 Nybegynder
05. august 2004 - 20:19 #13
k
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester