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

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: 19.07.2025 - 09:59