Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem mit PHP - Upload unter Suse Linux 8.1

Empfohlene Antworten

Veröffentlicht

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

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

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

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

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

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

ich teste das mal...

ciao

TinTin

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.