[PHP] Image van URL inladen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Ik ben bezig aan een scripje dat een plaatje omzet naar ASCII-art. Het werkt prima, via een upload formulier. Nu wil ik graag dat je ook een URL van een plaatje kunt invoeren, zodat je ook plaatjes die niet op je harde schijf staan kunt bewerken. Ik krijg dit niet voor elkaar.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
      $file = $_FILES['userfile']['tmp_name'];
      $imgsize = getimagesize($file);
      if ($imgsize[0]>0) {
        switch(strtolower($fileext)) {
          case "jpg":
          case "jpeg":
          $img = ImageCreateFromJpeg($file);
          break;
          case "gif":
          $img = ImageCreateFromGif($file);
          break;
          //etc
        }

Als ik $file = fopen("http://plaatje.gif","r") invul ipv de huidige regel dan krijg ik "not a valid resource" in de getimagesize functie. Ik heb al wat gegoogled en een veelvoorkomend probleem is dat allow_url_fopen uitstaat, maar dat is op mijn server niet het geval.

Wat doe ik fout?

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

resource imagecreatefromjpeg ( string $filename )
imagecreatefromjpeg vraagt een string als $filename, geen resource.

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


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Nu online

Johnny

ondergewaardeerde internetguru

Om het maar even in code uit te drukken:
PHP:
1
imagecreatefromjpeg("http://plaatje.gif");

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • Joshua
  • Registratie: Juli 2005
  • Laatst online: 16-09 15:47
Johnny schreef op zaterdag 15 maart 2008 @ 22:15:
Om het maar even in code uit te drukken:
PHP:
1
imagecreatefromjpeg("http://plaatje.gif");
offtopic:
Een imagecreatefromjpeg functie met een .gif file zal waarschijnlijk niet werken. :+

Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Oh my wat stom van mij. Bedankt voor de hulp O+

Als ik toch bezig ben: is het wel veilig om fopen op deze manier te gebruiken?

edit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
V0000V00SV00VV00S000VSV0SSRV0VkRVVyR02eVS000VVSSV000VVV0V000VVV0V000VV
00000000VVVV0000VVVV000VVS0eSeResVV0eSSSV00000VSV0VV000V00VV000V00VV00
R0VV00VS0VSV000V0VVV00VSSSVVesVukSVV2RVs0VVV0R0V0VSV000V0VSV000V0VSV00
00VV000V0VVV000V000V0VSeSVsVSSc=YSySe0se0VVV000V0VVV000V0VVV000V0VVV00
VV00VV00VV00VVV0VV00VSSSS0ysSs{!)y2eVssVSV0VVVV0VV00VVV0VV00VVV0VV00VV
SV00VV00S000SSV0eSVVSSSV2VySSc!:,cSeeySVeSVVSSV0SV00SSV0SV00SSV0SV00SS
VV0VVVV0VV0VVVVVSSSSSSSSyese31,c~}k222VeeSSSSSVVVVVVVVVVVVVVVVVVVVVVVV
00VV00VS0VSVV0VS0VSSSesySsy3U!*Q?-Ukyse2SeseSVSS0VSS00VS0VSS00VS0VSS00
VVVVVVV0VVVVVVVSVssVV22VsCssl-Nw0`}SCSy2sseessS0SSSVVVVVVVVVVVVVVVVVVV
SVVVVVVVSSSVSSSSs00sysesk2sP!jwWwz-Posess2sVVesSSSSSVVVVVVVVVVVVVVVVVV
SSSVVVVVSSSSSSeeSsy2s2ykyoc{|SWgW6.}xCokyyy22ssseeSSSSSSSSSSSSSSSSSSSS
SSSSSSSSSSSSSees2esy2eoP}~|.t8WWwwf.-i}akee33SSyeeeSSSSSSSSSSSSSSSSSSS
SSSSSSSSSSSSeessekk2ou^-!i/#MWW@WWMmu}!!~nDss2ssseeSSSSSSSSSSSSSSSSSSS
SSSSSSSeSSeess223ykh=.iPXOWQW@WWWWQQWOXv:!=*D2ssssseeSSSSSSSSSSSSSSSSS
SSSSeeeeeess22yysU}-i#gQWWWwWWQWQWWWWQW@wx~-)U3Cy22sseeeSSSSSSSSSSSSSS
SSSeeeeesss2yykkP=-/qWQQQWWWWW@WWWQWWW8WwQMu.~/2yyy2ssssSSSSSSSSSSSSSS
eesssss23SCCV32*-|kwQWWWWWWWWwWWWWWWQWWWQQWw0~-TC2322S3eeeeeeeSSeeeeeS
essseeeeS2ek33r-}$WQWwMWQQQwWWWWWWWWWWW@WWWW@q;-*yos2ekVeeSeesseeeeeee
Ses222ykCo2Ck7-}XWWWWWWQQWWWWWwQWWw@WWWWWWwWWWdl,73kD22Cky2sssseeeeeee
s222sss2Sy3Cv!lqWWOW@@WwWWWWWQwWwWWWWWwWQ@wwWQWMl!c332V3eeees222ssssee
s22yyk3C3D3o~|2WQwQwDs@WWW@wWWWWQWWWWWWWQyoQ@WWW0,ix2DC33kkkyysessssss
s2222yk3#yof.CwQQQw3^DWWwWWWWWWwWWWWWWWQw3ioQQQQWo-rDC3y3kkyyysessssss
3333k33Co37.tQWWWwY^^38WWgwW@wWQW8WWwWWWQz{1xwWWWwn,*xDo3kyyykkk22ssss
23Dc/n)1i!--GWWWQ0l;lDQw@h}njf*f*)nj}PqWw3li{N@wWWG.|:~1tj74aoy2222sss
k?~,-..:t*USwWWWAr={i#@WQ:`____.`.___-@Wwo;iltMQQWQ047t|!.|,~?ykksoeyy
os)-,SgwQ@WQWWWwx;^{^owW@,`.._`__`_-!,wwQDl{i=c@QWWWwWWwO2=!j#o23s30sy
VkS?`jg@WWWwWWWX}i;;iCwW@i_`___`_!___|@WQm^}^i{6WQWWW88QA?-fseD3Ckoy3k
m3kSr!tgQWWQWWQmil1lio@WwczPc;___lvHHvWWw#^;lLiaW@wWQWQ@r-tseC3o223kkk
kV2oXt.r6WQQWwMLl1;l^o@WW8@wW/___rWQQwWQQolll1l}gQW@QWK)./Ss#3kDo#C3y2
ooCSsSu.*$QQWQG{{{l;{owWWWWQW?`-.rWWWWWWQ#;{{^1=$wWWWKT.j3Ry3Cok3ok#33
y3SD2SVh.HwwWwD^;;l{{oQWgWQWW*```rWwWQWWw#l{1l1;k@www/-?GyokCmosyy03Co
3#3o33y#-uWwWwh;{{l1lDQQWWWWWT!``*QWW@WWQC^^;{l;hwwwW/.okyCxm23vr?C#3o
y33o#33a-vWQW8?{{;{^^#QwWWWQWH._`rWWQWWWQC1l{l1lnwwQWh!D3#DDDec!|=ykyk
k33CoCoU.4WwQwT{1l{LLmQWWQWWW?___*WWWWW@8a;l}{1^*@wWWU|4oam#R4f..^xxm4
3333ooDc.cWQWQT{11{l1#wwWQWWWu.!-jOQWWWWwC}l1;{lT@WWWa!zDm#aR~-._`!!{,
k333ooDU.4WQWw7;;1{l{a@QQQWWQmjjtxWWWwww8a}l;;{{?wWQQ4-Ymo#UV|-`-_.-T;
y333oooa-7WWWwPl{{{Ll}aKQWW8WWWWW@WWWQ@8ctl;1{;{zQWQW/-Da#mDN/j`_./zyH
y333ooC#,LQWWQo^}1{}l=lregwQQwQW@WW8Qwk}}^l111;;CWQWWn,Daom#23Y``i$SNU
y333ooC#{,gWWW${l}{;))}i~HS8wWQQWWQwRu^)};L{;{;1NQWW8l{DDo#DxCc._:$3yC
y33kooo#j`AwQWOtlL{{1ll}L^l4GwWWwQKv};l{;;);l1{}dwWWN`j##DDo#kH``=$Dmk
k33CCCo#4.mQWWwUL;1{{1;Ll)L^}aAw8#)^{1{{{{1;L;)/wWQW3.P#mkaD33v..|qDmy
k33CCCo#C!fW@WWKir;{L{L{L;l1{;*a*1^;1{{}{{1L{1lNw@WW1.k#aCoomoU-`|ameC
k33CCCo#3t!$WWWQ41{};{L;L{1)}llL;{1}1{;11};1)iv@QQWG`Lk#DD#3mym-.`.-z3
k333CCo#Dm-?W@WQMfl}{}{{l}}{{L};}}{{{{11{L{{{)qwQWQ?!am#o#Dooskt._:./3
33333CooC3l,XWWW8S}^r{{}}1{{{{{{;{{{1L}{{}}{lsQWWWG,{o3D#koDDCes/l{lDS
33333CCoCoc!rWWWW@#1^1L1)}1}}1111L)}}}1{{}^1a8WWWWu-cDk##3o#C#oSRGKNK3
333333CoDC2t.oWWWw@D{L}}{11{{}}{{1}{{1}L}}Lc@wW@@C!12o#oC#oCkCmaDeyeSk
333333CoDCoD=!GWwWQ@#{;))}})L{1L)L}LLL}11{#8QWOWA,!yoC#oCD33D3yooo#3Da
333CCCooo#ayU-lOW@WQg0u;}}}L}{{L}}}1}L}{?08QWWW@}!YsDmo#oooooooooooooo
333333CCayo32*-tWWWWQQ6Sf}l{)t)}1{1L;l?DAQWWQWQj-Hya33ay33333333CCCCCC
3CCCCCoo3DD#o2}-MWWWWWQw804j}1{{L}}nceMwQWWW8@w,1okoo##3CCCCCCCCoooooo
,,|!!!!|||,|.}_{WW@wWWWQQw@gq$s3y$AdOwQWwWQWWWQ{|^.!!|i|||!!|||,||||||
wwQQQQQwwwwwWO-jWWQWW@WQWWWQQwQQQ@8WWWWWWwWQWWQH.6WQw@wwQQWWWQQQQQQQQQ
WWWWWWWW@QQQW$`UWWWQMGOWWWWWWWWWWWWWWQWWWS6WWQQx_$W8WWwWWWWWWWWWWWWWWW
WWWWWWWWWQQWgC.#WWOY,_{xd@WWWWWQwWWWWWXm{_!U6WWs`cWWWWWWWWQWWWWWWWWWWW
WWWWWWWWWWWWQc_XWUi_;?^_-)YeKd@QwOXs4t,`|7i`lU8X_/WWQWQWWWWWWWWWWWWWWW
WWWWWWWWWQWWw).D^`~mWW6yti`__!:i~!`__!*ogWQ3i_lY,tQWWWQWWWWWWWWWWWWWWW
WWWWWWWWWWQwO)__,UgWwQWWWMSaHjL1ttuD$dQWWwWWMU{-_i@WWWW8WWWWWWWWWWWWWW
WWWWWWWWQWwWM_~cAQWWWWWQWWWWWQWWWWwQWWWQwWWwWWGP,_0Ww@WWWWWWWWWWWWWWWW
WWWWWWWWWQQW$7KWWWWWW8wWQWWWWQWWwWWWQQWWWWWQWWWWXHewWWW8WWWWWWWWWWWWWW
WWWWWWWWQWQ8WWWWWQ@WWWWwWWWWWWWWQWWWWWWwWWWWWwwWWwWW8@WWWWWWWWWWWWWWWW
WWWWWWWWWgWWQWWQWWWWwwWWWQQwWWWWWWWwWWWWWWW@wWWQWWw@WWWWWWWWWWWWWWWWWW


^^

Beveiligingsvraagstuk is overigens wel serieus. Ik check momenteel alleen de extensie. Het script stopt ook als $img = ImageCreateFromXxx($filename) geen $img oplevert.

Ik zou nog het MIME type kunnen controleren, maar daar schijnt mee gerommeld te kunnen worden. Ik ben zeg maar bang dat een of andere grapjes http://www.haxor.biz/hackyou.gif als img url opgeeft... kan dat iets uithalen?

[ Voor 98% gewijzigd door Bozozo op 15-03-2008 23:26 ]

TabCinema : NiftySplit


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Nu online

Johnny

ondergewaardeerde internetguru

Met de functie getimagesize() kun je controleren of een bestand ook daadwerkelijk een afbeelding is die PHP ondersteunt.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Nu online

MueR

Admin Tweakers Discord

is niet lief

fopen is fout hiervoor. Kijk eens naar CURL (http://php.net/CURL).

Op extensie controleren is ook fout, maar ook het mimetype kan idd mee gerommeld worden.

[ Voor 41% gewijzigd door MueR op 16-03-2008 02:08 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Bozozo
  • Registratie: Januari 2005
  • Laatst online: 20-02 16:10

Bozozo

Your ad here?

Topicstarter
Ik heb fopen nu niet meer nodig. Het binnenhalen van een image gaat nu als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$allowedexts = array("jpg","jpeg","png","gif");
if ($_FILES['userfile']['size']){
  //Gebruiker heeft een bestand geüpload
  $tmp = explode ( '.', $_FILES['userfile']['name']);
  $filename = $_FILES['userfile']['tmp_name'];
  $fileext = strtolower($tmp[count($tmp)-1]);
}
else if (isset($_POST['imgurl'])) {
  //Gebruiker heeft een url ingevoerd. Voor de zekerheid even filteren op rare dingen
  require_once("class.inputfilter_clean.php");
  $filter = new InputFilter();
  $filename = $filter->process($_POST['imgurl']);
  $lastdot = strrpos($filename,".");
  $fileext = strtolower(substr($filename,$lastdot+1));
}
else {
  $msg = "You did not specify a file to convert.";  //wordt uiteindelijk getoond aan de gebruiker
}
if (in_array($fileext,$allowedexts)){
  $imgsize = getimagesize($filename);
  if ($imgsize[0]>0) {
    switch(strtolower($fileext)) {
      case "jpg":
      case "jpeg":
      $img = ImageCreateFromJpeg($filename);
      break;
      case "gif":
      $img = ImageCreateFromGif($filename);
      break;
        case "png":
      $img = ImageCreateFromPng($filename);
      break;
    }
    if (!$img) exit();

    //Maak ASCII
   ...
    //ASCII klaar
    ImageDestroy($img);
  }
  else {
    $msg = "Image could not be read.";
  }
}
else {
  $msg = "Unsupported file type. Valid file types: jpeg, gif, png.";
}


Dit lijkt mij redelijk veilig, tenzij ImageCreateFromXxx() op de een of andere manier code kan uitvoeren. Dat lijkt me nogal een beveiligslek in PHP, dus waarschijnlijk zal het niet kunnen. Kan iemand dat bevestigen?

TabCinema : NiftySplit

Pagina: 1