Axel Hoogestraat: MSSQL -> Binärdaten mit PHP

Hi,

ich habe ein Problem beim speichern von Binärdaten in einer MSSQL-DB.
Oder besser gesagt, beim auslesen.
Ich speicher die Daten folgendermaßen:

$datastring = file_get_contents($_FILES['dat']['tmp_name');
$data = unpack("H*hex", $datastring);
$dateicontent   = "0x".$data['hex'];

Datei - Content wird dann in das Image-Feld in die DB geschrieben.

Auslesen passiert dann so:

header("Content-type: ".$mime);
header("Content-Disposition: attachment; filename=".$dateiname);
echo $daten;

$mime, $dateiname und $daten werden natürlich zuvor aus der DB gelesen. Mir wird die Datei dann auch zum Download angeboten. Nur die Datei ist kleiner als das original und enthält anscheinend nur null-Zeichen. Wenn ich $daten aber im Broweser ausgebe, dann stehen die Informationen drin (also diese verscheidenen "Hyroglyphen")

Weiß jemand, was das Problem sein kann ?

Vielen Dank im Voraus
Schöne Grüße
Axel

  1. Hi,

    Weiß jemand, was das Problem sein kann ?

    ja, der Datenzugriff. Wie sieht denn
     1.) der Schreibzugriff aus (SQL-Statement gewuenscht)
     2.) der Lesezugriff aus (SQL-Statement gewuenscht)

    Wenn Du beides mal "ausserhalb" von PHP testest, wirst Du vielleicht den Fehler sofort identifizieren.

    Gruss,
    Ludger

    --
    "Die SPD im Aufwind?"
    1. Hi Ludger,

      sorry für die späte Antwort...

      ja, der Datenzugriff. Wie sieht denn
      1.) der Schreibzugriff aus (SQL-Statement gewuenscht)

      INSERT INTO [dbo].[dokumente] (id, daten, name, groesse, mimetype) VALUES ($id, $daten, '$name', $groesse, '$mimetype')";

      2.) der Lesezugriff aus (SQL-Statement gewuenscht)

      "SELECT * FROM [dbo].[Proj_dokumente] WHERE id=$id"

      Dann über "fetch_assoc" -> $data = $result['daten'];
      usw.

      Wie gesagt schreibt er ja auch Daten ein und liest sie mir auch aus.
      Ich kann den Inhalt von "Daten" auch in den Browser schreiben, das klappt auch. Sobald ich aber über header(...) das Ganze als z.B. image/gif deklariere, gehts halt nicht.

      Wenn Du beides mal "ausserhalb" von PHP testest, wirst Du vielleicht den Fehler sofort identifizieren.

      Ähm, da weiß ich nicht so, wie das gemeint ist. Wie soll ich das denn testen ?

      Vielen, vielen Dank bis hier
      Schöne Grüße
      Axel

      1. Hi,

        1.) der Schreibzugriff aus (SQL-Statement gewuenscht)
        INSERT INTO [dbo].[dokumente] (id, daten, name, groesse, mimetype) VALUES ($id, $daten, '$name', $groesse, '$mimetype')";

        2.) der Lesezugriff aus (SQL-Statement gewuenscht)
        "SELECT * FROM [dbo].[Proj_dokumente] WHERE id=$id"

        Dann über "fetch_assoc" -> $data = $result['daten'];
        usw.

        der Datenzugriff erfolgt also zweistufig. Versuche doch mal die beiden Stufen zu trennen. Also, wie gestaltet sich der Datenzugriff rein SQL-maessig? Falls OK, dann beim PHP-DBI testen.

        Dann kommt doch raus, was falsch laeuft.

        Wenn Du beides mal "ausserhalb" von PHP testest, wirst Du vielleicht den Fehler sofort identifizieren.
        Ähm, da weiß ich nicht so, wie das gemeint ist. Wie soll ich das denn testen ?

        SQL-Statement anzeigen lassen, ggf. $daten ersetzen und dann vielleicht z.B. im Query Analyzer ausfuehren lassen. Oder hast Du keinen Zugriff auf den datenserver?

        Eine andere Idee waere noch die Binaerdaten BASE64 zu speichern.

        Gruss,
        Ludger

        --
        "Die SPD im Aufwind?"