Zum Inhalt springen

Problem mit PHP - Upload unter Suse Linux 8.1


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...