Apache + BLOB = Absturz

Alles, was PHP betrifft, kann hier besprochen werden.

Apache + BLOB = Absturz

Postby Haraldinio » 01. September 2006 09:54

Hallo zusammen,
habe wieder mal ein Problem.
Ich habe ein PHP Skript geschrieben daß ein BLOB
aus einer Oracle-DB abruft.

Das Skript soll die Binärdaten aus der DB
holen und in eine neu angelegte Datei schreiben.

Soweit funktioniert das auch nur blöderweise
stürzt mir jedes mal der Apache ab. Ich habe
leider keinen Ansatz was ich falsch mache, oder
liegt das etwa am Apache?

Code: Select all

//ABFRAGE BLOB
        $stmt = $dbh->prepare("SELECT blob FROM comp_Element WHERE ITEMID = 1");
       
        $stmt->bindColumn(1, $blob, PDO::PARAM_LOB);
        $stmt->execute ();
        $stmt->fetch(PDO::FETCH_BOUND);
       
        $txtneu  = touch("../xml/$element[ITEMNAME].txt");
        $txtopen = "../xml/$element[ITEMNAME].txt";
        $fptxt   = fopen ($txtopen, "r+");
        stream_copy_to_stream ($blob, $fptxt);
        fclose($fptxt);


Apache Version 2.0.58
PHP 5.1.3

Vielleicht weiß ja einer von euch wo der Hund begraben liegt?
Danke schon mal im voraus!
Das Leben ist keine Schokolade!
Haraldinio
 
Posts: 3
Joined: 01. September 2006 09:09
Location: Seewalchen a. Attersee

Postby Wiedmann » 01. September 2006 11:14

Ich probiere mal eine Antwort (benutz selbst aber weder PDO noch Oracle)

$stmt = $dbh->prepare("SELECT blob FROM comp_Element WHERE ITEMID = 1");
$stmt->bindColumn(1, $blob, PDO::PARAM_LOB);
$stmt->execute ();
$stmt->fetch(PDO::FETCH_BOUND);

AFAIK sollte man die Methoden bindColumn() und execute() in umgekehrter Reihenfolge ausführen.
Die Variable vorher zu initialisieren mag eine gute Idee sein (falls sie schonmal benutzt wurde):
Code: Select all
$blob = '';
$stmt = $dbh->prepare("SELECT blob FROM comp_Element WHERE ITEMID = 1");
$stmt->execute();
$stmt->bindColumn(1, $blob, PDO::PARAM_LOB);
$stmt->fetch(PDO::FETCH_BOUND);


$txtneu = touch("../xml/$element[ITEMNAME].txt");
$txtopen = "../xml/$element[ITEMNAME].txt";
$fptxt = fopen ($txtopen, "r+");
stream_copy_to_stream ($blob, $fptxt);
fclose($fptxt);

Also meiner Ansicht nach ist in $blob keine Stream Ressource sondern einfach der Inhalt von dem BLOB.
Da du eh mit PHP5 arbeitest, kannst du dir auch das fopen() sparen. Ersetz diese ganzen Zeilen durch:
Code: Select all
file_put_contents("../xml/{$element['ITEMNAME']}.txt", $blob);
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Haraldinio » 01. September 2006 11:48

Danke für die Mühe, aber leider schmiert mein Apache immer noch ab.
In meinem Code den ich gepostet habe wird das File erstellt, das ist nicht das Problem, mein Problem ist eben daß der Apache immer abstürzt.

Gibt es vielleicht eine Internetseite wo FAQ´s über Abstürze, oder ähnliches geschrieben wird?

Vielleicht habe ich auch den Code falsch geschrieben?

Code: Select all
   $blob = '';
   $stmt = $dbh->prepare("SELECT fileasblob FROM comp_Element WHERE ITEMID = 1");
   $stmt->execute();
   $stmt->bindColumn(1, $blob, PDO::PARAM_LOB);
   $stmt->fetch(PDO::FETCH_BOUND);
   
   file_put_contents("../xml/dername.txt", $blob);
Das Leben ist keine Schokolade!
Haraldinio
 
Posts: 3
Joined: 01. September 2006 09:09
Location: Seewalchen a. Attersee

Postby Wiedmann » 01. September 2006 12:03

mein Problem ist eben daß der Apache immer abstürzt.

An welcher Codestelle stürtzt er denn ab?

Gefunden hab ich noch, dass die normale Oracle Extension auch Speicherschutzverletzungen auslöst beim Lesen von LOB. Helfen soll hier die neueste Extension von PECL. Kannst also mal versuchen dir auch für PDO Oracle die aktuelle Version zu holen (Dein Oracle-Client sollte auch aktuelle sein).

(BTW: PDO Oracle ist immernoch als experimentell eingestuft ;-)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Haraldinio » 01. September 2006 12:26

Apache stürzt sofort und radikal ab.
Bekomme keinen PHP-Fehler oder ähnliches im Logfile,
nur daß er eben abstürzt.
Ich bin kein Serverspezialist, aber vielleicht gibt ja status 3221225477
einen Hinweis was falsch läuft?


Logfile:

[Fri Sep 01 13:25:03 2006] [notice] Parent: child process exited with status 3221225477 -- Restarting.
[Fri Sep 01 13:25:03 2006] [notice] Apache/2.0.58 (Win32) PHP/5.1.3 configured -- resuming normal operations
[Fri Sep 01 13:25:03 2006] [notice] Server built: Apr 29 2006 17:47:10
[Fri Sep 01 13:25:03 2006] [notice] Parent: Created child process 996
[Fri Sep 01 13:25:03 2006] [notice] Child 996: Child process is running
[Fri Sep 01 13:25:03 2006] [notice] Child 996: Acquired the start mutex.
[Fri Sep 01 13:25:03 2006] [notice] Child 996: Starting 250 worker threads.
Das Leben ist keine Schokolade!
Haraldinio
 
Posts: 3
Joined: 01. September 2006 09:09
Location: Seewalchen a. Attersee

Postby Wiedmann » 01. September 2006 12:55

Apache stürzt sofort und radikal ab.
Bekomme keinen PHP-Fehler oder ähnliches im Logfile,

Na ich dachte es ist schon klar, dass man natürlich die Anweisungen auskommentiert und dann nacheinander wieder aktiviert...

BTW:
Hast du jetzt die aktuellen DLL's getestet?
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 23 guests