[php] - afbeelding van een externe server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
mijn hosting provider biedt geen GD library onder steuning daarom voor ik bewerkingen aan de afbeelding op een externe server uit.

naar mijn locale server upload ik een plaatje

image.php
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php

//start session
session_start(); 

//include external files
require_once("inc.php");

$max_filesize = 100000;

//-----------------------------------------------
//checks if the image is valid
function validImage($image){
    global $errorH,$max_filesize;
    
    
    if (!is_array($image) || !$image['name']) {
        return false;
    }
    
    if($max_filesize && ($image["size"] > $max_filesize)) {
        return false;
    }

    if (!isset($image['tmp_name']))
    {
        return false;
    }
    
    return true;
}

//-------------------------------------

if(authOk())
{
    if(validImage($_FILES['image']))
    {
        $image = $_FILES['image'];
            
        $large_max_width = 502;
        $large_max_height = 140;
        $small_max_width = 180;
        $small_max_height = 71;
            
        $imagename = "../tmp/".time().".jpg";
        
        //save a temp file
        move_uploaded_file($image['tmp_name'], $imagename);
            
        //create a filename
        $filename = "belt_".$aid.jpg;
                        
        //load the small image
        $fp = fopen("http://***/change_image.php?
filename=$imagename&width=$small_max_width&height=$small_max_height
&max_filesize=$max_filesize", "rb");
     while(!feof($fp))
    {
             $cont.= fread($fp,1024);
    }   
    fclose($fp);

    $small_file_name = "/../oos/images/articles/".$filename;

    $fp2 = fopen($small_file_name,"w");
    fwrite($fp2,$cont);
    fclose($fp2);
                            
    echo "afbeelding: <BR>[img]'$small_file_name'[/img]";

    //load the large image
        //save the image
            
    //delete tmp file
        
    //save link in the database
        
    //redirect to the article list

    }

    //header("Location: index.php?pid=images&aid=$aid");
    //exit;
}
else
{
    header("Location: index.php");
    exit;
}
?>


deze wordt vervolgens tijdelijk op geslagen.

Vervolgens roep ik vanuit image.php een fopen aan naar een bestand op de externe server

image_change.php
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
<?php
$fp = fopen("http://***/test/admin/".$filename, "r");
    $imageFile = fread ($fp, 3000000);
    fclose($fp);
    
    $tmpfname = tempnam ("tmp/", "IMG");
    
    $fp = fopen($tmpfname, "w");
    fwrite($fp, $imageFile);
    fclose($fp);
    
    $src_img = imagecreatefromjpeg($tmpfname);
    
    $src_width = imagesx($src_img); // width original image
    $src_height = imagesy($src_img); // height original image

    $src_div = $src_width / $src_height;
    $dst_div = $width / $height;
    
    if($src_div >= $dst_div)
    {
        $dst_width = $width;
        $dst_height = $src_height * ($width / $src_width);
    }
    else
    {
        $dst_width = $src_width * ($height / $src_height);
        $dst_height = $height;
    }
    
    $dst_img = imagecreatetruecolor($dst_width,$dst_height); 
    imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $dst_width, $dst_height, $src_width, $src_height);
    
    unlink($tmpfname);
    
    if (!$dst_img) {
        return false;
    }
    
    Header( "Content-Type: image/jpeg");
    imagejpeg($dst_img, '', 100);
?>


change_image.php wordt goed uitgevoerd. Want als ik de url uit fopen (in image.php) in de internet explorer plaats dan verschijnt er een verkleinde afbeelding.

Toch gaat het geheel niet goed. De fout zit volgens mij in de eerste fopen() in image.php
Ik krijg echter geen php foutmelding.

Bij het uitvoeren van het script verschijnt in de internet explorer:

Een cannot find server foutmelding

Ik heb al van alles geprobeerd, maar heb geen id hoe ik dit kan oplossen

[ Voor 18% gewijzigd door hilarisch op 23-02-2004 21:29 ]


Acties:
  • 0 Henk 'm!

  • Akerboom
  • Registratie: Juni 2001
  • Laatst online: 07-07 16:30

Akerboom

Codito, ergo sum

heb je een test URL zodat ik een begrijpelijkere foutrmelding kan krijgen die niet van IE afkomstig is :9

Acties:
  • 0 Henk 'm!

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
zal ik even voor zorgen...

maar er komt verder geen foutmelding bij kijken... alles 'lijkt' goed te gaan.
Maar dit is niet zo...

php genereert geen foutmelding.

als ik onderstaande weg haal... dan werkt bovenstaand script wel... zij het dan dat er natuurlijk geen echte afbeelding is opgehaald.
code:
1
2
3
4
5
6
7
//load the small image
        $fp = fopen("http://wwwhome.cs.utwente.nl/~gosselt/leka/change_image.php?filename=$imagename&width=$small_max_width&height=$small_max_height&max_filesize=$max_filesize", "rb") or die("openen bestand vanaf ut mislukt");
       while(!feof($fp))
    {
             $cont.= fread($fp,1024);
    }   
    fclose($fp);

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Kun je niet een paar enters in je script gooien :? Dit is onleesbaar :/ Gooi er ook meteen php tags omheen

[ Voor 4% gewijzigd door Spider.007 op 18-08-2003 12:50 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
:? huh ik heb toch overal enters

en ik heb er ook php tags staan...
misschien begrijp ik je niet goed... wat moet ik doen?

[ Voor 58% gewijzigd door hilarisch op 23-02-2004 21:30 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

hilarisch schreef op 18 August 2003 @ 12:57:
:? huh ik heb toch overal enters

en ik heb er ook php tags staan...
misschien begrijp ik je niet goed... wat moet ik doen?
om de code in je post [php] ... [/php] zetten, zodat het er makkelijker leesbaar uitziet ;)

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

hilarisch schreef op 18 August 2003 @ 12:57:
:? huh ik heb toch overal enters
en ik heb er ook php tags staan...
misschien begrijp ik je niet goed... wat moet ik doen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
//load the small image
        $fp = fopen("http://wwwhome.cs.utwente.nl/~gosselt/leka/change_image.php?
filename=$imagename&
width=$small_max_width&
height=$small_max_height&
max_filesize=$max_filesize", "rb") or die("openen bestand vanaf ut mislukt");
       while(!feof($fp))
    {
             $cont.= fread($fp,1024);
    }   
    fclose($fp);

:)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
zo beter?

Acties:
  • 0 Henk 'm!

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
ik ben er al wel achter gekomen dat het script dat in fopen() uit regel 55 wordt aangeroepen helemaal niet wordt uitgevoerd.

Maar als ik alles wat in de fopen() staat echo.. en vervolgens in de url knal dan wordt het script wel uitgevoerd...

hoe kan dit komen?

Acties:
  • 0 Henk 'm!

  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 14:45
Mischien een goed idee om de URL even te urlencode()-en voordat je hem aan fopen() voert...

PHP:
51
52
//create a filename 
$filename = "belt_".$aid.jpg;


Dit lijkt me niet zo geldige PHP-code, denk dat je dit bedoelde:
PHP:
51
52
//create a filename 
$filename = 'belt_' . $aid . '.jpg';

Maar dan nog zie ik nergens een $aid geïnitialiseerd worden...

En tenslotte stond er nog een opmerking op www.php.net/fopen dat feof() niet zou werken met fopen(URL).

Misschien niet zo netjes maar je zou ook eens gewoon een echo van $cont kunnen doen, dan weet je tenminste of het plaatje goed doorkomt.

Suc6

[ Voor 11% gewijzigd door Morrar op 19-08-2003 02:56 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 16:51
Kun je het bestand niet op de server op laten slaan. Op die uttwente server dus. Dan kun je daarna met deze functie de afbeelding weer terug halen:
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
/*FUNCTION FOR COPY IMAGES FROM OTHER SITES*/
// $file : the URI of the resource (file) to access and copy
// $file : the local name relative to the current path
// $checkexist : explicit ; no copy if already exists if TRUE, 
// overwrite if FALSE
//
function CopieImage($file,$nfile,$checkexist=TRUE) {
 GLOBAL $globNbImgManqu;
 $res=TRUE;
 if ($checkexist) {
   $go=(! file_exists($nfile));
 } else $go=TRUE;
 if ($go) {
   $res=FALSE;
   $fp = @fopen($file,"rb");
   if ($fp) { // car False si pas bon
     $cont='';
     $res=TRUE;
     set_magic_quotes_runtime(0); 
      while(!feof($fp)) $cont.= fread($fp,8192);
     fclose($fp);
     $fp2 = @fopen($nfile,"wb");
     fwrite($fp2,$cont);
     fclose($fp2);
     //set_magic_quotes_runtime(get_magic_quotes_gpc());
   } // else RàF, reste Faux
 } // else RàF, reste Vrai
 if (! $res) $globNbImgManqu++; // faux : échec
 return($res);
} // CopieImage Boolean Function


Eventueel kun je de file op de andere server met unlink weer verwijderen.

  • hilarisch
  • Registratie: Maart 2002
  • Laatst online: 03-07 18:21
Dit lijkt me niet zo geldige PHP-code, denk dat je dit bedoelde:

Maar dan nog zie ik nergens een $aid geïnitialiseerd worden...
deze zaken had ik al gecorrigeerd
En tenslotte stond er nog een opmerking op www.php.net/fopen dat feof() niet zou werken met fopen(URL).
het probleem begint al bij de fopen() functie (in regel 55) als je deze weghaald dan loopt het script wel goed.

Weet iemand of er binnen php restricties zijn waardoor fopen() niet goed uitgevoerd wordt.

En weet er iemand hoe het komt dat ik geen foutmelding krijg maar een cannot find server foutmelding
Pagina: 1