zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden [php] Datei bit für bit einlesen.

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 13.07.2007, 15:34
Benutzerbild von nick
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 01.08.2006
Ort: Rheinland-Pfalz
Beiträge: 386
nick befindet sich auf einem aufstrebenden Ast
Standard [php] Datei bit für bit einlesen.

Ich suche eine Möglichkeit, eine Datei bit für bit auszulesen.
Ungefähr so habe ich mir das vorgestellt.

Code:
<?php
set_timeout(0);

$count = 0;
$read = fopen('hi.txt', 'binary');
while ($bool = pic_bit($read))
{
	if ($bool) continue;
	$count++;
}
fclose($read);

echo sprintf('%06d Mal False!', $count);
?>
Hoffe, jemand weiß schnell Bescheid.

Geändert von nick (13.07.2007 um 15:39 Uhr)
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 13.07.2007, 15:48
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Der Parameter für Binärdateien bei fopen ist ein zusätzliches "b", also z.B. fopen('datei', 'rb').

Zum Einlesen von Binärdaten kenn ich nur PHP: fread - Manual.
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 13.07.2007, 15:57
Benutzerbild von nick
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 01.08.2006
Ort: Rheinland-Pfalz
Beiträge: 386
nick befindet sich auf einem aufstrebenden Ast
Standard

Ich will die 0-bits durchzählen oO.
Was bringt in php denn das Einlesen als binät und nicht binär?

Code:
<?php
header('Content-Type: image/gif');

$path = 'hi.gif';
$read = fopen($path, 'r');
echo fread($read, filesize($path));
fclose($read);
?>
klappt hier genau so mit einem normalen 'r'
fread() gibt eh nen string zurück.

Wären die Argumente nach dem Ersten nicht length, sondern position und
die rückgabe wäre ein pures bit, könnte ich was damit anfangen.

Geändert von nick (13.07.2007 um 16:01 Uhr) Grund: Ergänzung
Mit Zitat antworten
  #4 (permalink)  
Alt 13.07.2007, 16:19
Benutzerbild von Pablo
4 8 15 16 23 42
XHTMLforum-Kenner
 
Registriert seit: 31.05.2004
Beiträge: 1.772
Pablo sorgt für eine eindrucksvolle AtmosphärePablo sorgt für eine eindrucksvolle Atmosphäre
Standard

bit oder byte?
Bit dürfte relativ schwierig werden...

Eine Möglichkeit:
Datei komplett einlesen (file_get_contents) und anschließend jedes byte des Strings durchgehen $string{0}, $string{1}, ... , $string{..} und checken ob es ein null-byte (nicht null-bit) ist.
So weit in der Theorie. Praxis bleibt dir überlassen.

Gruß,
Pablo
__________________
Go Opera!
… oder Chrome. Auch cool.
Mit Zitat antworten
  #5 (permalink)  
Alt 13.07.2007, 16:26
Benutzerbild von nick
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 01.08.2006
Ort: Rheinland-Pfalz
Beiträge: 386
nick befindet sich auf einem aufstrebenden Ast
Standard

Indem man jeden Char-Byte aus einer Textdatei vergleicht
mit einem Byte, der auch die Zahl 0 ergeben würde,
findet man nicht ALLE 0-bytes

Die bitfolge 0000 0000 würde die Integer 0 ergeben,
es sind auch Strings ohne das zeichen 0 drin möglich,
wo irgendwo 8 0en hintereinander stehen können.

// edit

Etwas der Art:

Code:
<?php
set_timeout(0);

$count = 0;
$path = 'hi.gif';
$read = fopen($path, 'rb');
$size = filesize_in_bit($path);
for ($a = 0; $a < $size, $a++)
{
	if (get_bit($read, $a)) continue;
	$count++;
}
fclose($read);

echo sprintf('%06d Mal false!', $count);
?>

Geändert von nick (13.07.2007 um 16:33 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 13.07.2007, 16:49
Benutzer
neuer user
 
Registriert seit: 29.05.2007
Beiträge: 48
Volli befindet sich auf einem aufstrebenden Ast
Standard

Also ich würde die Chars in den entsprechenden Intergerwert umwandeln (mit ord() ) und dann mit
decbin() in der Binärdarstellung verarbeiten.

MfG
Mit Zitat antworten
  #7 (permalink)  
Alt 13.07.2007, 16:52
Glühend, brennend Rot
XHTMLforum-Mitglied
 
Registriert seit: 12.08.2006
Ort: Riehen
Beiträge: 152
Wasili befindet sich auf einem aufstrebenden Ast
Standard

Wie man im PHP-Manual nachlesen kann, ist das "b"-Flag dazu da, unter Systemen, die zwischen Binär- und Textdateien unterscheiden, trotzdem binäre Dateien als "Text" einzulesen. Z.B. bei Musikdateien oder Programmen. Windows unterscheidet z.B. zwischen diesen beiden Arten, Linux nicht.

Eine Bitweise Auslesung ist m.W. nicht möglich, zumindest das Manual sagt nichts darüber aus. Deine einzige Chance wäre es, ein Array zu erstellen, dass die Zeichen mit der Binärentsprechung ersetzt.

Eine Möglichkeit um das zu realisieren sehe ich darin, dass du ohne weiteres mit Bits auf 255 zählen kannst, genauso viele Zeichen ein String ja hat.

Konkret:
PHP-Code:
$asso = array(
  
#$ascii => $code
  
=> "00000000",
  
=> "00000001",
  
=> "00000010",
  
#[...]
  
254 => "11111110",
  
255 => "11111111",
);

$zeichen "\r";
$countstring $asso[ord($zeichen)]; 
Edit: Argh. Gibt ja bereits ne Funktion dafür :> War wohl wieder zu langsam.

Geändert von Wasili (13.07.2007 um 16:57 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 13.07.2007, 17:00
Alles- & Nixkönne
XHTMLforum-Mitglied
 
Registriert seit: 05.10.2006
Ort: Hamburg
Beiträge: 156
Ernie wird schon bald berühmt werden
Standard

Wobei lediglich noch zu beachten wäre, daß decbin() führende Nullen nicht mit ausgibt.
Mit Zitat antworten
  #9 (permalink)  
Alt 13.07.2007, 17:05
Glühend, brennend Rot
XHTMLforum-Mitglied
 
Registriert seit: 12.08.2006
Ort: Riehen
Beiträge: 152
Wasili befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ernie Beitrag anzeigen
Wobei lediglich noch zu beachten wäre, daß decbin() führende Nullen nicht mit ausgibt.
Dem könnte man mit str_repeat() begegnen.

PHP-Code:
$bin decbin($dec);
$bin str_repeat("0"8-strlen($bin)); 
Mit Zitat antworten
Sponsored Links
  #10 (permalink)  
Alt 13.07.2007, 17:14
Alles- & Nixkönne
XHTMLforum-Mitglied
 
Registriert seit: 05.10.2006
Ort: Hamburg
Beiträge: 156
Ernie wird schon bald berühmt werden
Standard

Womi nick jetzt wohl so ziemlich alles zusammnhaben dürfte.
Was mich dann doch interessiert:
Wozu braucht man sowas?
Mit Zitat antworten
Sponsored Links
Antwort


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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[php] Datei bit für bit einlesen. nick Serveradministration und serverseitige Scripte 0 13.07.2007 15:36
[php] opendir/readdir/is_file: datei größer 2gb britneyfreek Serveradministration und serverseitige Scripte 11 10.05.2007 20:57
Inhalt eines DIV-Bereiches aus externer Datei einlesen Wolle CSS 5 21.12.2005 12:12
[PHP] Datei im Hauptverzeichnis speichern lomtas Serveradministration und serverseitige Scripte 11 20.06.2005 14:42
[php/http] datei an client senden Xenon Serveradministration und serverseitige Scripte 13 21.03.2005 20:54


Alle Zeitangaben in WEZ +2. Es ist jetzt 17:07 Uhr.