Mit Blick auf der hexdump von dem, was in mongod endet, im Vergleich zu was Sie viel klären einsetzen sollten:
$ php -r 'echo inet_pton("127.0.0.1");'|hexdump
0000000 007f 0100
0000004
$ php -r 'echo base64_decode("BAAAAH8AAAE=");'|hexdump
0000000 0004 0000 007f 0100
0000008
Dies zeigt, dass das ursprüngliche 4 Bytes durch weitere 4 Bytes in mongodb voran enden. Der Grund dafür kann in the BSON spec gefunden werden, wenn ein Binary gespeichert wird, speichern die ersten 4 Bytes die Länge des darin enthaltenen Wertes.
Dies deutet auch an, was die Lösung ist; nach ein wenig Gefummel (ich habe noch nie verwendet mongodb), landete ich mit:
> db.test.find().forEach(function(d){
var h = d.ip.hex();
print(
parseInt(h.substr(8,2), 16)+'.'
+parseInt(h.substr(10,2), 16)+'.'
+parseInt(h.substr(12,2), 16)+'.'
+parseInt(h.substr(14,2), 16));
});
Diese in der gewünschten Ausgabe führen: 127.0.0.1
Haben Sie versucht, dies zu tun: 'foreach ($ Sammlungs- > find() als $ el) { echo $ doc ['ip'] -> bin; } '. Ich denke, es sollte helfen, aber ich habe kein PHP, um dies jetzt zu überprüfen, also lassen Sie mich bitte wissen, wie es geht. –
Wenn Sie die Frage nicht falsch verstehen, sollten Sie den Titel ändern, da Sie versuchen, den BinData-Wert mithilfe von PHP zu ermitteln, ohne die mongo-Shell zu verwenden. – wdberkeley
@wdberkeley Hallo, ich habe nur Zeichenfolge "BAAAAH8AAAE =", wie bekomme ich Anfangswert ohne Einfügen/Daten in mongodb abrufen – Hett