AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [erledigt] [PHP] Binärdaten aus XML
Thema durchsuchen
Ansicht
Themen-Optionen

[erledigt] [PHP] Binärdaten aus XML

Ein Thema von littleDave · begonnen am 5. Nov 2008 · letzter Beitrag vom 5. Nov 2008
Antwort Antwort
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#1

[erledigt] [PHP] Binärdaten aus XML

  Alt 5. Nov 2008, 19:40
Hallo,

ich hab da mal nen Problem: (bevor ich es vergessen: ich benutze PHP5)

Ich lade eine XML-Datei auf meinen Server hoch und ein PHP-Script soll das XML-File verarbeiten. In der XML-Datei sind auch binäre Daten drinnen, die folgendermaßen kodiert sind:

- Originaldaten (im Hexeditor): $0A$02$AF ...
- Daten in der XML-Datei: 0A02AF ... (als string)

Nun will ich diese Datei, die sich dahinter befindet, in eine seperate Datei schreiben. Dabei hab ich folgende Funktion geschrieben (es ist im Moment erstmal egal, dass die Datei 1 Byte länger werden kann)
Code:
function XMLBinaryToFile($xmlData, $TargetFile)
{
    $aFile = fopen($TargetFile, 'wb');
    for ($i = 0; ($i < strlen($xmlData)); $i += 4) {   
       
       $Value = hexdec('0x'.substr($xmlData, $i, 4));
       $arr  = pack('n', $Value);
       fwrite($aFile, $arr) ;
    }
    fclose($aFile);
}
Mein Problem ist jetzt, dass diese Funktion extrem langsam ist und die Daten in der XML-Datei mehrere 100 KB bis MB haben können. Das ist so viel, dass die Ausführungsdauer der php-Datei überschritten wird.

Jetzt ist meine Frage: gibt es dafür vielleicht eine viel schnellere Methode oder ist der Ansatz viel zu umständlich?
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: [PHP] Binärdaten aus XML

  Alt 5. Nov 2008, 19:52
Es könnte vll. was bringen, wenn du immer 4 Bytes liest statt 2 ... und evtl. statt substr direkt über die array-notation gehst.

Ansonsten bringts vll. was auf Base64 umzusteigen, das macht die Datei dann nicht doppelt so lang sondern nnur 4/3

Ansonsten: Könntest du diese Große Datei nicht einfach seperat übergeben?

So wie ein Upload-Feld in einem Formular als multipart request, sodass du im xml nur noch den dateinamen reinschriebst, und die eigentliche datei seperat übergibst?
Wäre imho die bessere Lösung ...
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#3

Re: [PHP] Binärdaten aus XML

  Alt 5. Nov 2008, 20:07
Zitat von jfheins:
Es könnte vll. was bringen, wenn du immer 4 Bytes liest statt 2 ... und evtl. statt substr direkt über die array-notation gehst.
Ok, ich probiers mal damit, vielleichts gehts dann ja etwas schneller

Zitat von jfheins:
Ansonsten bringts vll. was auf Base64 umzusteigen, das macht die Datei dann nicht doppelt so lang sondern nnur 4/3
Ok, wenn ich die Binärdaten dann per Base64 im XML-Knoten gespeichert habe, wie bekomm ich die dann wieder in eine Binärdatei in php? Ich muss doch dann auch wieder "pack" benutzen. Oder gibts da vielleicht eine php-Funktion, die das bereits macht?

Zitat von jfheins:
Ansonsten: Könntest du diese Große Datei nicht einfach seperat übergeben?

So wie ein Upload-Feld in einem Formular als multipart request, sodass du im xml nur noch den dateinamen reinschriebst, und die eigentliche datei seperat übergibst?
Wäre imho die bessere Lösung ...
Ich wollt ja gerade weg von mehreren Upload-Feldern. Bisher hab ich es ja auch so, doch ich wollt einfach eine kompakte Datei hochladen.

[EDIT]
Ich hab es nun mit Base64 gemacht, was jetzt extrem schnell funktioniert. Damit ist das Thema erledigt. Danke an jfheins für den Tip mit Base64 - hab daran garnicht gedacht

Für alle, die wissen wollen, wie es geht:
Code:
function XMLBinaryToFile($xmlData, $TargetFile)
{
    // $xmlData   : Daten Base64 - kodiert
    // $TargetFile : Zieldatei
    // 'wb' : Schreiben + Binär
    $aFile = fopen($TargetFile, 'wb');
    fwrite($aFile, base64_decode( $xmlData )) ;
    fclose($aFile);
}
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#4

Re: [erledigt] [PHP] Binärdaten aus XML

  Alt 5. Nov 2008, 20:39
und das ganze dann nochmal mit der zLib packen
dann hast du noch weniger!
Marius
  Mit Zitat antworten Zitat
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#5

Re: [erledigt] [PHP] Binärdaten aus XML

  Alt 5. Nov 2008, 20:46
Zitat von MSSSSM:
und das ganze dann nochmal mit der zLib packen
dann hast du noch weniger!
Der Upload an sich ist kein Problem - also von der Datenmenge her. Wenn ich die Daten zusätzlich noch mit zLib packe, entsteht aber zusätzlich noch CPU-Aufwand, da die Daten ja erst dekomprimiert werden müssen.
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz