php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.09.2010, 15:44  
Neuer Benutzer
 
Registriert seit: 18.08.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
ArtiHl befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Bild zu groß?

Hallo, hab nen ganz einfaches Thumbscript, welches auch so funktioniert wie es soll, ausser das Bild ist zu groß.
Bei ca. 1mb bildgröße wird zwar das bild hochgeladen und an den richtigen ort gebracht, aber das thumb wird nicht erstellt.
Leider spuckt er auch keine Fehlermeldung aus, der bildschirm bleibt weiß.
Laut phpinfo hab ich:
-PHP Version 5.2.11
-post_max_size 8M
-upload_max_filesize 2M
-GD Version bundled (2.0.34 compatible)

Und jetzt bin ich völlig verwirrt.
Bild1 = 1,46mb jpg funktioniert nicht
Bild2 = 3,10mb jpg funktioniert???
Hier mal der Code:
PHP-Code:
error_reporting(E_ALL);
$edit=$_POST['edit'];
$file=$_POST['bild'];
$Bild_Titel=$_POST['Titel'];
$Error=0;
$infos getimagesize($_FILES['userfile']['tmp_name']);
   
//Fehlercode überprüfen
if($_FILES['userfile']['error']>0)
  {
     echo
'Problem: ';
     switch(
$_Files['userfile']['error'])
       {
            case 
1:$Error='Datei ist zu groß(Standard)'; break;
            case 
2:$Error='Die Datei ist zu groß(Admin festgelegte größe)'; break;
            case 
3:$Error='Dateiupload unvollständig'; break;
            case 
4:$Error='Keine Datei wurde hochgeladen'; break;
            echo 
$Error;
     }
   exit;
    }    
//Prüfen ob Bilddatei
$typ=array("image/gif","image/png","image/jpg","image/jpeg");
if(!
in_array($_FILES['userfile']['type'],$typ))//für Bilddatei statt "image/gif" = "image/jpeg"(auch mime-typen genannt)
  
{
     
$Error='Die hochgeladene Datei ist keine Bilddatei!Bitte andere Datei hochladen';
     echo 
$Error;
     exit;
    }
    
//Name überpfrüfen
$i=1;
while(
file_exists('../../Galerie/'.$_FILES['userfile']['name']))
{
    
$_FILES['userfile']['name']=$_FILES['userfile']['name'].'_'.$i;
    
$i++;
}
//Datei verschieben
$upload='../../Galerie/'.$_FILES['userfile']['name'];
if(
is_uploaded_file($_FILES['userfile']['tmp_name']))
  {
     if(!
move_uploaded_file($_FILES['userfile']['tmp_name'],$upload))
       {
          
$Error='Datei konnte nicht verschoben werden';
          echo 
$Error;
            exit;
         }
  }
else
    {
     
$Error='Problem beim Hochladen';
     echo 
$Error;
     exit;
    }
    
//Type abfangen
/*      $filetype = $_FILES[$userfile_name]['type'];
   
      switch($filetype)
      {
         case "image/pjpeg":
            $infos[2] = 2;
         break;
         
         case "image/gif":
            $infos[2] = 1;
         break;
         
         case "image/jpeg":
            $infos[2] = 2;
         break;
         
         case "image/x-png":
            $infos[2] = 3;
         break;
         //usw.
      }
*/
$thumb='../../Galerie/thumbs/'.$_FILES['userfile']['name'];
$file_name='../../Galerie/'.$_FILES['userfile']['name'];
resize($file_name$thumb150$infos);
/*Thumb erstellen*/

function setTransparency($new_image,$image_source)
    {  
            
$transparencyIndex    imagecolorallocate($new_image255255255);
            
imagefill($new_image00$transparencyIndex);
             
imagecolortransparent($new_image$transparencyIndex);
    }

function 
resize($file$save$width$infos$height=false)
{
   if(!
$height)
      
$height $width;
            
   
$iWidth $infos[0];
   
$iHeight $infos[1];
   
$iRatioW $width $iWidth;
   
$iRatioH $height $iHeight;
   
   if(
$iRatioW $iRatioH)
   {
      
$iNewW $iWidth $iRatioW;
      
$iNewH $iHeight $iRatioW;
   }
   else
   {
      
$iNewW $iWidth $iRatioH;
      
$iNewH $iHeight $iRatioH;
   } 
   
   if(
$infos[2] == 1)
      
$imgA = @imagecreatefromgif($file);
   elseif(
$infos[2] == 2)
      
$imgA = @imagecreatefromjpeg($file);
   elseif(
$infos[2] == 3)
      
$imgA = @imagecreatefrompng($file);
      
      
   
$imgB = @imagecreatetruecolor($iNewW$iNewH);
   
   if(!
$imgB)
      
$imgB = @imagecreate($iNewW$iNewH);
   if(
$infos[2] == 1)
      
setTransparency($imgB,$imgA); 
   elseif(
$infos[2] == 3){
      
imagealphablending($imgBfalse);
      
imagesavealpha($imgBtrue);
   }
   
   if(!@
imagecopyresampled($imgB$imgA0000$iNewW$iNewH$infos[0], $infos[1]))
      @
imagecopyresized($imgB$imgA0000$iNewW$iNewH$infos[0], $infos[1]);
      
   
$re null;
   
umask(0000);
   
   if(
$infos[2] == 1)
      
$re imagegif($imgB$save);
   elseif(
$infos[2] == 2)
      
$re imagejpeg($imgB$save100);
   else
      
$re imagepng($imgB$save);
    
   return 
true;
}
?> 

Geändert von ArtiHl (07.09.2010 um 15:59 Uhr).
ArtiHl ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.09.2010, 16:01  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Schau mal nach, auf was das memory_limit gesetzt wurde. Ein Bild braucht zum bearbeiten min x * y * 3 Byte RAM.

Aber ohne die entsprechende Fehlermeldung kann man nur raten.
draco88 ist offline  
Alt 07.09.2010, 16:03  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

das scheint weniger an der Größe der Datei, als mehr am JPEG-Header zu liegen - es gibt genügend Dateien mit fehlerhaftem Header ....
eagle275 ist offline  
Alt 07.09.2010, 16:04  
Neuer Benutzer
 
Registriert seit: 18.08.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
ArtiHl befindet sich auf einem aufstrebenden Ast
Standard

memory_limit 128M

Ja, leider kommt keine Fehlermeldung egal ob
PHP-Code:
error_reporting(E_ALL); 
oder
PHP-Code:
error_reporting(-1);
ini_set('display_errors'1); 
Zitat:
Zitat von eagle275 Beitrag anzeigen
das scheint weniger an der Größe der Datei, als mehr am JPEG-Header zu liegen - es gibt genügend Dateien mit fehlerhaftem Header ....
hmm, und ich gehe stark davon aus das ich dagegen nichts machen kann?
Wie könnte ich vorher prüfen ob der header richtig ist, um wenigstens eine Fehlermeldung ala:
"Die Bilddatei ist beschädigt, bitte speichern sie die Bilddatei neu ab"
zu erzeugen?
ArtiHl ist offline  
Alt 07.09.2010, 16:13  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

in php wenig - du kannst höchstens die Uploader bitten die Grafik-Datei vorher mal in einem "guten" Programm zur Bildbearbeitung zu öffnen und anschließend gleich wieder zu speichern - das sollte zumindest die Header-Probleme minimieren ...

evtl kannst du ja das Bild mit gd-Funktionen (image..) irgendwie untersuchen oder nimm direkt eine der image-Funktionen für das erzeugen des Thumbnails
eagle275 ist offline  
Alt 07.09.2010, 16:15  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

Kannst es ja jetzt erstmal mit nem selbst erstellten Bild testen, ob es wirklich an kaputten Header-Daten liegt. Ansonsten suchts du evtl Stundenlang in der falschen Richtung nach ner Lösung
draco88 ist offline  
Alt 07.09.2010, 16:24  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

ansonsten nimm mal das hier als Anregung:

int imagecopyresized ( resource $dst_im, resource $src_im, int $dstX, int $dstY, int $srcX, int $srcY, int $dstW, int $dstH, int $srcW, int $srcH );

Mit imagecopyresized() kopiert man einen Teil eines Bildes (src_im) in ein
anderes Bild (dst_im). Mit src_X und src_Y werden die X- und Y-Koordinaten
des zu kopierenden Teils angegeben. Die Breite wird dabei mit src_W und src_H
bestimmt.
Der Ausschnitt wird im Bild dst_im an die X- und Y-Koordinaten dst_X bzw.
dst_Y kopiert und dabei auf die Breite dst_W und die Höhe dst_H gebracht.
Unterscheiden sich die Breite dst_W oder die Höhe dst_H von den Abmessungen
des ursprünglichen Ausschnitts, so wird der Ausschnitt gedehnt oder
geschrumpft.

Sie auch:

• imagecreatefromgif()
• imagecreate()
• imagecolorallocate()
• imagegif()



nach unten nach oben Beispiel

PHP-Code:

<?PHP
$image 
imagecreatefromjpeg 'imagearc.jpg' );

$image1 imagecreate 300150 ); 

$farbe_body=imagecolorallocate $image1222222222 ); 

imagecopyresized $image1$image30255060150309126 ); 

imagejpeg $image1'<DATEINAME>'100 ); // imaga-Objekt, Dateiname,Qualität
//
eagle275 ist offline  
Alt 07.09.2010, 16:28  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von ArtiHl Beitrag anzeigen
Leider spuckt er auch keine Fehlermeldung aus, der bildschirm bleibt weiß.
PHP-Code:
      $imgA = @imagecreatefromgif($file);
...
      
$imgA = @imagecreatefromjpeg($file);
...
      
$imgA = @imagecreatefrompng($file);
      
...      
   
$imgB = @imagecreatetruecolor($iNewW$iNewH);
   
...
      
$imgB = @imagecreate($iNewW$iNewH);
...
  
   if(!@
imagecopyresampled($imgB$imgA0000$iNewW$iNewH$infos[0], $infos[1]))
      @
imagecopyresized($imgB$imgA0000$iNewW$iNewH$infos[0], $infos[1]); 
Und da wunderst du dich?
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline  
Alt 07.09.2010, 16:29  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.563
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

@ -- is ja sowas von aua ....
eagle275 ist offline  
Alt 07.09.2010, 16:46  
Neuer Benutzer
 
Registriert seit: 18.08.2010
Beiträge: 28
PHP-Kenntnisse:
Anfänger
ArtiHl befindet sich auf einem aufstrebenden Ast
Standard

, ja so wird das nix.
Hab jetzt meine Fehlermeldung, nu geh ich gucken ob ich daran was ändern kann.

"Fatal error: Allowed memory size of 52428800 bytes exhausted (tried to allocate 20128 bytes)...."

Liegt wohl an der auflösung?
eagle275
"
Ein Bild braucht zum bearbeiten min x * y * 3 Byte RAM.
"
Denn die anderen Bilder die an sich Größer sind klappen ja.
ArtiHl ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bild erstellen, speichern und gespeichertes Bild anzeigen Garog PHP Tipps 2009 26 11.07.2010 18:01
[GELÖST] Bild in die Datenbank einspielen Timmbow Datenbanken 15 16.01.2010 19:45
Bildeffekte berechnen (Bild in den Hintergrund anschregen) Frank PHP-Fortgeschrittene 2 28.11.2009 02:20
Bild in enuem Fenster öffnen? K3HLIM JavaScript, Ajax und mehr 6 10.04.2009 20:43
Wenn das Bild zu groß is echo erscheinen lassen Canca PHP Tipps 2009 9 09.03.2009 18:33
[Erledigt] bild als link mit mouseover ohne zeilenumbruch SteiniKeule HTML, Usability und Barrierefreiheit 12 30.10.2008 21:12
[Erledigt] Bild verändert sich auf Klick Script errox JavaScript, Ajax und mehr 1 21.10.2008 20:51
Bild onMouseOver einblenden rocco HTML, Usability und Barrierefreiheit 8 22.02.2008 12:52
Transparentes Bild über Bild legen *update gelöst* Broadcast PHP-Fortgeschrittene 11 04.02.2008 15:27
[Erledigt] Bild aus Datei in Bild einfügen PHP Tipps 2005-2 1 07.08.2005 23:36
[PHP«Image] Bild in ein anderes Bild einsetzen PHP Tipps 2005-2 4 07.08.2005 19:39
Uploadformular Bild ist zu groß PHP Tipps 2004-2 4 18.12.2004 15:26
Bild aus Server anzeigen lassen flual2000 PHP Tipps 2004 4 26.10.2004 16:33
Bild größe hat prob mit umbenennung. JEGO PHP Tipps 2004 1 08.07.2004 16:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php bild ist zu größ, [tmp_name] => [error] große bilder, jpeg fehlermeldung das bild ist zu groß, bild png beschädigt oder zu gross, imagecopyresized falsche koordinaten, php files problem \bild zu groß\, bild beschädigt oder zu groß, switch($_files[$userfile name][\'error\']), php _files error zu groß, imagecreatefrompng zu große auflösung, allowed memory size of 52428800 bytes exhausted imagecreate, fehler bilddatei datei zu gross, imagepng bild zu groß, fehlermeldung bild beschädigt oder zu groß, fatal error: allowed memory size of 52428800 bytes exhausted (tried to allocate 20128 bytes) in, bild zu groß php, cs bildzugroß, php imagecopyresized bild zu groß, lg bilddatei zu groß für hintergrund, fehlermeldung \bild ist zu groß\

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum