Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Ile kb ma dana strona
Forum PHP.pl > Forum > Przedszkole
szuki
Witam, próbuję napisać skrypt, który sprawdzi ile KB ma dany kod html. Mowa tutaj o samych znakach. Jak sensownie przeliczyć kb na znaki - by np. ustrzec się przed limitami dla przykładu allegro (65kB - limit opisu aukcji)? Aktualnie kombinuję coś w tym kierunku:

  1. $all = "tutaj jakiś kod html";
  2. $size = 65536 - strlen($all);
  3. if ($size< ...

Jednak nie wiem na ile to miarodajne, no i czy nie ma lepszej metody?
Pozdrawiam.
wNogachSpisz
Gdyby zapomnieć na chwilę że pytasz konkretnie o allegro, to odpowiedź powinna brzmieć mniej więcej tak:
Na rozmiar transmisji wpływa kilka kwestii:

- Kodowanie, w UTF-8 każdy "znak" może mieć 8, 16, 32, 64 bajty.
W skrajnych przypadkach (przy braku normalizacji) każdy znak ma 64 bajty nawet gdy pochodzi z tablicy ASCII tongue.gif
- Kodowanie i kompresja http (gzip, chunked-transfer-encoding). Jedno zmniejsza a drugie zwiększa rozmiar transmisji.

Pytasz konkretnie o allegro, więc musiałbyś zacząć od ustalenia co allegro rozumie przez 65kb, bo rozumieć może kilka rzeczy, ale najpewniej jest to rozmiar w bajtach (ignorujący kodowanie). Jeśli tak to powinieneś zdecydować się na kodowanie ISO-8859-1, w którym każdy znak masz upchany w 8 bitach, a co za tym idzie możesz stworzyć większy opis smile.gif.
Oczywiście o ile allegro po drodze nie przekoduje opisu na swój system kodowania i dopiero wtedy policzy rozmiar..

Musisz to sprawdzić.
szuki
Allegro było tylko przykładem, no i swoją drogą nie podaje zbyt wielu informacj. Jednak sporo się dowiedziałem, dzięki.
Crozin
@wNogachSpisz: mylisz bity i bajty, jak i również wprowadzasz w błąd pisząc o normalizacji (znak ASCII w UTF-8 nie może mieć 64-bitów).
@szuki: O ile tylko strlen nie zostało nadpisane przez mb_strlen (Google: PHP multibyte functions override) jest to najlepszy sposób na sprawdzenie wielkości tekstu (wyrażonej w bajtach). Mimo swojej nazwy, strlen zlicza ilość bajtów, nie znaków (a te, jak zauważył @wNogachSpisz mogą mieć więcej niż jeden bajt).
szuki
Czyli w takim razie najlepiej będzie skompresować kod, a dopiero później go przeliczyć. A czy białe znaki, nowa linia, itd. również wpływają na ilość bajtów?
Crozin
1. Kompresja żądań HTTP nie ma tu absolutnie nic do rzeczy.
2. Białe znaki to takie same znaki jak i inne, a więc zajmują one miejsce.
szuki
W takim razie rozumiem, że warto usunąć wszystkie zbędne spacje, znaki nowej linii - co samo w sobie będzie już optymalizacją wagi. Co jeszcze mogę zrobić?
wNogachSpisz
Pomyłka, chodziło oczywiście o 8,16,32,64 bity, nie bajty.
Nie może ascii siedzieć w 64 bitach? Kiedyś kombinowałem i chyba dało rade.. moge się mylić.
Crozin
Nie, nie może. Chyba że skorzystałeś z UTF-32, ale tutaj mowa o ASCII/UTF-8.
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.