Uploadfehler trotz Änderungen in php.ini

digi333

Grünschnabel
Bei dem folgenden Quelltext hab ich das Problem, dass große Dateien (ca. 50 MB) immer dazu führen das der Else-Zweig genutzt wird. Bei kleineren Dateien (2MB) geht er in die IF-Anweisung. Nun hab ich gelesen, man muß in der php.ini ein paar Veränderungen machen. Folgende hab ich bereits gemacht

1. memory_limit = 100M
2. post_max_size = 100M
3. upload_max_filesize = 100M


2 Time-Werte (max_execution_time, post_max_size, max_input_time) hab ich auch schon hoch gesetzt. Was kann es sonst noch sein Die Forum-Suche hab ich verwendet.

Mich wundert, dass er die Submit-Anweisung nicht so will... Hilfe!

PHP:
$max_byte_size = 100000000;//2097152;
$allowed_types = "(jpg|jpeg|gif|bmp|png|mpg)";
$filepath      = "uploaded";

// Formular wurde abgeschickt
if ($_POST["submit_upload"] == "Upload")
{
... tue was
}
else
{
... tu was anderes
}
 
Eine Submit anweisung erhält keine Daten einfach gesagt, deswegen mach es lieber so:

PHP:
if(isset($_POST['submit_upload']))
{ ...
 
Hab ich geändert ohne Erfolg... Bei kleinen Dateien funktioniert es und bei großen nicht. :confused:

Ich bin blutiger Anfänger... deswegen schicke ich mal den Quelltext. Eigentlich funktioniert alles, aber halt nur für kleine Dateien. Ich hab mal meine php.ini hochgeladen bei http://rapidshare.com/files/44142081/php.ini.html


Bei großen Dateien kommt immer "Bitte benutzen Sie das Upload Formular.".

PHP:
<?
// eigentlicher Upload
// Variabeln festlegen
$max_byte_size = 1000000000;//2097152;
$allowed_types = "(jpg|jpeg|gif|bmp|png|mpg)";
$filepath      = "uploaded";

// Formular wurde abgeschickt
if(isset($_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 nicht zu groß?
           if ($_FILES["file"]["size"] <= $max_byte_size)
           {
               // Erzeuge einen Uploadordner mit Benutzerrechten
               @mkdir($filepath, 0700);

               // Uploaddatum
               $todaydate = date("dmY_His");

               mysql_connect("localhost", "root", "");
               mysql_select_db("xpma");
               // Uploadinformationen speichern (Datei, Datum, Benutzer)
               mysql_query("INSERT INTO upload (File, Date, User) VALUES ('".$_FILES["file"]["name"]."', '".$todaydate."', 'anonymen User')");


               // Alles OK -> Datei kopieren
               if (copy($_FILES["file"]["tmp_name"], $filepath."/".$_FILES["file"]["name"]))
               {
                  echo "Datei wurde erfolgreich hochgeladen!<br><br>";

                  // Dateiendung
                  $ending = substr($_FILES["file"]["name"], -3, 3);

                  // Konvertierung bei Video
                  if ($ending == "mpg")
                  {
                      // Konvertiert das hochgeladene Video ins Flashformat
                      pclose(popen("ffmpeg.exe -i ".$filepath."/".$_FILES["file"]["name"]." -b 360 -r 25 -s 320x240 -hq -deinterlace  -ab 56 -ar 22050 -ac 1  ".$filepath."/".$_FILES["file"]["name"].".flv 2>encode.txt", 'wr'));
                  }

                  // Videoverarbeitung
                  // Umwandeln in Flash und einbetten
                  if ($ending == "mpg")
                  {
                      ?>
                      <script type="text/javascript" src="swfobject.js"></script>
                      <p id="player1"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</p>
                         <script type="text/javascript">
                                 var s1 = new SWFObject("flvplayer.swf","single","640","480","7");
                                 s1.addParam("allowfullscreen","true");
                                 s1.addVariable("file","<?echo $filepath."/".$_FILES["file"]["name"].".flv";?>");
                                 s1.addVariable("image","<?echo $filepath."/".$_FILES["file"]["name"].".jpg";?>");
                                 s1.write("player1");
                         </script>
                      <?
                  }

                  else
                  {
                      echo "Link: <a href=\"".$filepath."/".$_FILES["file"]["name"].".jpg\">".$_FILES["file"]["name"]."</a><br>";
                  }
                  echo "<br> Name: ".$_FILES["file"]["name"]."<br>";
                  echo "Größe: ".$_FILES["file"]["size"]." Byte<br>";
                  echo "MIME-Type: ".$_FILES["file"]["type"]."<br>";

                  include("./write_mas.inc.php");
                  // Analysiere Video mit XPMA (eigene Anwendung aus Diplomarbeit)
                  pclose(popen("C:\Programme\www.nue.tu-berlin.de\xpma\xpmac.exe ./foo/upload.mas -f:".$filepath."/".$_FILES["file"]["name"], 'wr'));
               }
               // Fehler beim hochladen
               else
               {
                  echo "Datei konnte nicht hochgeladen werden.";
               }
           }
           // Maximale Groesse wurde ueberschritten
           else
           {
               echo "Die Datei darf nur eine Größe von ".$max_byte_size." Byte besitzen.";
           }
       }
       // Falsche Endung
       else
       {
           echo "Die Datei besitzt eine ungültige Endung.";
       }
   }
   // Leeres Uploadfeld
   else
   {
       echo "Keine Datei zum Hochladen angegeben.";
   }
}
// Hinweis zeigen
else
{
   echo "Bitte benutzen Sie das Upload Formular.";
}
?>
 
Hallo!
Bei großen Dateien kommt immer "Bitte benutzen Sie das Upload Formular.".
Demnach scheint das Script ja erst garnicht zu erkennen dass das Formular gesendet wurde.
Wie lange dauert es denn bis die Meldung kommt?
Hast Du mal probiert bis wieviel MB es noch funktioniert (z.b. 20MB, 50MB usw.)?

Gruss Dr Dau
 
Vielleicht sollte man das Formular mal sehen, meist vergessen die Leute, die Option "enctype="multipart/form-data" in das <form>-Tag einzufügen.

Desweiteren fällt auf, dass man die TMP-Datei nicht mit "copy()" kopiert,sondern mit "move_uploaded_file()" und man die Dateigrösse nicht mit der vom Browser geschickten grösse vergleicht sondern besser mit filesize($_FILES['file']['tmp_name']) auf dem Server, denn die Dateigrösse lässt sich im HTML-Header manipulieren.

LG
Andy
 
Option "enctype="multipart/form-data" ist im Formular enthalten. Auffällig ist halt das kleine Dateien hochgeladen werden und große nicht... PHP.ini hatte ich hochgeladen bei rapidshare. Schaut es euch mal an.

Ich hab eben mal getestet... bis 20 MB macht er den Upload. Danach ist der Fehler. In welcher Datei muss ich noch was ändern
 
Zuletzt bearbeitet:
Also wenn "submit_upload" der Name von dem Submit-Button ist, sollte der enctype (in diesem Fall) eigentlich keine Rolle spielen.
Denn es wird ja zuerst geprüft ob "submit_upload" gesendet wurde.
Das Script liefert aber ein FALSE zurück ("submit_upload" wurde also nicht gesendet) und darum wird die Meldung ausgegeben.
Somit spielt der weitere Ablauf zur Zeit auch keine Rolle (wird ja eh nicht durchgeführt).

@digi333, setze am Anfang des Scripts mal
PHP:
error_reporting(E_ALL);
ein.
 
Ja und dann? Ich sehe keine Fehler-Message...

Es liefert ein False zurück bei großen Dateien... ansonsten funktioniert es ja. Also Einstellungssache, oder?
 
Merkwürdig.....
Ich habe jetzt auch mal getestet.
15MB funktioniert.
17,5MB funktioniert nicht.
Getestet mit IE 5.5, MOZ 1.7.5 und Opera 7.54.
Den Browser kann man also wohl ausschliessen.
Das Script kann man wohl auch ausschliessen, da es ja prinzipiell funktioniert (von Fehlermeldungen bei mir wegen der fehlenden Datenbank etc. mal abgesehen).
Wenn es an einer Einstellung in der php.ini liegen würde, hätte PHP einen Fehler ausgespuckt (darum auch error_reporting(E_ALL)).

Das Komische ist, dass das Array von var_dump($_POST) und var_dump($_FILES) leer bleibt, wenn die Datei zu gross ist.
Es wird also der Anschein erweckt als wenn das Formular nie abgeschickt wurde.
Auch Änderungen an der httpd.conf haben nichts geändert.
Dass es bei Dir mit Dateien bis 20MB funktionieren und bei mir schon 17,5MB nicht funktionieren, lässt mich fast vermuten dass es mit dem (freien) RAM zusammenhängt.
 
Zurück