fread(): supplied argument is not a valid stream resource
Phil
- php
0 Jurik1 Vinzenz Mai
Hallo Zusammen,
Ich verwende das untenstehende Script, leider erscheint immer die Fehlermeldung fread(): supplied argument is not a valid stream resource. Ich finde einfach nicht heraus, was genau das Problem sein soll. Um Hilfe wäre ich Froh, vielen Dank!
<html>
<head> </head>
<form action="http://www.abc.de/document/admin-mysql.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="modul" value="1">
Wählen Sie eine Datei
<input type="file" name="datei"><br>
<input type="submit" value="hochladen">
</form><br><br>
Bild zeigen<br>
<form action="http://www.abc.de/document/admin-mysql.php">
<input type="hidden" name="modul" value="2">
Nummer des Bildes <input type="text" name="nummer"><br>
<input type=submit value="Bild anzeigen">
</form><br>
<a href="http://www.abc.de/document/admin-mysql.php">Alle Bilder zeigen</a>
</form>
<?
$modul = ($_POST['modul']);
$datei = ($_POST['datei']);
mysql_connect ("localhost","","");
mysql_select_db("");
if($modul == "1")
{
print "<html><head><title>Bild in eine mysql Datenbank einspeisen mit PHP</title></head>
<body>";
$fopen = fopen($datei, "r");
$filesize = filesize($datei);
$bild=fread($fopen, $filesize);
$name=$HTTP_POST_FILES['datei']['name'];
mysql_query("insert into image(name, image) values ('$name','$bild')");
$zahl= mysql_insert_id();
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
echo "Der Grösse des Files ist ".$HTTP_POST_FILES['datei']['size']."<br>";
echo "Der File ist vom Typ: ".$HTTP_POST_FILES['datei']['type']."<br>";
echo "Der Name des Files ist ".$HTTP_POST_FILES['datei']['name']."<br>";
$dateiname=$HTTP_POST_FILES['datei']['name'];
echo "Der File wurde upgeloaded. Die Nummer des Bildes ist $zahl";
print "</body></html>";
}
if($modul == "2")
{
$zeiger=mysql_query("select image from image where ident=$nummer");
$ergebnis=mysql_fetch_array($zeiger);
print $ergebnis['image'];
}
if($modul == "3")
{
$zeiger=mysql_query("select image from image where ident=$nummer");
while($ergebnis=mysql_fetch_array($zeiger))
{
print $ergebnis['image'];
}
}
mysql_close();
?>
</body>
</html>
Ich schupps dich mal in die richtige Richtung und sach mal:
var_dump($datei);
Evtl. kommste dann weiter... learning by doing
Hallo Phil,
Ich verwende das untenstehende Script, leider erscheint immer die Fehlermeldung fread(): supplied argument is not a valid stream resource.
am besten vergißt Du die Quelle, wo Du dieses altersschwache Skript gefunden hast. Es strotzt vor Fehlern und ist heute sowieso nicht mehr zu gebrauchen.
a) das Skript verläßt sich auf die Einstellung
register_globals = on
Dies ist seit PHP 4.2.0 standardmäßig ausgeschaltet, d.h. inzwischen seit
etwa fünf Jahren, seit ca. 2-3 Jahren findet man diese Einstellung auch in
der freien Wildbahn nur noch selten.
b) Das Skript verwendet noch das uralte Array $HTTP_POST_FILES, seit PHP 4.1
gibt es die superglobalen Arrays wie $_POST, $_GET oder auch $_FILES.
Verwende diese.
c) Von außen können Daten eingeschleust werden, die Du nicht erwartest. Bitte
informiere Dich über mysql_real_escape_string(). Daten müssen
gemäß dem Kontext behandelt werden, in dem sie verwendet werden.
// Wegen folgender Zeile geht das Skript davon aus, dass es eine Variable
// $nummer
// gäbe.
> Nummer des Bildes <input type="text" name="nummer"><br>
// Hinweis: Für Beispiele gibt es solche Domains wie example.org
// Bitte verwende keine existierenden Domänennamen, die Dir nicht gehören.
> <a href="http://www.abc.de/document/admin-mysql.php">Alle Bilder zeigen</a>
// Das Umkopieren ist überflüssig und gefährlich. Es verschleiert die
// Herkunft der Daten
// Die Klammern um $_POST sind überflüssig, lass sie weg.
> $modul = ($_POST['modul']);
> $datei = ($_POST['datei']);
// die nächsten beiden Anweisungen könnten fehlschlagen.
// Du rechnest nicht damit.
> mysql_connect ("localhost","","");
> mysql_select_db("");
[...]
// Hier gehst Du davon aus, dass eine Variable $nummer existiert.
// Deren Inhalt verwendest Du unmaskiert, deswegen ist Dein Skript anfällig
// für SQL-Injektion,
> $zeiger=mysql_query("select image from image where ident=$nummer");
Verwende elementare Debug-Techniken:
Stell den Wert von error_reporting auf E_ALL und display_errors auf on.
Gib - wie von Jurik bereits empfohlen - Dir die Inhalte von Variablen mit solchen Funktionen wie var_dump, print_r oder einfach echo aus. Vergleiche das, was Du erwartest, mit dem, was enthalten ist.
Freundliche Grüße
Vinzenz