php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 20-09-2003, 04:53
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Post String binär lesen, array

Hallo PHPler,

anbei gleich 2 Fragen, konnte im Forum leider nichts finden.

Ich habe einen binären string aus einem socket gelesen. (nicht fsockopen!), leider kann ich den string nicht mit explode zerlegen und ein array daraus machen, allerdings weiss ich wie sich der string aufbaut. wie kann ich nun den binärstring umwandeln ? Ich würde ja gern den string mal posten, aber leider sind zuviele zeichen enthalten die man hier nicht lesen könnte. substr() kann da nicht die lösung sein das würde ewig dauern.

String: (byte)(byte)(int32)(word)(word)(int16)(byte)(char)

Dann hab ich noch einen string aus dem ich ein array machen will:

String: key1\value1\key2\value2\key3\value3\.....\keyn\valuen

Ich habe mit explode("\\") den string zerlegt, allerdings ist es jetzt ein ewiger code wo ich dann das array mit key1=>value1 ... aufbaue. geht das nicht auch noch einfacher? habs mit preg_match(_all) auch ausprobiert, aber da kam nicht das raus was ich wollte.

Array(
key1 => value1,
key2 => value 2,
keyn => valuen
)

Für ansätze sowie für lösungen wäre ich total dankbar.

gruss und guten morgen bzw. nacht
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 20-09-2003, 12:32
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

fürs erste könnte man evtl regex nehmen. aber da kann man so nicht viel zu sagen.

2. würde ich ein explode machen, und dann halt mit ner schleife. das sind maximal 4 zeilen.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3 (permalink)  
Alt 20-09-2003, 16:12
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard Re: String binär lesen, array

jepp, für's zweite würde ich auch so vorgehen, wie tobiaz es vorschlägt:

"key1\value1\key2\value2\key3\value3"

exploden am \, ergibt ein array (nennen wir es mal $altesarray) mit "key1", "value1", "key2", "value", etc.


zuerst ermittelst du die arraylänge, also anzahl der einträge - im obigen beispiel sind das 6 stück.

jetzt lässt du eine schleife mit zählvariable $i von 0 bis (arraylänge/2)-1 laufen (hier also von 0 bis 2), und weist innerhalb dieser dann dem array die werte zu:
PHP-Code:
$neuesarray[$altesarray[$i*2]) = $altesarray[$i*2+1]; 
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 20-09-2003, 20:21
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Super, danke für den Ansatz, hat mir weiter geholfen.
ich hab es jetzt auf mein script angepasst un es läuft :

PHP-Code:
$array explode("\\"$buffer);
$result = array();

for ( 
$i 1$i <= sizeof($array)/$i++ ) {
         
$result[$array[$i*2-1]] = $array[$i*2];
}
print_r($result); 
Allerdings hänge ich jetzt wieder bei meinem ersten Problem. Ich hab meinen Log-relay jetzt so umgestezt, dass er zumindest nach jedem (byte) oder (string) mir ein \x00 mitsendet... chr(0)

Wenn ich den String nun mit $array = explode( "\x00", $buffer) zerlege, dann bekomm ich die stringwerte schoen in einem array angezeigt, allerdings hat er probleme mit einigen binärzeichen mit ord(), kann ich mir zwar einige sichtbar machen, aber irgendwie nicht alle. mit fsockopen() und read($fp,1) läuft es, aber mit dem socket_read() noch nicht so ganz. wenn ich miir mit print_r($buffer) den string anzeigen lasse, dann bekomm ich nur die hällfte ausgegeben und er zerstört mir sogar den plain/text header.

Irgendeine Idee dazu ?
Mit Zitat antworten
  #5 (permalink)  
Alt 21-09-2003, 21:41
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

kannst du die zeichen denn anzeigen, wenn du mirt readfile() die datei ausgibst?
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #6 (permalink)  
Alt 22-09-2003, 02:26
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Moin,

ich arbeite ja leider nicht mit nem file. sondern mit den socket funktionen. die daten bekomm ich über ein logrelais gesendet und empfange die an meinem socket. somit hab ich nur einen string den ich darstellen kann.

andere idee ?

hat jemand schonmal mit unpack gearbeitet ? hab versucht den string damit zu zerlegen, aber an einigen stellen hab ich noch probleme damit, anderes zeigt er wunderbar an.

gruss grizz
Mit Zitat antworten
  #7 (permalink)  
Alt 22-09-2003, 15:48
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

ahso. also, wenn das durch die funktion geht, kannst du den string nicht mehr lesen (oder zeichen davon). Geht das denn, wenn du den gesamten string ausgibst
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #8 (permalink)  
Alt 22-09-2003, 18:57
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es ist so, das ich mit socket_read() und socket write() arbeite, ich empfange ein packet und schreibe es in $buffer. der buffer enthällt dann das ganze packet als string, wenn ich den string im plain/text ausgebe, dann sehe ich das was in textform (string) (char) angegeben ist und halt den binären steuercode dazu in form von punkten oder quadraten etc.

ich muss nun das was string und char ist auslesen. und dazwischen den binärcode mit (ord) sichtbar machen. ich habe die funktion vorher mit fsockopen() und fread() gemacht und dann byteweise den string ausgelsenen in ein unpack('typ', $var) gegeben, allerdinsg kann ich den socket_read() nicht byteweise auslesen. ausserdem wenn der string eine länge von 1500 bytes hat, dann ist es nicht sinvoll jedes einzelne byte durch eine function auszulesen.

vielleicht hilf das weiter.

gruss grizz
Mit Zitat antworten
  #9 (permalink)  
Alt 24-09-2003, 15:06
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

<schieb>

na keiner mehr eine Idee ?
Mit Zitat antworten
  #10 (permalink)  
Alt 24-09-2003, 22:33
DSB
 Banned
Links : Onlinestatus : DSB ist offline
Registriert seit: Dec 2002
Ort: Hamburg
Beiträge: 374
DSB ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hmm, man kann ja in str_replace auch Arrays als Argumente einsetzen und so auf einen Schlag recht performancetreu haufenweise Zeichen ersetzen.
Ich würde mir ne Funktion basteln, der ich den String übergebe und als Returnwert den "bereinigten" (anzuzeigenden) String zurückbekomme.

Man könnte also für jedes Sonderzeichen ein Quadrat anzeigen lassen und die "normalen" Zeichen unangetastet lassen.
Das liefe jetzt aber auf eine recht großes Such- und Ersetzungsarray hinaus.

Ich meine, dass es auch geht str_replace zusammen mit Reg-Exs zu benutzen, aber da weiss ich leider auch nicht, wie es genau geht.

Vielleicht bringt Dich das auf neue Lösungswege?
Mit Zitat antworten
  #11 (permalink)  
Alt 25-09-2003, 15:16
GriZZ
 Junior Member
Links : Onlinestatus : GriZZ ist offline
Registriert seit: Nov 2002
Ort: HH
Beiträge: 60
GriZZ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich hab es jetzt so gemacht und es funktioniert super, hab diese funktion für (char)(byte)(string)(int)(float) geschrieben:

das ganze funktioniert fast wie in Perl, nur mit leerzeichen kommt er nicht klar deswegen ersetz ich erst alle leerzeichen duch ESC, in der funktion selbst schreib ich dann das ESC zu SP zurück :-) um es für die anderen datentypen zu benutzen, einfach den unpack ändern und den substr am buffer anpassen :-)

PHP-Code:
$buffer str_replace"\x20""\x1B"$buffer); 
dann jage ich den $buffer durch die funktion. wichtig ist die referenz, denn sonst schneidet sich der buffer ja nicht ab :-)

PHP-Code:
function _unpack_string(&$buffer$count 1){

$string = array();
for(
$i 1$i <= $count$i++){
    do {
        
$a unpack ('A1var'$buffer);
        
$byte $a['var'];
        
$buffer substr($buffer1);
        if (
$byte == "\x1B")
            {
$byte " ";}
        @
$string[$i] .= $byte;
    }while ( 
$byte != "\x00" );
}

if (
$count == 1){
    return 
$string[1];
}

return 
$string;

den count hab ich mit reingenommen um gleich mehrere strings nacheinander zu ziehen. unpack macht immer ein array.

vielleicht kann es ja noch jemand gebrauchen.

GruZZ und Danke GriZZ
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

09.10.2020 palle_1977 | Kategorie: PHP
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
Erotik-Portal

Mit unsererem Erotik-Portal erhalten Sie ein komplettes Internetprojekt inklusive einer bedienerfreundlichem Administration sowie zahlreichen wichtigen Funktionen. Unser auf PHP und MySQL basierendes Script bietet Ihnen - und Ihren Besuchern - komfort

18.06.2020 ISD-Genthin | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:16 Uhr.