<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sh4dow Hell &#187; automat</title>
	<atom:link href="http://www.sh4dow.pl/tag/automat/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sh4dow.pl</link>
	<description>Join the Darkside and get a free cookie ...</description>
	<lastBuildDate>Fri, 16 Dec 2011 14:30:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Instalator w php, plik samo rozpakowywujący</title>
		<link>http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=instalator-w-php-plik-samo-rozpakowywujacy</link>
		<comments>http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 10:02:01 +0000</pubDate>
		<dc:creator>Sh4dow</dc:creator>
				<category><![CDATA[C0ding...]]></category>
		<category><![CDATA[automat]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[skrypt]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.sh4dow.pl/?p=131</guid>
		<description><![CDATA[<a href="http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/" title="Instalator w php, plik samo rozpakowywujący"></a>Trudno mi powiedzieć co to takiego jest, albo raczej jak to nazwać. Kto używa Linuksa spotyka czasami się z wersją instalatora w postaci pliku .sh który dużo waży jest skryptem ale z sporym bagażem. Wszystko ładnie po otwarciu pliku widoczny &#8230;<p class="read-more"><a href="http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/" title="Instalator w php, plik samo rozpakowywujący"></a><p>Trudno mi powiedzieć co to takiego jest, albo raczej jak to nazwać. Kto używa Linuksa spotyka czasami się z wersją instalatora w postaci pliku .sh który dużo waży jest skryptem ale z sporym bagażem. Wszystko ładnie po otwarciu pliku widoczny jest rzeczywiście skrypt shell&#8217;a, ale jeśli przewiniemy wystarczająco nisko zobaczymy tam &#8222;krzaczki&#8221; czyli dane do rozpakowania.<br />
No więc tak właśnie mechanizm stworzyłem na własny i przy okazji służbowy użytek.<br />
<span id="more-131"></span><br />
Sama zasada działania jest prosta. Uruchamiany jest skrypt który Odczytuje sam siebie i rozpakowuje sam siebie. Niby nic trudnego, kwestia tylko przesunąć wskaźnik do miejsca gdzie zaczynają się dane do rozpakowania a kończy skrypt. Jedyne co trzeba zrobić to stworzyć taki plik. A do tego tez napiszemy automacik. Lubie automatyzować co tylko się da bo tak się żyje prościej (czasami) <img src='http://www.sh4dow.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Jako że wykorzystamy do tego rozszerzenie zlib możemy pakować pliki jeden za drugim, nie kompresujemy dużej ilości plików tylko każdy po kolei. Struktura pliku będzie wyglądać następująco:<br />
Skrypt >> ([10 bajtowy nagłówek z liczba określającą długość skompresowanego pliku] >> [skompresowany plik z pełną ścieżka i nazwą pliku] ) x Dowolną ilość razy >> [end] (znacznik kończący).<br />
Sam sens jest dość prosty. Najlepsze jest to że wielkość pliku nie wpłynie na ilość &#8222;pochłoniętej&#8221; pamięci, ponieważ na końcu skryptu &#8222;zabijamy&#8221; interpreter poprzez <strong><em>die()</em></strong> i zamykamy interpreter poprzez <strong><em>?&gt;</em></strong>.<br />
W pierwszym nagłówku można by się postarać o bardziej finezyjną formę ale w chwili obecnej chodzi mi raczej o prostotę rozwiązania. w pierwszych 10 bajtach jest jawna, nieskompresowana liczba, która określa jak ile należy przeczytać aby pobrać cały plik i go rozpakować. Nagłówek pliku jest dopełniany pustymi miejscami do 10 znaków. Po tych znakach od razu rozpoczyna się skompresowany plik. Po zakończeniu pliku Rozpoczyna się kolejny 10 bajtowy nagłówek a po nich kolejny plik i tak dopóki zamiast 10 bajtowego nagłówka pojawi się string &#8222;[end]&#8221; oznaczający po prostu koniec pliku.<br />
Aby wszystko działało musimy mieć dwa pliki wykonujące oraz katalog w którym znajdują się pliki do zainstalowania. Pierwszy plik wykonujący to skrypt rozpakowujący, ale bez danych o plikach. Taki powiedzmy szablon. który zostanie skopiowany, zmodyfikowany o pewna wartość a następnie dodany do niego &#8222;bagaż&#8221;.<br />
Drugi plik to ów automacik który wykona za nas całą brudną robotę pakowania i modyfikacji szablonu. Pierwszym krokiem jest oczywiście skopiowanie szablonu, obliczenie jego długości &#8222;na pusto&#8221; i zmodyfikowanie go tak, aby wiedział od którego miejsca zaczyna się pierwszy nagłówek.<br />
W szablonie zostawimy taka linijke</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$seek</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xx</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wstawione zmienna <strong>$xx</strong> jest unikalna i pojawia się tylko raz. Użyłem zmiennej a nie unikalnego &#8222;dziwnego&#8221; string&#8217;a aby edytor PHP nie pokazywał mi błędu. Wygodniej się wtedy pracuje. Oczywiście jeśli wielkość szablonu jest różny niż 3 cyfrowa liczba, to należy tą liczbę zmodyfikować, aby po dodaniu pokazywała na dobre miejsce. Dlaczego 3 cyfrowa ? Bo zastępuje ona 3 znakowy string oznaczający zmienną.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$desc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./init.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #000088;">$size</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$size</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #000088;">$size</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'$xx'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Po zmodyfikowaniu szablonu, rozpoczynamy kompresje i doklejanie danych.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">gzcompress</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'__++__'</span><span style="color: #339933;">.</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$filename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #666666; font-style: italic;">// __++__ służy jako unikalny znak rozdzielający ścieżke pliku od jego zawartości</span>
<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_pad</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">.</span><span style="color: #000088;">$content</span><span style="color: #339933;">,</span> FILE_APPEND <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_pad</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'[end]'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> FILE_APPEND <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">chmod</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #208080;">0755</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Oczywiście unikalny string &#8222;__++__&#8221; można zastąpić innym lub też zmodyfikować nagłówek tak, aby pomieścił długość danych oraz nazwę pliku. Można by też to skompresować dla mniejszej ilości danych ale należy tak dobrać tak długość nagłówka aby na pewno pomieścił wszystkie dane. Co oczywiście przy dłuższych nazwach plików lub ogólnie dłuższych ścieżkach może komplikować sprawę.<br />
Może kiedyś zmodyfikuje żeby było bardziej <em>pro</em> <img src='http://www.sh4dow.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
To na tyle jesli chodzi o kompresje, zakończenie pliku oraz ustawienie prac do wykonania. Wszystko później ubierzemy w jakiś ładny Iteratorek Rekursywny po katalogu do tego jakaś pętelka i już jesteśmy w domu. Działające pliki oczywiście na samym dole wpisu.</p>
<p>A jak działa sam szablon ? To proste. Odczytuje wartość przesunięcia i zmienia pozycje wskaźnika do pliku i odczytuje 10 bajtów nagłówka.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$seek</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">786</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//przykładowa wartość </span>
<span style="color: #000088;">$end</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//flaga dla ostatniego pliku</span>
<span style="color: #000088;">$gz</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;.<span style="color: #006699; font-weight: bold;">$argv[0]</span>.&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//wywolanie pliku z lini polecen przekazuje nazwe pliku w 0 elemencie tablicy $argv</span>
<span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$seek</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//przesuwamy wskaźnik</span>
<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//czytamy 10 bajtów nagłówka</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'[end]'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>	<span style="color: #000088;">$end</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span> 	<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//szukanie znacznika koncowego</span>
<span style="color: #000088;">$seek</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// przesuwamy wartość o wielkość nagłówka</span></pre></div></div>

<p>Po wykonaniu tego kodu mamy już ilość danych do przeczytania oraz zmienna gdzie mamy wartosc do jakiej mamy przesunąć wskaźnik aby trafił na początek danych pliku.</p>
<p>No więc czas odczytać zawartość pliku oraz jego nazwę, zapisać na dysk i tak dalej.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$seek</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//przesuwamy wskaźnik za nagłówek</span>
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">gzuncompress</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//odczytujemy dane i odrazu dekompresujemy</span>
<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'__++__'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//rozdzielamy nazwe pliku i dane</span>
<span style="color: #666666; font-style: italic;">//sprawdzamy czy ewentualny katalog do pliku istnieje jesli nie to będziemy go tworzyć</span>
<span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$dir</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #339933;">,</span> <span style="color: #208080;">0755</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Directory <span style="color: #006699; font-weight: bold;">$dir</span> ... created<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//sprawdzamy czy sam plik istnieje</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Error ! <span style="color: #006699; font-weight: bold;">$filename</span> allready exists !<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$filename</span> ... created<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//przesuwamy wartość o wielkość odczytywanych danych, co powinno wskazywać na nagłówek następnego pliku</span>
<span style="color: #000088;">$seek</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$size</span><span style="color: #339933;">;</span></pre></div></div>

<p>I kolejny raz wystarczy ubrać wszystko w pętelke i wszystko będzie działać ładnie.</p>
<p>W obu skryptach można pokusić się o wiele udoskonaleń. Poprawić nagłówki aby trzymały, wielkość, nazwę pliku, jego uprawnienia. Dodatkowo szablon może sprawdzać wersje PHP czy posiada rozszerzenie &#8222;<strong>zlib</strong>&#8222;. W szale nudów można by stworzyć ładny wygląd przy rozpakowywaniu, jakiś <em>progress bar</em> albo nawet wizualizacje pod konsolą Linuksa w dodatku ncurses.<br />
Można stworzyć samo wyzwalacz po rozpakowaniu, powiedzmy ładujący baze danych czy cokolwiek innego.</p>
<p>Modyfikacje pozostawiam czytelnikom którzy przypadkiem trafili na tą stronę i się zgubili i trafili na koniec tego posta. Swoje modyfikacje zaprezentuje pewnie w późniejszym czasie.<br />
Poniżej w pełni działający szablon oraz &#8222;kompresor&#8221;.</p>
<p>Skrypt &#8222;Kompresora&#8221; (używam Linuksa więc dlatego ta pierwsza linijka, to tak jak by ktoś nie rozumiał)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">#!/usr/bin/php
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$source</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./szablon.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$desc</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./setup.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$path</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'./script_dir/'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">copy</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$source</span><span style="color: #339933;">,</span> <span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">filesize</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #000088;">$size</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">3</span> <span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span>  <span style="color: #000088;">$size</span> <span style="color: #339933;">+</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>string<span style="color: #009900;">&#41;</span><span style="color: #000088;">$size</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'$xx'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> RecursiveIteratorIterator<span style="color: #009900;">&#40;</span> <span style="color: #000000; font-weight: bold;">new</span> RecursiveDirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #000088;">$path</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> RecursiveIteratorIterator<span style="color: #339933;">::</span><span style="color: #004000;">SELF_FIRST</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$dir</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$file</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">isDir</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$filename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$path</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'./'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span>  <span style="color: #000088;">$filename</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot; ... &quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">gzcompress</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'__++__'</span><span style="color: #339933;">.</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getPath</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$file</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getFilename</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">9</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_pad</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">.</span><span style="color: #000088;">$content</span><span style="color: #339933;">,</span> FILE_APPEND <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot; done<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #990000;">str_pad</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'[end]'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> FILE_APPEND <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">chmod</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$desc</span><span style="color: #339933;">,</span> <span style="color: #208080;">0755</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Plik Szablonu</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">#!/usr/bin/php
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$seek</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$xx</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$end</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$gz</span> <span style="color: #339933;">=</span> <span style="color: #990000;">fopen</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;.<span style="color: #006699; font-weight: bold;">$argv[0]</span>.&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;r&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$end</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$seek</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'[end]'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>	<span style="color: #000088;">$end</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span> 	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$seek</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">fseek</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$seek</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #990000;">gzuncompress</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">fread</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">list</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'__++__'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #990000;">dirname</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$dir</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">mkdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #339933;">,</span> <span style="color: #208080;">0755</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Directory <span style="color: #006699; font-weight: bold;">$dir</span> ... created<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Error ! <span style="color: #006699; font-weight: bold;">$filename</span> allready exists !<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$content</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'${nazwa_projektu}'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$projekt</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$filename</span> ... created<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000088;">$seek</span> <span style="color: #339933;">+=</span> <span style="color: #000088;">$size</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">gzclose</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$gz</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Finish !<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//pamietajcie zostawić enter na końcu szablonu !!!</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.sh4dow.pl/2009/08/instalator-w-php-plik-samo-rozpakowywujacy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
