Avatar billede tefcke Nybegynder
13. maj 2002 - 00:32 Der er 7 kommentarer og
1 løsning

At få PHP til at downloade en billed!

Nu har jeg sidet et stykke tid og puslet med et script, som skal kunne downloade(gemme) et billed fra en given URL.

Tanken er at man via en input boks skriver den komplette url til billede-filen, og den skal så gemmes i et spicifikt katalog på webserveren.

Jeg har prøvet med de fleste funktioner der omhandler filsystemer, men der er sgu ikke rigtig noget som har virket.

Jeg har fået oprettet en fil, omdøbt den, åbnet den, smidt dataen fra billedet ind i filen, og lukket filen igen. Men resultatet er ikke en valid billed-fil.

Her er koden til den funktion jeg brugte.
<SNIP>
$url = "http://path.to/image.jpg";
$filename = "image.jpg";
$temp = tempnam("/", "");
if (!copy($temp, $filename)) {
    print("failed to create $filename...<br>");
}

if (file_exists($filename)) {
    $fp = fopen($filename, "w+"); // Har pgså prøvet binary safe!
  $img_as_str = implode("", file($url));
  fwrite ($fp, $img_as_str);
  fclose($fp);
} else {
    print "<p>File dosen't exist: $filename";
}
</SNIP>
Avatar billede Noone Nybegynder
13. maj 2002 - 01:25 #1
Hmmm.... Læs filen med file(), skrive det til en fil med fwrite() i et foreach loop.
Avatar billede tefcke Nybegynder
13. maj 2002 - 01:30 #2
Sker allerede ;) -> $img_as_str = implode("", file($url));

og -> fwrite ($fp, $img_as_str);
Avatar billede Noone Nybegynder
13. maj 2002 - 01:53 #3
Nej.... Implode mener jeg ikke skriver linie skiftene med...

Hmmm.. Jeg har faktisk et kode eksempel...

Hmmm.. Ok, jeg bruger en lidt anden metode...

  15    $url = str_replace("mrfunny.yi.org","localhost",$url);
  16    $tmpimg = "/tmp/image";
  17    @unlink($tmpimg);
  18    $urlimg = fopen($url,"r");
  19    $serverImg = fread($urlimg, 10000000);
  20    fclose($urlimg);
  21    $si = fopen($tmpimg, "w+b");
  22    fwrite($si, $serverImg);
  23      fclose($si);

Tallene er linie nummre som jeg ikke gad fjerne. Det virker på min RedHat Linux..
Avatar billede erikjacobsen Ekspert
13. maj 2002 - 06:52 #4
Du må ikke bruge file() der opfatter filen som linier. Det går ikke.
Brug chanaos sidste indlæg - det skal virke.
Avatar billede Noone Nybegynder
13. maj 2002 - 13:43 #5
ErikJacobsen > Det gør det også, prøv selv på http://mrfunny.yi.org/pic2html.php

Ovenstående linier bruges til at hente et valgfrit billede (URL feltet i bunden af siden, efter alt det andet er loaded)
Avatar billede Noone Nybegynder
13. maj 2002 - 13:46 #6
Hmmm... Den side er MEGET MEGET sløv, pga. den måde den bygges på... Tog et min at loade her via LAN...
Avatar billede tefcke Nybegynder
13. maj 2002 - 15:11 #7
Cool det virker, efter jeg havde siddet at roddet med en mærkelig fejl, viste det sig at jeg i dokumentationen af filesize() havde overset at det ikke virkede på remote files, DOOH!

Hvis det har nogen interesse for andre er den lille kodestump jeg har brygget frem her!

<SNIP>
/*
* $cover_url er den URL som er sendt via formen
* Burde måske lige tjekke hvilken type billed vi snakker om (gif, jpeg, png osv.)
* $file_type = remote image file type
*/
$filename = "7-9-13.$file_type"; // Lav et filenavn som ikke findes i kataloget allerede!
$temp = tempnam("/", "");
if (!copy($temp, $filename)) {
  print("failed to create $filename...<br>");
}
if (file_exists($filename)) {
  $fp_img = fopen($cover_url, "r");
  $img_as_string = fread($fp_img, "10485760"); // 10 Mb = 10485760 byte
  fclose($fp_img);

  $fp = fopen($filename, "w+b");
  fwrite($fp, $img_as_string);
  fclose($fp);
} else {
  print "<p>File dosen't exist: $filename";
}
</SNIP>

Tak for svaret chanaos, er total blå herinde, men prøver lige at fide ud af hvordan man giver point (hjælp til det, accepteres gerne ;) )
Avatar billede tefcke Nybegynder
08. marts 2003 - 15:29 #8
Rydder lige op i gamle spørgsmål :)
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