# Bild upload script



## pikus (13. Mai 2007)

hallo alle zusammen
ich suche einen kompletten Bild upload Script für meine Community was auch das Bild auf eine bestimmte größe verkleinert. Es sollte 100 % funktionieren weil ich kenn mich noch nicht so gut in php aus.

kan mir jemand helfen oder einen kompletten Script schicken?

DANKE


----------



## wischmopp90 (13. Mai 2007)

Hallo,

kuck dir mal die Grafik-Funktionen von PHP an: 
http://www.php.net/manual/de/ref.image.php


----------



## pikus (13. Mai 2007)

Danke für die hilfe aber ich versteh da eigentlich garnichts
ich wär glücklich wenn mir einer einen fetigen Script schicken würde!

*// EDIT*
ich hab hier ein script gefunden aber er kann bilder nur zu einer bestimmten grösse hochladen 
liegt es vieleicht an meinem funpic webspace? 
oder an dem Script? 


```
<html> 
<head> 
<title>Upload</title> 
</head> 
<body> 
<? 
if($action){ 

   // -------------------------------- 
   // Diverse Variablen 
   // -------------------------------- 

$path = "images/typen/"; // Url zum Speicherordner der großen Bilder 
$thumb_path = "images/typen/thumb/"; // Url zum Speicherordner der Vorschaubilder 
$config_width = "320"; // Bildbreite max. bei großem Bild 
$config_height = "240"; // Bildhöhe max. bei großem Bild 
$config_thumb_width = "80"; // Bildbreite max. bei Vorschaubild 
$config_thumb_height = "60"; // Bildhöhe max. bei Vorschaubild 
$resizequality = "70"; // Bildkompressionsrate 0-100 
$deindomain = "http://www...........de/";  // unsere Domain 

if ($HTTP_POST_FILES['userfile']['tmp_name']<> 'none') 
   { 

   // -------------------------------- 
   // Get File Upload Info 
   // -------------------------------- 

         $filename = $HTTP_POST_FILES['pic_file']['name']; 
         $filetype = $HTTP_POST_FILES['pic_file']['type']; 
         $filetmp = $HTTP_POST_FILES['pic_file']['tmp_name']; 

   // -------------------------------- 
   // Check file type 
   // -------------------------------- 

   switch ($filetype) 
   { 
      case 'image/jpeg': 
      case 'image/jpg': 
      case 'image/pjpeg': 

         $pic_filetype = '.jpg'; 
         break; 

      case 'image/png': 
      case 'image/x-png': 

         $pic_filetype = '.png'; 
         break; 

      case 'image/gif': 

         $pic_filetype = '.gif'; 
         break; 
      default: 
         die("Falsches Dateiformat. Nur JPEG, GIF oder PNG erlaubt!"); 
   } 

   // -------------------------------- 
   // Generate filename 
   // -------------------------------- 

   srand((double)microtime()*1000000);   // for older than version 4.2.0 of PHP 

   do 
   { 
      $pic_filename = md5(uniqid(rand())) . $pic_filetype; 
   } 
   while( file_exists($path . $pic_filename) ); 


   // -------------------------------- 
   // Move this file to upload directory 
   // -------------------------------- 

   $ini_val = ( @phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var'; 

   if ( @$ini_val('open_basedir') != '' ) 
   { 
      if ( @phpversion() < '4.0.3' ) 
      { 
         die("open_basedir is set and your PHP version does not allow move_uploaded_file<br /><br />Please contact your server admin"); 
      } 

      $move_file = 'move_uploaded_file'; 
   } 
   else 
   { 
      $move_file = 'copy'; 
   } 

   $move_file($filetmp, $path . $pic_filename); 

   @chmod($path . $pic_filename, 0777); 


   // -------------------------------- 
   // Well, it's an image. Check its image size 
   // -------------------------------- 

   $pic_size = getimagesize($path . $pic_filename); 

   $pic_width = $pic_size[0]; 
   $pic_height = $pic_size[1]; 


   // -------------------------------- 
   // This image is okay, we can cache its thumbnail now 
   // -------------------------------- 

   if($pic_filetype != '.gif') 
   { 
      $gd_errored = FALSE; 

      switch ($pic_filetype) 
      { 
         case '.jpg': 
            $read_function = 'imagecreatefromjpeg'; 
            break; 
         case '.png': 
            $read_function = 'imagecreatefrompng'; 
            break; 
      } 

      $src = @$read_function($path  . $pic_filename); 

      if (!$src) 
      { 
         $gd_errored = TRUE; 
         $pic_thumbnail = ''; 
      } 
      else if( ($pic_width > $config_thumb_width) or ($pic_height > $config_thumb_height) ) 
      { 
         // Resize it 
         if ($pic_width > $pic_height) 
         { 
            $thumbnail_width = $config_thumb_width; 
            $thumbnail_height = $config_thumb_width * ($pic_height/$pic_width); 
         } 
         else 
         { 
            $thumbnail_height = $config_thumb_height; 
            $thumbnail_width = $config_thumb_height * ($pic_width/$pic_height); 
         } 

         $thumbnail = @imagecreatetruecolor($thumbnail_width, $thumbnail_height); 

         $resize_function = 'imagecopyresampled'; 

         @$resize_function($thumbnail, $src, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $pic_width, $pic_height); 
      } 
      else 
      { 
         $thumbnail = $src; 
      } 

      if (!$gd_errored) 
      { 
         $pic_thumbnail = $pic_filename; 

         // Write to disk 
         switch ($pic_filetype) 
         { 
            case '.jpg': 
               @imagejpeg($thumbnail, $thumb_path . $pic_thumbnail, $resizequality); 
               break; 
            case '.png': 
               @imagepng($thumbnail, $thumb_path . $pic_thumbnail); 
               break; 
         } 

         @chmod($thumb_path . $pic_thumbnail, 0777); 

      } // End IF $gd_errored 

   } // End Thumbnail Cache 


  // -------------------------------------- 
  // OK lets resize the original picture 
  // -------------------------------------- 

  if($pic_filetype != '.gif') 
  { 
    $gd_errored = FALSE; 

    switch ($pic_filetype) 
    { 
      case '.jpg': 
        $read_function = 'imagecreatefromjpeg'; 
        break; 
      case '.png': 
        $read_function = 'imagecreatefrompng'; 
        break; 
    } 

    $src = @$read_function($path  . $pic_filename); 

    if (!$src) 
    { 
      $gd_errored = TRUE; 
      $pic_resize = ''; 
    } 
    else if( ($pic_width > $config_width) or ($pic_height > $config_height) ) 
    { 
      // Resize it 
      if ( (($pic_width / $pic_height) > ($config_width / $config_height)) ) 
      { 
        $resize_width = $config_width; 
        $resize_height = $config_width * ($pic_height/$pic_width); 
      } 
      else 
      { 
        $resize_height = $config_height; 
        $resize_width = $config_height * ($pic_width/$pic_height); 
      } 

      $resize = @imagecreatetruecolor($resize_width, $resize_height); 

      $resize_function = 'imagecopyresampled'; 

      @$resize_function($resize, $src, 0, 0, 0, 0, $resize_width, $resize_height, $pic_width, $pic_height); 
    } 
    else 
    { 
      $resize = $src; 
    } 

    if (!$gd_errored) 
    { 
      $pic_resize = $pic_filename; 

      // Write to disk 
      switch ($pic_filetype) 
      { 
        case '.jpg': 
          @imagejpeg($resize, $path . $pic_resize, $resizequality); 
          break; 
        case '.png': 
          @imagepng($resize, $path . $pic_resize); 
          break; 
      } 

      @chmod($path . $pic_resize, 0777); 

    } // End IF $gd_errored 

  } // End Picture Resize 

      echo "Datei ist auf dem Server! <br><br>"; 
      echo "Url des großen Bildes: <a href=\"$deindomain$path$pic_filename\" target=\"_blank\">".$deindomain.$path.$pic_filename; 
     echo "</a> <br><img src=\"$deindomain$path$pic_filename\"><br><br>"; 
      echo "Url des Vorschaubildes: <a href=\"$deindomain$thumb_path$pic_filename\" target=\"_blank\">".$deindomain.$thumb_path.$pic_filename; 
     echo "</a> <br><img src=\"$deindomain$thumb_path$pic_filename\">"; 

   } 
} else { ?> 

<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>"> 
<input type="hidden" name="MAX_FILE_SIZE" value="4000000"> 
<br> 
<strong>File Upload</strong> <br> 
<br> 
<input name="pic_file" type="file" size=40> 
<br> 
<br> 
<input type="submit" name="action" value="Speichern"> 
</form> 
<? 
 } 
   // ----------------------------------------- 
   // Das Script kann unter Verwendung 
   // dieses Vermerks uneingeschränkt 
   // genutzt / verändert werden. 
   //  © www.marc-gutt.de 
   // ----------------------------------------- 
?> 
</body> 
</html>
```


----------



## Flex (13. Mai 2007)

Also ein bisschen Eigeninitiative ist doch nicht zuviel verlangt, oder?!

Direkt bei den ersten Kommentaren steht doch schon alles erklärt, was man wissen braucht...


----------



## pikus (14. Mai 2007)

steht nicht drin wieso er bilder nur zu einer bestimmten größe hochladen kann
und bei den größeren bleibt der Browser einfach weiß


----------



## Flex (14. Mai 2007)

Ich seh gerade, dass das Script nicht mit den neuesten PHP Versionen arbeiten wird, da es auf alte Variablen zugreift, die meiner Meinung nach nicht mehr gesetzt sind.

Du müsstest das ganze Skript umschreiben, damit es funktioniert.


----------



## nephix (14. Mai 2007)

Hi,

http://www.php-space.info/bilder-upload-script/
(1min Google)
Habs getestet funktioniert auch.


----------



## peper (14. Mai 2007)

Felix Jacobi hat gesagt.:
			
		

> Ich seh gerade, dass das Script nicht mit den neuesten PHP Versionen arbeiten wird, da es auf alte Variablen zugreift, die meiner Meinung nach nicht mehr gesetzt sind.
> 
> Du müsstest das ganze Skript umschreiben, damit es funktioniert.



Ehm magst du mir mal sagen was das bedeuten soll..Also welche es genau betrifft
Ich arbeite schon recht lang mit dem script unter PHP 5...
Hab ja schon sorgen das es mit 5.2.2 nicht klarkommt...Das wir morgen aufgespielt^^

Ich hoffe es geht dann noch...

edit: Aso ich habe aus dem Script die Gif Funktion entfernt da sie nicht richtig ging.
Und noch einige andere unwichtige Funktionen hinzugefügt^^.

LG Lars


----------



## Flex (14. Mai 2007)

Also bei mir (register_globals off, Safe Mode off) funktioniert z. B. $PHP_SELF nicht.

Und auch wenn ich das ändere, macht das Skript erstmal gar nichts... Mich damit weiter zu beschäftigen hatte ich dann erstmal keine Lust mehr, sorry


----------



## peper (14. Mai 2007)

Wenn du nochmal irgendwann Lust dazu hast, würde ich mich freuen, wenn du die Fehler die dir auffallen hier postest  

Was nimmt man eigentlich anstatt $PHPSelf
etwa
	
	
	



```
$_SERVER['PHP_SELF']
```
LG Lars


----------



## Flex (14. Mai 2007)

Ja, nimmt man...

Ich poste mir mal ein paar Sachen, die mir auffallen...


Statt $HTTP_POST_FILES => $_FILES nehmen
 Statt den Type aus deinem Formular abzulesen, der sich nur auf die Dateiendung bezieht, solltest du lieber [phpf]getimagesize[/phpf] benutzen, dass im Array auch den Mime Type zurückgibt
 Statt überall die Fehler zu unterdrücken per @ solltest du [phpf]error_reporting[/phpf] auf 0 stellen. Dies würde dir erleichtern bei möglichen Kunden schnell den Debug Mode anzustellen (error_reporting auf E_ALL) und zu schauen, wo der Fehler auftritt.
 Außerdem solltest du, nach Erstellen des Thumbnails und Größere verändern, die alte Bildressource per [phpf]imagedestroy[/phpf] vernichten.

Das ist alles was mir spontan auffällt


----------



## peper (14. Mai 2007)

Okay da kümmere ich mich dann erstmal drum^^
Danke erstmal..

So soweit alles abgehakt..
Ausser error Reporting:
Ich denke dieses müsste in der PHP.ini geschehen.
Oder
Wenn ja müßte ich sie mir morgen mal freigeben lassen.
LG Lars


----------



## Gunah (16. Mai 2007)

denk dran das der upload bei funpic glaube nur 1MB pro datei ist... war zumindest mal so....


MfG Gunah


----------



## Flex (16. Mai 2007)

peper hat gesagt.:


> So soweit alles abgehakt..
> Ausser error Reporting:
> Ich denke dieses müsste in der PHP.ini geschehen.
> Oder
> ...



Nein, [phpf]error_reporting[/phpf] ist ja eben dafür da, dass man es nicht in der php.ini ändern muss, sondern während der Laufzeit eines Skriptes ändern kann.

Es kann natürlich sein, dass der Befehl von deinem Hoster deaktiviert wurde.


----------



## peper (16. Mai 2007)

Oki dann muß ich mal gucken wo ich den in das script packen kann...
Danke auf jedenfall nochmal 


Den anderen Post mit dem Funpic verstehe ich irgendwie nicht...
Wer hat den von Funpic gesprochen?

LG Lars


----------



## Gunah (16. Mai 2007)

hier:http://www.tutorials.de/forum/1419957-post3.html da schreib pikus davon


----------



## Flex (16. Mai 2007)

Am besten ganz oben in das Skript... Und wenn alles fehlerfrei läuft, stellst du es eben auf 0, damit niemand einen Nutzen aus den Fehlermeldungen ziehen kann. Und wenn mal was nicht klappt, stellst du es auf E_ALL und auf gehts ins Nirvana der Fehlermeldungen.


----------



## peper (16. Mai 2007)

Klappt sehr gut^^
Und zum dritten mal Danke


----------



## peper (15. Mai 2009)

pikus hat gesagt.:


> Danke für die hilfe aber ich versteh da eigentlich garnichts
> ich wär glücklich wenn mir einer einen fetigen Script schicken würde!
> 
> *// EDIT*
> ...




Moin moin,
ich benutze dieses Upload script nun schon eine ganze Zeit und habe eine Menge verändert. Neuerdings hatte ich Probleme die nun auch gelöst sind.
Allerdings musste ich für die Perfomance eine Zeile auskommentieren.
Ich wüßte gerne ob ich irgendetwas übersehen habe warum diese Zeile überhaupt ein zweites mal vorkommen muss.

Es geht um folgenden code:

```
$src = @$read_function($path  . $pic_filename);
```

LG Lars


----------

