Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Struktura pliku binarnego
Forum PHP.pl > Forum > PHP
quality
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.
Fifi209
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ć.
quality
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
Fifi209
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ł.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.