[PHP] Upload Problem

tpp

Well-known member
ID: 14548
L
9 Mai 2006
115
2
ich habe folgendes problem.
ich möchte mit meiner seite auf einen neuen server umziehen
dort funktioniert aber mein uploadscript nicht mehr so wie es soll.
das script lädt bilder hoch und macht daraus dann ein thumb.
auf dem alten server hat es prima funktioniert, aber auf dem neuen server funktioniert es nur noch mit kleinen bilder (auflösung?). bei größeren bildern (von der digicam bspw.) bricht einfach das laden der seite ab und es ist dann nur ne "halbe" seite zu sehen. ihr könnts ja mal probieren.
alt:
https://www.pic2net.de
neu:
https://web255.server148.star-server.info

kann mir da jemand weiterhelfen? ich weiß nicht worans liegen kann.

hier mal die phpinfos
alt:
https://www.pic2net.de/phpinfo.php
neu:
https://web255.server148.star-server.info/phpinfo.php

und hier das script:
PHP:
<?php

// Variabeln festlegen
$allowed_types = "(jpg|jpeg|gif|png)";
$ok = 0;

// Formular wurde abgeschickt
if((isset($_POST["submit"])) AND ($_POST["submit"] == "Upload")) {

  // Wurde wirklich eine Datei hochgeladen?
  if(is_uploaded_file($_FILES["file"]["tmp_name"])) {

    // Gültige Endung? ($ = Am Ende des Dateinamens) (/i = Groß- Kleinschreibung nicht berücksichtigen)
    if(preg_match("/\." . $allowed_types . "$/i", $_FILES["file"]["name"])) {

      // Datei auch nicht zu groß
      if($_FILES["file"]["size"] <= $max_byte_size) {

        $datei = explode(".",$_FILES["file"]["name"]);
        $dateiname = time().".".$datei[1];

        // Alles OK -> Datei kopieren
        if(copy($_FILES["file"]["tmp_name"], "images/".$dateiname)) {

          $PicPathIn="images/";
          $PicPathOut="thumbs/";

          // Orginalbild
          $bild=$dateiname;

          // Bilddaten feststellen
          $size=getimagesize("$PicPathIn"."$bild");
          $breite=$size[0];
          $hoehe=$size[1];
          $neueBreite=250;
          $neueHoehe=intval($hoehe*$neueBreite/$breite);

          if($size[2]==1) {
            // GIF
            $altesBild=ImageCreateFromGIF("$PicPathIn"."$bild");
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe);
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0,
            $neueBreite,$neueHoehe,$breite,$hoehe);
            ImageGIF($neuesBild,"$PicPathOut"."$bild");
          }

          if($size[2]==2) {
            // JPG
            $altesBild=ImageCreateFromJPEG("$PicPathIn"."$bild");
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe);
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0,
            $neueBreite,$neueHoehe,$breite,$hoehe);
            ImageJPEG($neuesBild,"$PicPathOut"."$bild");
          }

          if($size[2]==3) {
            // PNG
            $altesBild=ImageCreateFromPNG("$PicPathIn"."$bild");
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe);
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0,
            $neueBreite,$neueHoehe,$breite,$hoehe);
            ImagePNG($neuesBild,"$PicPathOut"."$bild");
          }

          $groesse = $_FILES["file"]["size"];

          $format = $breite."x".$hoehe;

          $now = getdate();
          $zeit = $now["hours"].":".$now["minutes"];

          $datum = date("d.m.Y");

          if(isset($_POST["pass"])) {
            $passwort = $_POST["pass"];
          } else {
            $passwort = "";
          }

          $sql1 = "INSERT INTO pics (id,bildname,passwort,format,groesse,datum,zeit) VALUES ('','".$dateiname."','".$passwort."','".$format."','".$groesse."','".$datum."','".$zeit."')";

          $query1 = mysql_query($sql1);

          if(mysql_affected_rows()==0) {
            echo "Datei konnte nicht hochgeladen werden!<br><br>";
          } else {
            echo "Datei erfolgreich hochgeladen!<br><br>";
            echo "Dateiname: " . $dateiname . "<br>";
            echo "Größe: " . $_FILES["file"]["size"] . " Byte<br>";
            echo "MIME-Type: " . $_FILES["file"]["type"] . "<br><br>";
            echo "<img src=\"thumbs/" . $dateiname . "\"><br><br>";

            echo "<b>Thumbnail</b><br><br>";
            echo "Linkcode für Websites<br><input type=\"text\" size=\"75\" value=\"<a href="https://www.pic2net.de/index.php?section=thumb&pic=".$dateiname."" target="_blank"><img src="https://www.pic2net.de/thumbs/".$dateiname.""></a>\"><br><br>";
            echo "Linkcode für Foren<br><input type=\"text\" size=\"75\" value=\"[url=https://www.pic2net.de/index.php?section=thumb&pic=".$dateiname."][img]https://www.pic2net.de/thumbs/".$dateiname."[/img][/url]\"><br><br>";

            echo "<b>Original</b><br><br>";
            echo "Linkcode für Websites<br><input type=\"text\" size=\"75\" value=\"<a href="[url]https://www.pic2net.de"[/url] target="_blank"><img src="https://www.pic2net.de/images/".$dateiname.""></a>\"><br><br>";
            echo "Linkcode für Foren<br><input type=\"text\" size=\"75\" value=\"[url=https://www.pic2net.de][img]https://www.pic2net.de/images/".$dateiname."[/img][/url]\"><br><br>";

            echo "<b>Sonstiges</b><br><br>";
            echo "Sponsorlink (bei Weitergabe bitte diesen benutzen)<br><input type=\"text\" size=\"75\" value=\"https://www.pic2net.de/index.php?section=thumb&pic=".$dateiname."\"><br><br>";
            echo "Direktlink Thumbnail<br><input type=\"text\" size=\"75\" value=\"https://www.pic2net.de/thumbs/".$dateiname."\"><br><br>";
            echo "Direktlink Original<br><input type=\"text\" size=\"75\" value=\"https://www.pic2net.de/images/".$dateiname."\"><br><br><br>";

            $ok = 1;
          }

          $sql2 = "SELECT groesse,anzahl FROM statistik WHERE id=1";
          $query2 = mysql_query($sql2);
          while($row = mysql_fetch_array($query2)) {
            $groesse_saved = $row['groesse'];
            $anzahl_saved = $row['anzahl'];
          }

          $groesse_saved = $groesse_saved + $groesse;
          $anzahl_saved++;

          $sql3 = "UPDATE statistik SET groesse='".$groesse_saved."',anzahl='".$anzahl_saved."' WHERE id=1";
          $query3 = mysql_query($sql3);

        } else {

          echo "<font color=\"red\">Datei konnte nicht hochgeladen werden.</font>";

        }

      } else {

        $kb = $max_byte_size/1024;
        echo "<font color=\"red\">Die Datei darf nur eine Größe von " . $kb . " kb besitzen.</font>";

      }

    } else {

      echo "<font color=\"red\">Die Datei besitzt eine ungültige Endung.</font>";

    }

  } else {

    echo "<font color=\"red\">Keine Datei zum Hochladen angegeben.</font>";

  }

}

  if($ok==0) {
    echo "<form action=\"index.php?section=upload\" method=\"post\" enctype=\"multipart/form-data\" name=\"upload\">
    <input type=\"file\" name=\"file\"><br><br>
    Passwort: <input type=\"password\" name=\"pass\"><br><br>
    erlaubte Dateiendungen: jpg | jpeg | gif | png<br>
    Maximalgröße: ";
    $kb=$max_byte_size/1024;
    echo $kb." kb<br><br><br>
    <input type=\"submit\" name=\"submit\" value=\"Upload\">
    </form>";
  }

?>
 
Hallo,

schau dir mal die zwei Links unten an, daran könnte es liegen, da deine upload_max_filesize nur bei 2MB liegt.

https://de3.php.net/manual/de/ini.core.php#ini.upload-max-filesize
https://de3.php.net/manual/de/features.file-upload.common-pitfalls.php

Gruß

auf dem alten server ist dieser wert auf 2M
auf dem neuen server ist der wert auf 5M
also dürfte es doch daran nicht liegen oder? der neue wert ist ja größer...

und das script fängt zu große dateien ja auch ab...

ich hab das mal mit markern probiert und an dieser stelle hapert es glaube ich:
PHP:
          if($size[2]==1) { 
            // GIF 
            $altesBild=ImageCreateFromGIF("$PicPathIn"."$bild"); 
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe); 
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0, 
            $neueBreite,$neueHoehe,$breite,$hoehe); 
            ImageGIF($neuesBild,"$PicPathOut"."$bild"); 
          } 

          if($size[2]==2) { 
            // JPG 
            $altesBild=ImageCreateFromJPEG("$PicPathIn"."$bild"); 
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe); 
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0, 
            $neueBreite,$neueHoehe,$breite,$hoehe); 
            ImageJPEG($neuesBild,"$PicPathOut"."$bild"); 
          } 

          if($size[2]==3) { 
            // PNG 
            $altesBild=ImageCreateFromPNG("$PicPathIn"."$bild"); 
            $neuesBild=ImageCreateTrueColor($neueBreite,$neueHoehe); 
            imagecopyresampled($neuesBild,$altesBild,0,0,0,0, 
            $neueBreite,$neueHoehe,$breite,$hoehe); 
            ImagePNG($neuesBild,"$PicPathOut"."$bild"); 
          }
 
ich hab noch ein bisschen rumprobiert...es liegt wohl am format...ich habe mal zwei neue bilder erstellt und versucht hochzuladen.
das erste mit 1024x768 und das zweite mit 2032x1520 (format der digicam)

das erste ging ohne probleme, das zweite wieder nicht...
woran kann das liegen, dass das bild mit der hohen auflösung nicht umgewandelt wird?
 
ich habe da nen verdacht. in der neuen phpinfo() steht ein eintrag:
memory_limit 8M
auf dem alten server gibt es den eintrag nicht.

wenn ich bspw. in photoshop ein bild mit dem format 2032x1520 erstellen will zeigt mir photoshop 8,84M an...wenn ich es dann speichere wird es ja sozusagen "gepackt", denn es ist ja dann nichtmehr so groß...
aber wenn jetzt diese grafikfunktionen das bild bearbeiten wollen, müssen die das ja sicher wieder "entpacken", oder?
dann können die es ja nicht weiter bearbeiten, da das memory_limit bei 8M liegt. ergo, abbruch des scriptes....

also müsste ich ja rein therotisch nur das memory_limit erhöhen lassen oder halt bilder abfangen, die "entpackt" größer als dieses memory_limit sind.

(btw. wie könnte ich sowas überprüfen?)

sehe ich das richtig oder liege ich mit der vermutung falsch?