Ergebnis 1 bis 9 von 9

Thema: PHP - GD-Library -> bilder resizen -> probs bei großen

  1. #1
    Azubi(ne)
    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard PHP - GD-Library -> bilder resizen -> probs bei großen

    Mal eine allgemeine Frage vllt. weiß da jemand was:

    auf meiner Seite können die benutzer sich bildergalerien anlegen. die bilder werden beim hochladen mit php resized auf eine maximal-breite/-höhe, und es werden halt kleine thumbnails angelegt.

    Leider hatte ich bei dateien über ~500kb immer fehler und scriptabbruch.

    Weiß jemand vllt ob php da einfach ab einer bestimmten datei-größe nicht mehr klarkommt? bei bildern bis 350kb (da hab momentan jetzt eine grenze gezogen) funktioniert alles einwandfrei.

    ich weiß leider nicht mehr genau was da jetzt für ein fehler kam, dachte mir ich frag erstmal, vllt kennt ja jemand sowas schon und kann mir hinweise geben
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Also ich hatte das noch nicht.
    Mit Script + Fehlermeldung könnt ich dir aber helfen, denk ich

    Gruß,
    Jojo

  3. #3
    Azubi(ne)
    Themenstarter

    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    ok, dann poste ich das nachher mal noch, das wäre natürlich super

    ich weiß noch, dass ich, als ich das damals implementiert habe, kurz vorm verzweifeln war und dann irgendwann halt aus frust die max-größe erstmal auf 350kb gesetzt habe

  4. #4
    Azubi(ne)
    Themenstarter

    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    also, das formular zum hochladen der bilder:
    Code:
    echo "<form action='resize.php' method='POST' enctype='multipart/form-data'>";
    // echo "<input type='hidden' name='MAX_FILE_SIZE' value='350000' />";
    echo "<input type='hidden' name='gid' value='".$gid."' />";
    echo "<input type='hidden' name='dest_header' value='index.php?id=106&aktion=gal_edit&gid=".$gid."' />";
    echo "<input type='hidden' name='dest_width' value='720' />";
    echo "<input type='hidden' name='dest_height' value='720' />";
    echo "<input type='hidden' name='dest_location' value='bilder/".$gid."/' />";
    echo "<input type='hidden' name='dest_thumb_width' value='100' />";
    echo "<input type='hidden' name='dest_thumb_height' value='100' />";
    echo "<input type='file' name='pic_file' />";
    echo "<input type='submit' name='pic_upload' value='hochladen' />";
    echo "</form>";
    resize.php
    Code:
    <?php
    error_reporting&#40;E_ALL&#41;;
    include&#40;"dbconnect.php"&#41;;
    include&#40;"functions.php"&#41;;
    session_start&#40;&#41;;
    
    $path = "./".$_POST&#91;'dest_location'&#93;;   	// Speicherordner der Bilder
    $thumb_path = $path."thumb/"; 		// Speicherordner der Vorschaubilder
    $config_width = $_POST&#91;'dest_width'&#93;; 	// Bildbreite max. bei großem Bild
    $config_height = $_POST&#91;'dest_height'&#93;; 	// Bildhöhe max. bei großem Bild
    if&#40;$_POST&#91;'dest_thumb_width'&#93;&#41;
    &#123; $config_thumb_width = "100"; &#125; 	// Bildbreite max. bei Vorschaubild
    if&#40;$_POST&#91;'dest_thumb_height'&#93;&#41;
    &#123; $config_thumb_height = "100"; &#125; 	// Bildhöhe max. bei Vorschaubild
    $resizequality = "70"; 			// Bildkompressionsrate 0-100
    
    if &#40;!empty&#40;$_FILES&#91;'pic_file'&#93;&#41;&#41;
    &#123;
    	$filename = $_FILES&#91;'pic_file'&#93;&#91;'name'&#93;;
    	$filetype = $_FILES&#91;'pic_file'&#93;&#91;'type'&#93;;
    	$filetmp = $_FILES&#91;'pic_file'&#93;&#91;'tmp_name'&#93;;
    
             // Dateitypen überprüfen
      	switch &#40;$filetype&#41;
      	&#123;
         	  case 'image/jpeg'&#58;
         	  case 'image/jpg'&#58;
         	  case 'image/pjpeg'&#58;
            		$pic_filetype = '.jpg';
            		break;
         	  case 'image/png'&#58;
         	  case 'image/x-png'&#58;
    	        $pic_filetype = '.png';
            		break;
         	  default&#58;
            		die&#40;"Falsches Dateiformat. Nur JPEG oder PNG erlaubt!"&#41;;
      	&#125;
    
             // Dateinamen vergeben
      	srand&#40;&#40;double&#41;microtime&#40;&#41;*1000000&#41;;
      	do
      	&#123;
         		$pic_filename = md5&#40;uniqid&#40;rand&#40;&#41;&#41;&#41; . $pic_filetype;
      	&#125;
      	while&#40; file_exists&#40;$path.$pic_filename&#41; &#41;;
    
      	// Kopieren ins Zielverzeichnis
      	copy&#40;$filetmp, $path.$pic_filename&#41; or die&#40;$path&#41;;
      	@chmod&#40;$path.$pic_filename, 0777&#41;;
    
             // Bildgröße ermitteln
      	$pic_size = getimagesize&#40;$path . $pic_filename&#41;;
      	$pic_width = $pic_size&#91;0&#93;;
      	$pic_height = $pic_size&#91;1&#93;;
    
    
             // Soll ein Thumbnail erstellt werden? &#40;je nach aufrufendem Formular, siehe Variablenbelegung&#41;
    	if&#40; $config_thumb_width &#41;
    	&#123;
    	         $error = FALSE;
                      // Benötigtes imagecreatefrom je nach Dateityp
    	         switch &#40;$pic_filetype&#41;
    	         &#123;
    	           case '.jpg'&#58;
    	                 $read_function = 'imagecreatefromjpeg';
    	                 break;
    	           case '.png'&#58;
    	                 $read_function = 'imagecreatefrompng';
    	                 break;
    	         &#125;
    	         $src = @$read_function&#40;$path.$pic_filename&#41;;
    	         if &#40;!$src&#41;
    	         &#123;
    	                 $error = TRUE;
    	                 $pic_thumbnail = '';
    	         &#125;
                      // Muss das Bild resized werden?
    	         else if&#40; &#40;$pic_width > $config_thumb_width&#41; or &#40;$pic_height > $config_thumb_height&#41; &#41;
    	         &#123;
    	                 // Resize...
    	                 if &#40;$pic_width > $pic_height&#41;
    	                 &#123;
    	                         $thumb_width = $config_thumb_width;
    	                         $thumb_height = $config_thumb_width * &#40;$pic_height/$pic_width&#41;;
    	                 &#125;
    	                 else
    	                 &#123;
    	                         $thumb_height = $config_thumb_height;
    	                         $thumb_width = $config_thumb_height * &#40;$pic_width/$pic_height&#41;;
    	                 &#125;
    	                 $thumbnail = @imagecreatetruecolor&#40;$thumb_width, $thumb_height&#41;;
    	                 @imagecopyresampled&#40;$thumbnail, $src, 0, 0, 0, 0, $thumb_width, $thumb_height, $pic_width, $pic_height&#41;;
    	         &#125;
    	         else
    	         &#123;
    	                 $thumbnail = $src;
    	         &#125;
    	         if &#40;!$error&#41;
    	         &#123;
    	                 $pic_thumbnail = $pic_filename;
    	                 // Thumbnail speichern
    	                 switch &#40;$pic_filetype&#41;
    	                 &#123;
    	                   case '.jpg'&#58;
    	                         @imagejpeg&#40;$thumbnail, $thumb_path.$pic_thumbnail, $resizequality&#41;;
    	                         break;
    	                   case '.png'&#58;
    	                         @imagepng&#40;$thumbnail, $thumb_path.$pic_thumbnail&#41;;
    	                         break;
    	                 &#125;
    	                 @chmod&#40;$thumb_path . $pic_thumbnail, 0777&#41;;
    	         &#125;
    	&#125; // Thumbnail-resize fertig
    
    
    
     	// Originalbild resizen
    
       	$error = FALSE;
             // Benötigtes imagecreatefrom je nach Dateityp
       	switch &#40;$pic_filetype&#41;
       	&#123;
       	  case '.jpg'&#58;
           		$read_function = 'imagecreatefromjpeg';
           		break;
       	  case '.png'&#58;
           		$read_function = 'imagecreatefrompng';
           		break;
       	&#125;
       	$src = @$read_function&#40;$path  . $pic_filename&#41;;
       	if &#40;!$src&#41;
       	&#123;
         		$error = TRUE;
         		$pic_resize = '';
       	&#125;
             // Muss das Bild resized werden?
       	else if&#40; &#40;$pic_width > $config_width&#41; or &#40;$pic_height > $config_height&#41; &#41;
       	&#123;
         		// Resize...
         		if &#40; &#40;&#40;$pic_width / $pic_height&#41; > &#40;$config_width / $config_height&#41;&#41; &#41;
         		&#123;
           			$resize_width = $config_width;
           			$resize_height = $config_width * &#40;$pic_height/$pic_width&#41;;
         		&#125;
         		else
         		&#123;
           			$resize_height = $config_height;
           			$resize_width = $config_height * &#40;$pic_width/$pic_height&#41;;
         		&#125;
         		$resize = @imagecreatetruecolor&#40;$resize_width, $resize_height&#41;;
         		@$imagecopyresampled&#40;$resize, $src, 0, 0, 0, 0, $resize_width, $resize_height, $pic_width, $pic_height&#41;;
       	&#125;
       	else
       	&#123;
         		$resize = $src;
       	&#125;
       	if &#40;!$error&#41;
       	&#123;
         		$pic_resize = $pic_filename;
    		// Bild speichern
         		switch &#40;$pic_filetype&#41;
         		&#123;
         		  case '.jpg'&#58;
             		@imagejpeg&#40;$resize, $path . $pic_resize, $resizequality&#41;;
             		break;
         		  case '.png'&#58;
             		@imagepng&#40;$resize, $path . $pic_resize&#41;;
             		break;
         		&#125;
         		@chmod&#40;$path . $pic_resize, 0777&#41;;
       	&#125;
    &#125;
    
    $host  = $_SERVER&#91;'HTTP_HOST'&#93;;
    $uri   = rtrim&#40;dirname&#40;$_SERVER&#91;'PHP_SELF'&#93;&#41;, '/\\'&#41;;
    $extra = $_POST&#91;'dest_header'&#93;;
    header&#40;"Location&#58; http&#58;//$host$uri/$extra"&#41;;
    exit;
    ?>

    Soweit der Code. Habe es grade wieder getestet mit Bildern um die 1MB. Die resize.php bricht ohne jegliche Fehlermeldung ab, ich kriege eine Blanko-Site.
    Ich habe jetzt gerade in einem anderen Forum noch diese Antwort hier gefunden, zu jemandem der wohl ein ähnliches Problem wie ich hatte.
    Möglicherweise ist das auch der Grund:
    Das wird wohl an der Größe der Bilder liegen. Jeder PHP-Prozess bekommt einen Speicher zugewissen, sobald das Script aber mehr als diesen Zugewiesenen braucht, ist Ende. Wie groß sind die Bilder? Je nach Kamera können das einige MB sein. Du könntest Dir eine PHP-Umgebung auf Deinen Rechner installieren, die erlaubte Speichermenge erhöhen und die Bilder auf Deinem Rechner verkleinern und dann uploaden.

    *** Nobody ***
    Die dargestellte Lösung ist für mich leider nicht brauchbar, es sollen ja andere Leute Bilder auf der Seite hochladen. Denen kann ich die im Zitat vorgeschlagene Lösung kaum zumuten

  5. #5
    Bandit
    Gast

    Standard

    Wie ist max_execution_time und memory_limit eingestellt? Kannst du in der ausgabe von
    Code:
    <?php
       phpinfo&#40;&#41;;
    ?>
    herrausfinden.

  6. #6
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    davon abgesehen, dass du einige SEHR veraltete Funktionen einsetzt (copy(), besser move_uploaded_file() ), das Script eklatante Sicherheitsmängel hat ($_POST-Variablen ungeprüft übernommen, read_function()), könnte der Mangel an Fehlermeldungen daran liegen, dass du bei relevanten Funktionen oft ein @ davor stehen hast, was die evtl. Fehlermeldung unterdrückt.
    Nimm diese doch bitte mal raus und setze noch
    Code:
    ini_set&#40;"display_errors", true&#41;;
    nach dem error_reporting.

    Wie siehts jetzt aus?

  7. #7
    Azubi(ne)
    Themenstarter

    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    upsi ^^
    sorry, habe ich jetzt gemacht, kriege folgende meldungen ausgegeben:
    Code:
    Notice&#58; session_start&#40;&#41; &#91;function.session-start&#93;&#58; ps_files_cleanup_dir&#58; opendir&#40;/tmp&#41; failed&#58; Permission denied &#40;13&#41; in pfad.../resize.php on line 6
    Falsches Dateiformat. Nur JPEG oder PNG erlaubt!
    (es war ein jpeg)

  8. #8
    Azubi(ne)
    Themenstarter

    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    max_execution_time: 90
    memory_limit: 50M
    @ bandit

    edit:
    @jojo:
    Überprüfungen der post-Variablen sind noch nicht integriert weil die Seite bisher nur für interne Tests läuft, das kommt noch, habe ich aber für den von mir angesprochenen Fehler als irrelevant erachtet.
    Den Bereich zum Eintragen in die DB habe ich auch wegen Irrelevanz rausgelöscht

    Aber was an der read_function falsch ist würde mich interessieren, bzw eine Alternative. Ich bin in diesem Bereich zugegebenermaßen nicht auf dem neusten Stand. Sollte mich da bei Gelegenheit mal weitergehend einlesen ^^

  9. #9
    Azubi(ne)
    Themenstarter

    Registriert seit
    20.06.2008
    Ort
    Paderborn
    Beiträge
    81
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    wo kann ich mir den titel php-dau des monats abholen? ^^

    ok, also habe das script jetzt nach kleiner korrektur auf dem webserver ans laufen gekriegt, mit nem 1,8mb jpg probiert und lief einwandfrei. ich hatte das script lokal per wamp getestet, und da hatte ich das problem mit großen bildern, da waren wohl max_execution_time und/oder memory_limit zu niedrig gesetzt.
    Dann hatte ich im Formular den Abfang auf Dateigröße eingebaut.
    Dann hatte ich es auf den Server gepackt.
    Und dann nicht mehr ohne die Begrenzung getestet.....
    Dann hab ich den Code hier reingestellt, dazu im editor eine kopie erstellt und diese etwas verschlankt zwecks übersichtlichkeit (ja ich weiß, ist immer noch lang). Und dabei ist beim Originalbild resizen das hier passiert:
    Code:
    @$imagecopyresampled&#40;$resize, $src, 0, 0, 0, 0, $resize_width, $resize_height, $pic_width, $pic_height&#41;;
    Das $ gehörte da nun wirklich nicht vor die funktion.
    Das ist mir dann beim testen nach dem hinweis von jojo (vielen dank) ohne die @ vor den funktionen aufgefallen. Zunächst kam nur die gepostete Fehlermeldung, nachdem ich dann auf die glorreiche (...) idee kam das (für diese tests unnötige) session_start() auszukommenteren, wurde ich auf besagtes $ aufmerksam...
    Und nun funktioniert es!


    @ Jojo, ich wäre dir aber dankbar wenn du mir noch sagst wo das Problem mit der read-function() liegt, und welche funktionen außer copy() veraltet sind.
    Sofern du mal Zeit und Muße haben solltest. Ansonsten google ich bei Gelegenheit noch ein paar Sachen.

Ähnliche Themen

  1. Freie Sound Library für Flashanimation
    Von john25 im Forum Flash Forum
    Antworten: 0
    Letzter Beitrag: 30.09.2007, 15:08
  2. Was haltet ihr von großen GIFs?
    Von synaptic im Forum Forum für Grafiken und Bildbearbeitung
    Antworten: 9
    Letzter Beitrag: 12.08.2007, 23:28
  3. MIL Library
    Von abrissbirne im Forum Forum für alle anderen Programmiersprachen
    Antworten: 0
    Letzter Beitrag: 27.06.2007, 13:23
  4. CSS Problem / IE zeigt Bilder mit zu großen Abstand
    Von ruuucx im Forum HTML & CSS Forum
    Antworten: 6
    Letzter Beitrag: 01.10.2006, 16:41
  5. Meinung zur Web Design Library
    Von mash99 im Forum Eure Homepages und Foren - Vorstellung und Bewertungen
    Antworten: 9
    Letzter Beitrag: 07.01.2005, 13:47

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •