A.Z.R.A.E.L. Geschrieben 28. Mai 2003 Geschrieben 28. Mai 2003 Hi! Ich hab unter Windows 2000 Prof. mit Apache Webserver + PHP4 ein Dokumentmanagementsystem entwickelt, bei dem folgendermaßen eine Datei per Upload Formular in eine Datenbank in ein BLOB - Datenfeld geladen wird: //$DocData[0] ist der absolute Pfad + Dateiname $query = "INSERT INTO filetable SET FileData=LOAD_FILE('". str_replace("\\","/",$DocData[0]) . "')"; mysql_query($query) or die("Anfrage fehlgeschlagen!"); [/PHP] Unter Windows funzt das auch einwandfrei! Nur unter Linux schlägt die Anfrage (selber Code und selbe Datenbank) fehl! WARUM das so ist weiß ich ja inzwischen: Beim Upload wird in einem temporären Ordner eine Datei erstellt, bei der der Eigentümer "wwwrun" ist (Gruppe "nogroup") welcher "rw" - Recht besitzt, erstellt. Das Problem ist eben das NUR der Benutzer "wwwrun" Leserechte besitzt weshalb das LOAD_FILE eben NULL liefert! Und meine Datenbank erlaubt für das BLOB - Feld keine NULL - Werte! Weiß jemand hierfür eine Lösung? Bin total ratlos was ich da machen könnte! Gruß Azrael Zitieren
A.Z.R.A.E.L. Geschrieben 29. Mai 2003 Autor Geschrieben 29. Mai 2003 Hi! Hab doch noch ne Lösung zusammengebracht: //$DocData[0] ist der absolute Pfad + Dateiname //Datei umbenennen: move_uploaded_file($DocData[0], $DocData[0] . "a"); //Datei lesbar machen (für MySQL) chmod($DocData[0] . "a", 0666); //Datei in Datenbank laden: $query = "INSERT INTO filetable SET FileData=LOAD_FILE('". str_replace("\","/",$DocData[0]) . "')"; mysql_query($query) or die("Anfrage fehlgeschlagen!"); //Datei wieder löschen: unlink($DocData[0] . "a"); [/PHP] Gruß Azrael Zitieren
TinTin Geschrieben 29. Mai 2003 Geschrieben 29. Mai 2003 ich schiebe genau wie oben dateien in einen longblob. die baten bank gibt keine fehler aus, die statistik von phpmyadmin sagt auch aus, dass die db grösser geworden ist. so,jetzt mein problem, ich bekomme die datei nicht wieder aus der db. wenn ich mir die daten per SELECT ´type´,´bindata´ FROM ´tabel´WHERE ´id´ = $id; die abfrage läuft auch fehlerlos, aber wenn ich per Header(" content-type: $type" ); echo $bindata; [/PHP] die datei an den browser sende öffnet er mir z.b. ein leeres word document. was geht denn hier falsch? und warum machst du denn [PHP]str_replace("\","/",$DocData[0]) ciao TinTin Zitieren
A.Z.R.A.E.L. Geschrieben 29. Mai 2003 Autor Geschrieben 29. Mai 2003 Hi! also ich hole die Daten immer so raus: (Hier wird aber der Browser gezwungen die "Datei" herunterzuladen!) header("Content-type: application/octet-stream"); header("Content-disposition: attachment; filename=" . $docData->DocName); echo $docData->Document; [/PHP] ... und warum machst du denn [PHP] str_replace("\","/",$DocData[0]) ist für windows! da bei mir MySQL ein Problem mit den Backslashes scheinbar hatte.. und so hats dann eben gefunzt! Gruß Azrael Zitieren
TinTin Geschrieben 29. Mai 2003 Geschrieben 29. Mai 2003 hi, wenn ich z.b. ein word datei in die db geschoben habe, dann gibt mir der browser schon ein word dokument zurück, es ist jedoch leer. ich krieg die daten entweder nicht richtig in die db oder ich mach was auf dem weg raus falsch. hat jemand denn eine idee wie prüfen kann ob die datei richtig im blob gelandet ist. wenn ich mir die daten aus der db hole, hat die variable $bindata eine strlen() von '0'. da läuft doch etwas falsch. ich schiebe die daten jetzt auch mit den getauschten slashes in die db und es kommt kein fehler??? :confused: TinTin Zitieren
A.Z.R.A.E.L. Geschrieben 29. Mai 2003 Autor Geschrieben 29. Mai 2003 Hi! hast du schon mal geschaut was in dem pfad bei LOAD_FILE drinsteht und ob die Datei auch wirklich temporär erzeugt wird?? teste es auch mal beim reinladen mit ner textdatei wo nur mal ein wort oder so drinsteht. mach dann in der mysql - konsole mal ein select und schau ob da überhaupt das wort drinsteht! Gruß Azrael Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.