Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DataFile - sposob przechowywania danych, 4fun
q.michal
post 16.05.2017, 16:17:22
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Czesc,


Tym razem prosta klaska do przechowywania danych w plikach w nowym formacie.
Plik ma 2 naglowki oraz dane. Pierwszy naglowek w calosci jest sygnatura na podstawie ktorej sprawdzamy czy plik jest poprawny. Nastepnie naglowek zawiera informacje jak:
* suma kontrolna naglowka
* Identyfikator naglowka
* Flagi (obecnie nie uzywane, chce za ich pomoca rozrozniac typ szyfrowania / kompresji)
* System na jakim plik zostal utworzony, chociazby aby wiedziec ze trzeba zamienic \ na /
* Wersja pliku (nowsza wersja bedzie wymagala klasy w nowszej wersji)
* Rozmiar danych
* Suma kontrolna danych

Dane po zapisie do pliku sa od razu walidowane.
Kod: http://wklej.org/hash/8de4c3a48f3/


Jak zwykle krytyka mile widziana smile.gif
Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 17.05.2017, 09:11:42
Post #2





Grupa: Moderatorzy
Postów: 34 682
Pomógł: 5767
Dołączył: 27.12.2004




Mozesz mi napisac co robi ten kod:

  1. if(!$bytes) {
  2. $bytes = strlen($bytes);
  3. }

?

W klasie uzywasz stalej
DATAFILE_VERSION
Ale chyba slepne bo nie widze bys gdziekolwiek ja ustawial

No i najwazniejsze: po co? Ja rozumiem, ze w ramach nauki, ale co to robi? W jakim nowym formacie te dane sa przechowywane? Po co przechowywac te dane w jakims nowym formacie?

Cytat
System na jakim plik zostal utworzony, chociazby aby wiedziec ze trzeba zamienic \ na /

Tak klasa przechowuje jakies dane. Guzik ja powinno obchodzic na jakim systemie te dane zostaly zapisane. Ta klasa nie przetwarza sciezek plikow.


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
q.michal
post 17.05.2017, 10:03:08
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Cytat(nospor @ 17.05.2017, 10:11:42 ) *
Mozesz mi napisac co robi ten kod:

  1. if(!$bytes) {
  2. $bytes = strlen($bytes);
  3. }

?


Nic, nadaje sie do wywalenia, moje przeoczenie poprostu. Dzieki za zwrocenie uwagi.

Cytat(nospor @ 17.05.2017, 10:11:42 ) *
W klasie uzywasz stalej
DATAFILE_VERSION
Ale chyba slepne bo nie widze bys gdziekolwiek ja ustawial


Zwykla stala ktora zapomnalem przekleic, bo zdefiniowana jest w osobnym pliku: define('DATAFILE_VERSION' 1.0);

Cytat(nospor @ 17.05.2017, 10:11:42 ) *
No i najwazniejsze: po co? Ja rozumiem, ze w ramach nauki, ale co to robi? W jakim nowym formacie te dane sa przechowywane? Po co przechowywac te dane w jakims nowym formacie?


Dokladnie tak - w celach edukacyjnych. Dane mozna w niej przechowywac, chociazby po to, aby miec od razu ich sume kontrolna zapisana w tym samym, pojedynczym pliku, czy dodatkowe informacje jak chociazby system na jakim zostal utworzony. Poza tym docelowo bedziesz mogl wlaczyc/wylaczyc kompresje i zaoszczedzic troche miejsca na dysku/transferu w sieci.


Cytat(nospor @ 17.05.2017, 10:11:42 ) *
Tak klasa przechowuje jakies dane. Guzik ja powinno obchodzic na jakim systemie te dane zostaly zapisane. Ta klasa nie przetwarza sciezek plikow.


Ta klasa nie - ale zapisuje taka informacje do pliku wraz z danymi i mozesz z niej zawsze skorzystac. Masz taka mozliwosc. To tylko 1 bajt wiecej, a nie musisz pozniej zachodzic w glowe jaki bedzie znak konca linii, separator w sciezce, itp.

Ten post edytował q.michal 17.05.2017, 10:03:58
Go to the top of the page
+Quote Post
nospor
post 17.05.2017, 10:27:29
Post #4





Grupa: Moderatorzy
Postów: 34 682
Pomógł: 5767
Dołączył: 27.12.2004




Cytat
Zwykla stala ktora zapomnalem przekleic, bo zdefiniowana jest w osobnym pliku: define('DATAFILE_VERSION' 1.0);
Ta informacja ma byc w klasie a nie w jakims osobnym pliku.



--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
q.michal
post 17.05.2017, 10:40:34
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Jakiej znowu tablicy $dane? Mozesz w pliku zapisac dowolne dane, jakie chcesz, w tym dowolna ilosc tablic. To o czym mowisz jest zapisane w naglowku pliku. Masz tam sume kontrolna, rozmiar danych, OS, wersje pliku (nie date utworzenia a wersje formatu). Nie widze powodu dla ktorego ktos mialby sobie tworzyc tablice w postaci:
  1. $dane = ['os' => 'windows', 'dane' => $moje_super_dane];

i ja zapisywac do pliku. Format pliku sam w sobie przewiduje przechowanie takiej informacji w naglowku, bez wzgledu na to czy jest potrzebna czy nie. Mozesz z niej skorzystac lub nie. To ze klasa ma metode ktora zwraca rodzaj systemu wynika jedynie z faktu, ze jest to informacja o tym na jakim systemie powstal plik. Jest to fragment metadanych i skoro klasa takie metadane zapisuje w naglowku - to uwazam ze powinna byc metoda, ktora pozniej pozwoli je odczytac.

Co wiecej, juz teraz w naglowku sa przechowywane flagi (obecnie 0x0000), ale w przyszlosci na podstawie tych danych klasa ma rozpoznawac sposob kompresji i szyfrowania.

Ten post edytował q.michal 17.05.2017, 10:42:22
Go to the top of the page
+Quote Post
nospor
post 17.05.2017, 10:42:34
Post #6





Grupa: Moderatorzy
Postów: 34 682
Pomógł: 5767
Dołączył: 27.12.2004




Cytat
Jakiej znowu tablicy $dane?

public function saveData($data) {

edit: wybacz, usunalem cos zanim napisales, bo sie rozmyslilem. Ale widze juz to doczytales i odpowiedziales wink.gif


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
q.michal
post 17.05.2017, 10:51:34
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Spoko, tak jak napisalem sa to metadane zapisane w naglowku pliku.
Jest to wstepna wersja tego formatu danych. Docelowo chce zaimplementowac jeszcze na pewno kompresje i szyfrowanie. Jezeli uwazasz ze cos jeszcze warto dodac, to jestem otwarty na propozycje wink.gif
Go to the top of the page
+Quote Post
nospor
post 17.05.2017, 10:58:08
Post #8





Grupa: Moderatorzy
Postów: 34 682
Pomógł: 5767
Dołączył: 27.12.2004




Cytat
tak jak napisalem sa to metadane zapisane w naglowku pliku.
Ja wiedzialem ze to sa metadane naglowka. NIe mniej jednak nie uwazalem ze ta informacja jest tam potrzebna. Po namysle, doszedlem do wniosku ze moze jednak wink.gif

Takie rzeczy jak
0x22
ktore powtarzasz w kilku miejscach powinny byc stalymi w klasie

Skoro sie uczysz, dobrze by bylo uczyc sie na najnowszym php7 a nie brnac w php5


--------------------

Najlepsze kawałki programistyczne || Dowcipy o informatykach || Forum PHP dla opornych
Klasy: Pager (stronicowanie) | Cache | ShoutBox (Chat) | Widok | Ładne url'e

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 17.05.2017, 15:36:43
Post #9





Grupa: Zarejestrowani
Postów: 7 799
Pomógł: 1373
Dołączył: 26.10.2005

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


Kod
return ($this->getVersion() && $this->getVersion() <= DATAFILE_VERSION);

To przeczy kompatybilności. Skoro nowszy format pliku będzie wymagał nowszej klasy to nowsza klasa nie odczyta nr. wersji. W nowych wersjach będziesz musiał stosować inne sprawdzania wersji więc od razu zainteresuj się http://php.net/manual/en/function.version-compare.php

isValid() - sugeruje raczej czy plik jest w całości poprawny

Przydało by sie szyfrowanie (kompresja w sumie też może być).

W sumie taki format może się nadać do transferowania danych pomiędzy api, ale SSL też załatwia robotę(no chyba ze z jakichś powodów nie mamy).
Pola możesz (i raczej powinieneś) zainicjować od razu przed konstruktorem, nie ma sensu robić tego w konstruktorze.
Go to the top of the page
+Quote Post
q.michal
post 17.05.2017, 16:15:50
Post #10





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Cytat(Pyton_000 @ 17.05.2017, 16:36:43 ) *
Kod
return ($this->getVersion() && $this->getVersion() <= DATAFILE_VERSION);

To przeczy kompatybilności. Skoro nowszy format pliku będzie wymagał nowszej klasy to nowsza klasa nie odczyta nr. wersji. W nowych wersjach będziesz musiał stosować inne sprawdzania wersji więc od razu zainteresuj się http://php.net/manual/en/function.version-compare.php


Chyba nie do konca rozumiem?


Cytat(Pyton_000 @ 17.05.2017, 16:36:43 ) *
isValid() - sugeruje raczej czy plik jest w całości poprawny


Moze byc poprawny i jednoczesnie w niewspieranej wersji.

Zastanawiam sie jeszcze cemu w linii 255 przy wywolaniu $this->checksum($store) dostaje ostrzezenie w IDE: Expected Datafile got string?

Ten post edytował q.michal 17.05.2017, 16:24:39
Go to the top of the page
+Quote Post
mls
post 23.05.2017, 14:19:02
Post #11





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Kompletnie idiotyczne rozwiązanie, nie da się dla tego znaleźć żadnego sensownego zastosowania.
Ale... żeby nie było, że OT:
- poczytaj sobie o pack i unpack
- poczytaj o różnicach == i ===
- poczytaj o class constants (zamiast używać stałych definiowanych gdzieś globalnie)
Fragmentu
  1. $store = gzencode(base64_encode(serialize($data)));
nawet nie chcę komentować.
Nie mam nic przeciwko programowaniu głupot dla samej nauki ale... serio, po co coś tak kompletnie nieprzydatnego i nieoptymalnego?!

Ten post edytował mls 23.05.2017, 14:19:22


--------------------
Go to the top of the page
+Quote Post
q.michal
post 23.05.2017, 18:44:59
Post #12





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Nie chce byc zlosliwy, ale sens pewnie taki sam jak pisanie svn-sync (https://gist.github.com/mlask/6954a8f5f8525193379ac51f2d930432) w PHP ;-)
Da sie? Da. Tylko po co, skoro takie rozwiazanie wymaga dodatkowych zaleznosci w postaci interpretera i jest nieoptymalne? Takie skrypty pisze sie chociazby w Bashu/AWK a nie w PHP.
Go to the top of the page
+Quote Post
mls
post 24.05.2017, 16:20:39
Post #13





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Cytat(q.michal @ 23.05.2017, 19:44:59 ) *
Nie chce byc zlosliwy, ale sens pewnie taki sam jak pisanie svn-sync (https://gist.github.com/mlask/6954a8f5f8525193379ac51f2d930432) w PHP ;-)
Da sie? Da. Tylko po co, skoro takie rozwiazanie wymaga dodatkowych zaleznosci w postaci interpretera i jest nieoptymalne?


Nie zrozumiałeś. Twoje rozwiązanie nie jest do niczego potrzebne. Nie ma żadnego sensownego zastosowania.
Przytaczanie mojego kodu z Gista jako "przykładu" o czym ma świadczyć? O dalszym twoim braku zrozumienia? Jeszcze rozumiem, gdybym wystawiał ten kod do oceny czy coś. Ale to jest mój prywatny kod na prywatny użytek, który wykorzystują również moi współpracownicy - stąd jest publicznie dostępny. Nic ponad to. A argument o zależnościach też nie do końca trafiony, bo kod pisany był (i jest użytkowany) na środowiskach z systemem macOS, gdzie PHP jest standardowo dostępne wink.gif

Cytat
Takie skrypty pisze sie chociazby w Bashu/AWK a nie w PHP.


Że co?! A kto tak powiedział? Pisze się w tym, w czym jest prościej i wygodniej. Nie widzę powodu dla którego miałbym tego nie pisać w PHP (który znam wystarczająco dobrze) czy jakimkolwiek innym języku programowania.

W pierwszym poście tego wątku pisałeś, że "krytyka mile widziana". Więc ją łaskawie przyjmij smile.gif

Ten post edytował mls 24.05.2017, 16:22:43


--------------------
Go to the top of the page
+Quote Post
q.michal
post 24.05.2017, 17:09:51
Post #14





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Konstruktywna krytyka tak, natomiast Twoj post niewiele wnosi do tematu.

To, ze nie znajdujesz dla niego zastosowania, nie znaczy ze nikt nie znajdzie. Jest to wylacznie Twoja opinia, o ktora nie dbam.
Czytajac natomaist Twoja ostatnia wypowiedz, odnosze wrazenie ze sam masz problem ze zrozumieniem. Jestes podobno programista z 15-letnim doswiadczeniem. Powinienes wiec wiedziec, ze pisanie takich skryptow w PHP jest nieoptymalne. A suma sumarum ostatecznie i tak wykonujesz polecenia powloki forkujac poraz kolejny proces basha/sh/ksh/cokolwiek masz w OSX. Jaki wiec jest sens uruchamiac z konsoli interpreter PHP, by z niego poraz kolejny wywolywac shella? Zaden - dlatego taki skrypt powinien byc napisany w bashu, a nie w PHP. Zreszta przegladajac Twoj kod PHP i patrzac jak usilnie dolaczasz go do OSXa podczepiajac skrypty pod akcje wnioskuje ze innego jezyka chyba nie znasz.

Moglby zatem smialo rzec, ze przygania kociol garnkowi.
Koniec tematu z mojej strony.
Go to the top of the page
+Quote Post
mls
post 25.05.2017, 22:13:21
Post #15





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

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


Cytat(q.michal @ 24.05.2017, 18:09:51 ) *
Konstruktywna krytyka tak, natomiast Twoj post niewiele wnosi do tematu.

To ty zacząłeś odbiegać od tematu... wink.gif

Cytat
Zreszta przegladajac Twoj kod PHP i patrzac jak usilnie dolaczasz go do OSXa podczepiajac skrypty pod akcje wnioskuje ze innego jezyka chyba nie znasz.

Znam parę innych mniej lub bardziej popularnych języków programowania, ale z PHP korzystam na codzień i w tym pisze mi się najbardziej "neutralnie" - dlaczego więc nie miałbym go używać na własny użytek również do innych celów?
Tak przy okazji, nie wiem czy wiesz, ale ogrom ludzi tak robi - ułatwia sobie życie pisząc proste "programiki" w językach, w których jest im najwygodniej. Równie dobrze jak PHP może to być Python, Ruby, cokolwiek.

Odwróciłeś kota ogonem, bezmyślnie przyczepiasz się do mojego prywatnego kodu którego nikomu celowo nie daję do oceny (bo i nie ma czego oceniać), ale sam żadnej krytyki nie przyjmujesz, w żadnym wątku. Dalsza dyskusja faktycznie nie ma sensu bo to jak gadanie do ściany...

Ten post edytował mls 25.05.2017, 22:21:56


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.08.2019 - 07:31