Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] [klasa] PHP Compacter Class, Ot, taka sobie obcinarka skryptów ;)
SoofMan
post 19.07.2007, 14:44:57
Post #1





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 15.04.2007
Skąd: klikash ? A stond, z tamtond, ze wszond

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


Witam

Przedstawiam dawno temu zapowiadany na forum.php.pl skrypcik: PHP Compacter, którego używam do zmniejszania rozmiarów skryptów PHP Hypercacher.

Od razu powiem, że jest to wersja NIESTABILNA-ALPHA i ma wiele wad - część z nich a także zalety wymienię ponizej:


Wady:

- Powolny jak cholera (przerobienie katalogu PHP Fusion (1MB czy 2MB kodu) zajmuje z 10 minut na procesorcze klasy Sempron 4000+)

- CMSy PHP Fusion i Joomla po przerobieniu nie działają poprawnie, aczkolwiek kod PHP nie wywołuje parse errorów, a w PHP Fusion działają niektóre funkcjonalności (patrz zrzut ekranu z PHP Fusion)

- Algorytm nie wykorzystuje w większym stopniu preg_match, gdyż miałem z tym duże problemy (preg_match nie toleruje niektórych znaków)- zamiast tego algorytm "taguje" więc początek i koniec fraz alfanumerycznych odpowiednim unikalnym ciągiem i potem używa str_replace do wyszukania fraz razem z unikalnymi ciągami. Poza tym z użyciem preg_match program jest jeszcze wolniejszy.

- Pisanie czegoś takiego w języku nie kompilowanym do postaci BINARNEJ ma mały sens, ponieważ jest strasznie powolny

- Ogólnie uważam że program jest mało przydatny w obecnej formie i nie wiem czy komuś się na coś przyda


Zalety:
- Przerabia bezbłędnie mniej przekombinowane skrypty (obsługuje poprawnie dużą część konstrukcji PHP - tylko z niektórymi ma problem: potrzeba więcej debuggowania żeby dojść co nie działa)

- Zmniejsza rozmiar kodu PHP o około 50% bez użycia kompresji

- Implementacja zawiera prymitywny parser PHP więc teoretycznie może się komuś przyda do czegoś

- PHPCompactera można użyć jako SCRAMBLERA (zaciemniacza) kodu - żeby zabezpieczyć nasz kod przed kradzieżą rozwiązań przez mniej doświadczonych programistów



Konstrukcja:

Klasa zawiera prymitywny algorytm parsujący kod PHP, który analizuje kod PHP bajt po bajcie i potrafi odróżnić nazwy zmiennych, znaki specjalne, komentarze, itd.



Licencja: GPL wersja 3.



Początek kodu wygląda tak:

  1. <?php
  2. class PHPCompacter {
  3.  
  4. //If you have any variable name that you don't want to be changed by PHPCompacter, put its name in this array
  5. //Warning: All of these must be written UPPERCASE and without dollar '$' otherwise it won't work correctly !!
  6. var $predefined_exclude_vars = array('THIS', '_SERVER', 'HTTP_SERVER_VARS', '_ENV', 'HTTP_ENV_VARS', '_COOKIE', 'HTTP_COOKIE_VARS', '_GET', 'HTTP_GET_VARS', '_POST', 'HTTP_POST_VARS', '_FILES', 'HTTP_POST_FILES', '_REQUEST', '_SESSION', 'HTTP_SESSION_VARS', 'GLOBALS', 'PHP_ERRORMSG'); 
  7. var $predefined_exclude_funcs = array();
  8. //This are the character that will be used to create new, short variables
  9. var $counter_string_chars = array('qwertyuiopasdfghjklzxcvbnm', '1234567890_');
  10. var $diffrence_separator = '^&pC*'; //This helps to identify/find variable and function names later by separating alphanumeric characters fro
    m non-alphanumeric characters
  11. var $varname_maxlen; //Array containing maximum sizes of string "digits" of counter string
  12. var $min_counter_string_length; //Minimum length of variable names
  13. var $max_counter_string_length; //Maximum length of variable names
  14. var $compact_variables; //BOOLEAN - true means that we want to compact variable names
  15. var $varname_counter = 0;
  16. var $output_folder = '_phpCompacter_Output';
  17. ?>


Klasy używamy w następujący sposób

1. Wrzucamy pliki php_compacter.class.php oraz predefined_keywords.txt do folderu

2. Wrzucamy pliki PHP których rozmiar chcemy zmniejszyć do jakiegoś katalogu obok (może to być folder w którym jest zainstalowane PHP fusion)

3. W php_compacter.class.php (lub oczywiście wpisujemy to w innym pliku, i includujemy klasę) wpisujemy:
  1. <?php
  2. $phpc1 = new PHPCompacter(1, 5, 2);
  3. $phpc1->loadReservedKeywords('predefined_keywords.txt');
  4. $phpc1->RecursiveCompactDir('Nazwa_folderu_z_plikami_PHP');
  5. ?>


4. Odpalamy skrypt z przeglądarki i czekamy na efekt. Jeżeli mamy odpowiednie uprawnienia, to PHP Compacter automatycznie utworzy katalog _phpCompacter_Output i w nim skopiuje strukturę folderów z katalogu, który przerabia i pozapisuje w tej strukturze przerobione pliki PHP w odpowiednich miejscach. Jeżeli nie mamy uprawnień do zapisywania w aktualnym folderze, należy zmienić w klasie zmienną $output_folder na jakiś inny folder - np. mój_folder1/folder/_phpCompacter_Output


Pobrać skrypt można tutaj:

http://hypercacher.com/download_pl.html


Specjalnie do dyskusji na temat tego skryptu utworzyłem też temat na moim forum - jeżeli będą jakieś sugestie poprawek to chętnie je wdrożę.

http://hypercacher.com/forum/viewtopic.php?t=32


-----------
Może komuś będzie chciało się to przepisać na coś binarnego - np. C++ - bo na moje potrzeby wystarczy taka funkcjonalność jak jest teraz, poza tym piszę aktualnie tylko w PHP winksmiley.jpg

Ten post edytował SoofMan 24.07.2007, 10:37:19


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

Szybki, łatwy, prosty i przyjemny dopalacz do stronek w PHP:
http://www.hypercacher.com
Enjoy.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
NuLL
post 19.07.2007, 17:45:07
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Sprobuj na eZ Publishu to potestowac smile.gif Mysle ze kazdy przypadek przerobisz - przynajmniej dla PHP4 winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
SoofMan
post 19.07.2007, 17:56:00
Post #3





Grupa: Zarejestrowani
Postów: 55
Pomógł: 0
Dołączył: 15.04.2007
Skąd: klikash ? A stond, z tamtond, ze wszond

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


Cytat(NuLL @ 19.07.2007, 18:45:07 ) *
Sprobuj na eZ Publishu to potestowac smile.gif Mysle ze kazdy przypadek przerobisz - przynajmniej dla PHP4 winksmiley.jpg


Dobry pomysł...

Ale wcale nie jest tak dużo tych przypadków jak myślisz. Joomla też już działa bez PARSE errorów... po prostu skrypt zmienia nazwy jakichś zmiennych na nie takie jak trzeba i jakieś dane się gubia po drodze...

Nie miałem jeszcze czasu żeby zdebuggować PHP fusion i sprawdzić co dokładnie się gubi i gdzie - pewnie po prostu jest jakiś typ odwołania do zmiennej którego nie przewidziałem.

Dodam że PHPCompacter zadziała z kazdym skryptem, jeżeli wyłączyć skracanie nazw zmiennych (sprawdzone).

wystarczy utworzyć klasę w ten sposób:

  1. <?php
  2. $phpc1 = new PHPCompacter(false);
  3. ?>


Żeby uzyskać wersję obcinającą tylko niepotrzebne spacje i końce linii. Tylko jaki tego sens ? Zysk objętościowy będzie niewielki.


------------
Aktualizacja:

Wersja sprzed 19:16 dzisiaj była skopana w taki sposób że uniemożliwiała wykonanie czegoś takiego:

  1. <?php
  2. $phpc1 = new PHPCompacter(false);
  3. ?>


Właśnie uploadowałem nową na server - jeżeli ktoś pobrał wcześniej, to niech ściągnie jeszcze raz.

Ten post edytował SoofMan 19.07.2007, 18:15:21


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

Szybki, łatwy, prosty i przyjemny dopalacz do stronek w PHP:
http://www.hypercacher.com
Enjoy.
Go to the top of the page
+Quote Post

Posty w temacie
- SoofMan   [php] [klasa] PHP Compacter Class   19.07.2007, 14:44:57
- - NuLL   Do czego to ma sluzyc ?   19.07.2007, 16:14:43
- - tuner   Do zmniejszania! Taki proces odwrotnej ewolucj...   19.07.2007, 16:26:54
- - NuLL   No dobra a co daje takie zmniejszenie ? Jakis kos...   19.07.2007, 16:42:57
|- - hwao   Cytat(NuLL @ 19.07.2007, 17:42:57 ) N...   19.07.2007, 16:50:01
|- - SoofMan   Cytat(hwao @ 19.07.2007, 17:50:01 ) s...   19.07.2007, 17:17:04
- - NuLL   Sprobuj na eZ Publishu to potestowac Mysle ze kaz...   19.07.2007, 17:45:07
|- - SoofMan   Cytat(NuLL @ 19.07.2007, 18:45:07 ) S...   19.07.2007, 17:56:00
- - menic   Jeżeli chodzi o same usuwanie spacji i komentarzy ...   19.07.2007, 19:05:20
|- - SoofMan   Cytat(menic @ 19.07.2007, 20:05:20 ) ...   19.07.2007, 19:48:32
- - 1010   A co to wszystko ma ci dać? Tylko kod straci na cz...   20.07.2007, 13:52:28
- - skowron-line   sorki nie doczytalem ale mam problemik mam cos t...   20.07.2007, 14:05:59
- - SoofMan   Wygląda że nie ma takiego katalogu. Usuń linijkę ...   21.07.2007, 01:07:09
- - Riklaunim   jak dla mnie jest to bez sensu jak ktoś chce zamk...   21.07.2007, 19:27:33
|- - SoofMan   Cytat(Riklaunim @ 21.07.2007, 20:27:3...   22.07.2007, 11:46:01
- - Turgon   Zgadzam się z Riklaunimem. Objętość kodu zależy od...   22.07.2007, 09:19:31
- - menic   Wprawdze nie testowałem, ale zamysł mi sie podoba....   22.07.2007, 19:40:57
- - SHiP   No cóż, pomysł dziwny. Dla malych serwisow gdzie h...   22.07.2007, 22:45:17
|- - SoofMan   Cytat(SHiP @ 22.07.2007, 23:45:17 ) N...   23.07.2007, 11:20:42
- - menic   Przydalaby sie opcja uruchomienia tego spod konsol...   23.07.2007, 11:26:44
|- - SoofMan   Cytat(menic @ 23.07.2007, 12:26:44 ) ...   23.07.2007, 16:51:04
- - Ludvik   W środowisku produkcyjnym warto, aby w kodzie nie ...   23.07.2007, 17:27:03
- - SoofMan   Cytat(Ludvik @ 23.07.2007, 18:27:03 )...   23.07.2007, 19:10:13


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: 14.08.2025 - 17:53