Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Struktura pliku binarnego
quality
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam.
Mam ogólnie pytanie o plik binarny. Chciałbym przechowywać dane w pliku binarnym, najlepiej jakieś tablice z danymi String. Nie wiem jak za to się zabrać. Wiem jak utworzyć i zapisać plik binarny, ale jaka stworzyć strukturę tego pliku żeby było łatwo z niego korzystać i jak zamienić String czy Array() na postać binarną ?

Potrzebna mi jest taka postać pliku gdyż zależy mi na wydajności, a z innej bazy danych niż pliki nie mogę skorzystać.

Pozdrawiam i dziękuję za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Pogrzebałem po necie, znalazłem kilka przykładów i skleciłem coś dla Ciebie:

  1. <?php
  2.  
  3. $x = 'test';
  4.  
  5. function strToHex($string)
  6. {
  7. $hex='';
  8. for ($i=0; $i < strlen($string); $i++)
  9. {
  10. $hex .= dechex(ord($string[$i]));
  11. }
  12. return $hex;
  13. }
  14.  
  15. function hexToStr($hex)
  16. {
  17. $string='';
  18. for ($i=0; $i < strlen($hex)-1; $i+=2)
  19. {
  20. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  21. }
  22. return $string;
  23. }
  24.  
  25. echo base_convert(strToHex($x), 16, 2).'<br/>';
  26.  
  27. echo hexToStr(base_convert(base_convert(strToHex($x), 16, 2), 2, 16));
  28. ?>


Co do pytania, robisz serialize dla talbicy i masz stringa, którego później możesz tym przekształcić.
Go to the top of the page
+Quote Post
quality
post
Post #3





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Dzieki zrozumialem to mniej wiecej i stworzylem taki kod.

  1. $fileName = "stopka.dat";
  2. $array = array ('jeden', 'dwa', 'trzy');
  3. $x = serialize($array);
  4.  
  5. // konwersja do postaci hexadecymalnej
  6. $hex = strToHex($x);
  7. // konwersja do postaci binarnej
  8. $data = pack("h*", $hex);
  9.  
  10. //zapis do pliku
  11. $ptr = fopen($fileName, 'wb');
  12. fwrite($ptr, $data);
  13. fclose($ptr);
  14.  
  15.  
  16. // odczyt z pliku
  17. $ptrr = fopen($fileName, 'rb');
  18. $fileSize = filesize($fileName);
  19. $dane = fread($ptrr, $fileSize);
  20. fclose($ptrr);
  21.  
  22. // konwersja danych do postaci hexadecymalnej
  23. $data = unpack("h*", $data);
  24. // konwersja danych do stringu
  25. $deHex = hexToStr($data['1']);
  26.  
  27. // wyswietlenie danych
  28. echo '<pre>';
  29. $data = unserialize($deHex);
  30. print_r($data);
  31. echo '</pre>';


Użyłem dokladnie Twoich funkcji do konwersji Hex - String niestety funkcja do przetwarzania do postaci binarnej nie działała przy znakach typu: ";: itd.
Znalazłem natomiast pack i unpack. Zadziałało wszystko dobrze.

Wiec tak, mam juz dane zapisane w pliku.
Jak więc stworzyć jakąś konkretną strukturę danych aby latwo można było sie do nich dobrac.
Chodzi mi o to zeby nie ladowac calego pliku do pamieci tylko czytac po bajtach ewentualnie jakies wyszukiwanie. Nie wiem jak to działa przy danych binarnych.

Powyższy przyklad pobiera cały plik i czyta z niego. Czy jest możliwość stworzenia takiej struktury z której bedzie latwo czytac ? Dane zserializowane ogólnie chyba raczej trudno bedzie pobrac po bajtach, nie wiadomo ile one beda zajmowały.

Pozdrawiam
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Cytat(quality @ 28.01.2010, 11:11:53 ) *
Powyższy przyklad pobiera cały plik i czyta z niego. Czy jest możliwość stworzenia takiej struktury z której bedzie latwo czytac ? Dane zserializowane ogólnie chyba raczej trudno bedzie pobrac po bajtach, nie wiadomo ile one beda zajmowały.

Możesz to policzyć, przy zapisywaniu danych możesz policzyć ile znaków będziesz miał.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 13:32