Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

PHP: Fehlermeldung verhindern. - Datei Upload

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 18.10.2010, 18:34

Hallo,

bin gerade auf der Suche nach einer Lösung für meine ausgegebene Fehlermeldung.

Code: Alles auswählen

Warning: POST Content-Length of 134981173 bytes exceeds the limit of 134217728 bytes in Unknown on line 0
Dies ist soweit ja auch richtig, die Datei ist für den Upload zu groß, jedoch möchte ich gerne meine eigene Fehlermeldung ausgeben und nicht die von PHP.

Wie kann ich diese unterdrücken?

Habe schon error_reporting(0); eingestellt, jedoch ohne Erfolg.

Bekomme diese einfach nicht weg.

Gruß
Daniel

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

xlb
PostRank 5
PostRank 5
Beiträge: 282
Registriert: 13.08.2009, 21:11

Beitrag von xlb » 19.10.2010, 17:11

Könntest du mal deine phpinfo und ggf. relevanten Quellcode ins Netz stellen?

Kann dein Problem auf die Schnelle nicht reproduzieren. Bekomme, egal welche Upload-Fehler ich provoziere (und ggf. explizit anzeigen lasse), trotzdem immer "brav" das $_FILES-Array - mit der entsprechenden Fehler-Nummer ...

Ohne die Fehleranzeige händisch "scharf zu schalten", kommt weder eine Notice, noch ein Warning oder Error ...

danielsun174
PostRank 6
PostRank 6
Beiträge: 406
Registriert: 26.12.2008, 22:46

Beitrag von danielsun174 » 19.10.2010, 18:18

einfach vor die php funktion ein @ machen. also so z.B:

Code: Alles auswählen

<?php @filgetscontent&#40;&#41;;?>

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


threadi
PostRank 2
PostRank 2
Beiträge: 49
Registriert: 10.01.2006, 22:13
Wohnort: Leipzig

Beitrag von threadi » 19.10.2010, 20:32

@danielsun174: Damit unterdrückt man lediglich die Fehlerausgabe, aber nicht den Fehler.

xlb
PostRank 5
PostRank 5
Beiträge: 282
Registriert: 13.08.2009, 21:11

Beitrag von xlb » 19.10.2010, 21:32

@danielsun174
danielsun174 hat geschrieben:einfach vor die php funktion ein @ machen.
Welche "Funktion" ...? Hast du dir'n Upload schon mal näher angesehen? :wink:

nerd
PostRank 10
PostRank 10
Beiträge: 4023
Registriert: 15.02.2005, 04:02

Beitrag von nerd » 20.10.2010, 09:33

kanns vielleicht sein das der upload groesser als in der php.ini erlaubt ist...?
https://drupal.org/node/97193

xlb
PostRank 5
PostRank 5
Beiträge: 282
Registriert: 13.08.2009, 21:11

Beitrag von xlb » 20.10.2010, 12:26

nerd hat geschrieben:kanns vielleicht sein das der upload groesser als in der php.ini erlaubt ist...?
Jo, darauf läuft's hinaus. Allerdings wird eine solcher Fehler bei mir bekannten/aktuellen PHP-Versionen nicht mit einer Warnung quittiert, sondern durch einen entsprechenden Fehler-Code im $_FILES-Array - um eben eine Skript-seitige Reaktion auf den Fehler zu ermöglichen.

Aufschluss könnte ein Blick in die PHP-Info und den Quellcode geben ...

Ein Blick ins Google Orakel zeigt, dass calusa-xx mit dem Warning-Problem nicht allein da steht. Lösung brachte in diesen Fällen tatsächlich nur ein Anpassen entsprechender Parameter in der Ini (was für die Meisten wahrscheinlich so ohne weiteres nicht möglich sein dürfte) - das kann's aber nicht sein ...

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 20.10.2010, 12:36

Hallo,

hier einmla das Script in verkürzter Version:

Code: Alles auswählen

<?php
error_reporting&#40;0&#41;;

$daten&#91;"dateiendung"&#93; = 'jpg|gif|doc';
$daten&#91;"dateigroesse"&#93; = '10';

if&#40;$_FILES&#91;"datei"&#93; && !$_FILES&#91;"datei"&#93;&#91;"error"&#93;&#41;
&#123;
	// Prüfen ob Dateiupload erlaubt / möglich
	if&#40;$_FILES&#91;"datei"&#93; && eregi&#40;"&#40;".$daten&#91;"dateiendung"&#93;."&#41;$", $_FILES&#91;"datei"&#93;&#91;'name'&#93;&#41;&#41;
	&#123;
		// Umrechnung MB in Byte
		$dateigroesse = $daten&#91;"dateigroesse"&#93; * 1048576; // Maximal 10MB erlaubt


		if&#40;$_FILES&#91;"datei"&#93;&#91;"size"&#93; < $dateigroesse&#41;
		&#123;
			// Nächsten freien Platz ermitteln
			$p = "0";

			while&#40;$_SESSION&#91;"auftrag"&#93;&#91;"datei"&#93;&#91;$p&#93;&#41;
				++$p;


			// Dateiupload in SESSION
			$_SESSION&#91;"datei"&#93;&#91;$p&#93; = $_FILES;
			$_SESSION&#91;"datei"&#93;&#91;$p&#93;&#91;"daten"&#93; = file_get_contents&#40;$_FILES&#91;"datei"&#93;&#91;"tmp_name"&#93;&#41;;

			$_GET&#91;"msg"&#93;&#91;&#93; = 'Datei hochgeladen.';
		&#125;
		else
		&#123;
			$_GET&#91;"msg"&#93;&#91;&#93; = 'Datei zu groß maximal '.$daten&#91;"dateigroesse"&#93;.' Megabyte.';
		&#125;
	&#125;
	else
	&#123;
		$_GET&#91;"msg"&#93;&#91;&#93; = 'Dateityp nicht erlaubt.';
	&#125;
&#125;


// Content erstellen und ausgeben
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http&#58;//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http&#58;//www.w3.org/1999/xhtml" lang="de" xml&#58;lang="de">

<head>
	<link rel="stylesheet" type="text/css" href="/css/main.css" media="screen" />
</head>

<body style="background&#58; #fff; padding&#58; 0; margin&#58;0;">

'.$msg.'

<form action="'.phpself&#40;&#41;.'" method="post" enctype="multipart/form-data">
	<input type="file" name="datei" style="width&#58; 400px;" />
	<input type="submit" name="submit" class="submit" value="Datei hochladen" />
</form>';

// Dateiübersicht erstellen
if&#40;$_SESSION&#91;"auftrag"&#93;&#91;"datei"&#93;&#41;
&#123;
	echo '<br /><br />';

	foreach&#40;$_SESSION&#91;"datei"&#93; as $k=>$v&#41;
		echo '<a target="_blank" href="'.phpself&#40;&#41;.'?show=yes&datei='.$k.'">'.$v&#91;"datei"&#93;&#91;"name"&#93;.'</a>';
&#125;


echo '</body>
</html>';
?>
Da die Fehlermedung in Zeile 0 auftritt ändert ein @ von file... garnichts...

Her noch ein Aufzug aus der phpinfo()

Code: Alles auswählen

PHP Version 5.3.0
upload_max_filesize 128M 128M 
track_errors Off Off 

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 20.10.2010, 12:37

Achso die Datei zum testen ist natürlich größer als 128 MB.

Gruß
Daniel

xlb
PostRank 5
PostRank 5
Beiträge: 282
Registriert: 13.08.2009, 21:11

Beitrag von xlb » 20.10.2010, 12:56

Code: Alles auswählen

<form action="'.phpself&#40;&#41;.'" method="post" enctype="multipart/form-data"> 
   <input type="file" name="datei" style="width&#58; 400px;" /> 
   <input type="submit" name="submit" class="submit" value="Datei hochladen" /> 
</form>'; 
Was ist phpself()? Da müsste/könnte stehen $_SERVER['PHP_SELF'], um die Daten an sich selbst zu schicken ("Affen-Formular"). Oder hast du dir eine eigene Funktion geschrieben?

Wenn als "action" im Formular Murks angeben wird, würde dies zumindest das ...
... in Unknown on line 0
... erklären. Das verarbeitende Skript-File existiert nicht! Somit landest du im "Nichts", der Fehler wird vom Interpreter erzeugt und ausgegeben. Da kommt nie ein Skript zum Zuge, dass den Fehler abfangen oder anzeigen könnte. Daher auch kein error_reporting(0).

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 20.10.2010, 13:23

Nein, da könnte auch $_SERVER["PHP_SELF"] stehen ist fast das selbe.

Das Script funktioniert einwandfrei, nur eben nicht, wenn die Datei zu groß ist.

Gruß
Daniel

SloMo
PostRank 10
PostRank 10
Beiträge: 4880
Registriert: 04.01.2005, 18:26

Beitrag von SloMo » 20.10.2010, 16:02

Das Error-Reporting für Warnungen muss in diesem Fall vor der Ausfürung abgeschaltet werden, also in der php.ini oder per .htaccess-Eintrag. Im Script ist es zu spät. Deshalb ja auch "Unknown on line 0".

Wirths Media
PostRank 9
PostRank 9
Beiträge: 2050
Registriert: 20.09.2004, 20:25

Beitrag von Wirths Media » 20.10.2010, 16:49

Eigentlich wollte ich error_reporting nicht auf null stellen.

Gibt es keine andere Lösung?

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 20.10.2010, 16:53

Slomo hat es eigentlich schon gesagt.

und das hier ist Quatsch
Allerdings wird eine solcher Fehler bei mir bekannten/aktuellen PHP-Versionen nicht mit einer Warnung quittiert
Die Warnungen werden in allen Versionen erzeugt. Die Übergabe ins "Rückgabe-Array" ist nur ein Zusatz um darauf entsprechend reagieren zu können. https://www.php.net/manual/de/features. ... errors.php

Also entweder Du schaltest error_reporting ab, oder Du unterdrückst die Fehlerausgabe auf dem Display und aktivierst dafür das Error-Log. Letzteres sollte eigentlich bei allen produktiven Systemen verwendet werden. Die Fehler werden dann ja weiterhin bekannt gegeben, nur eben nicht mit auf dem Bildschirm.
You're strongly advised to use error logging in place of error displaying on production web sites.
https://www.php.net/manual/de/errorfunc ... lay-errors
https://www.php.net/manual/de/errorfunc ... .error-log

SloMo
PostRank 10
PostRank 10
Beiträge: 4880
Registriert: 04.01.2005, 18:26

Beitrag von SloMo » 20.10.2010, 17:34

Eventuell mit einem versteckten Formularfeld MAX_FILE_SIZE verhindern, dass der normale User so eine große Datei schickt. Da kann man vielleicht auch clientseitig per JavaScript etwas drehen, um eine eigene Fehlermeldung anzuzeigen. Das ersetzt aber keine serverseitigen Maßnahmen.

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag