<?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>kuczok.net blog &#187; programowanie</title>
	<atom:link href="http://blog.kuczok.net/category/programowanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kuczok.net</link>
	<description>programistyczny blog wielotematyczny</description>
	<lastBuildDate>Thu, 01 Dec 2011 11:19:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>energy watcher</title>
		<link>http://blog.kuczok.net/energy-watcher/</link>
		<comments>http://blog.kuczok.net/energy-watcher/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 14:26:52 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[bateria]]></category>
		<category><![CDATA[conky]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[energy watcher]]></category>
		<category><![CDATA[konsola]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[osczędzanie]]></category>
		<category><![CDATA[zużycie]]></category>
		<category><![CDATA[zużycie energii]]></category>
		<category><![CDATA[zużycie prądu]]></category>

		<guid isPermaLink="false">http://www.kuczok.net/?p=206</guid>
		<description><![CDATA[Powertop pokazuje ciekawą informację o aktualnym poborze mocy, którą to chciałem mieć pokazaną w Conky. Niestety nie znalazłem ku temu żadnych gotowych skryptów ani programów. Uznałem więc, że jest potrzeba &#8211; i sam zabrałem się za pisanie. Na początku myślałem by wykonać to w c++, jednak niestety parsowanie stringów tam jest nie na moje nerwy. [...]]]></description>
			<content:encoded><![CDATA[<p>Powertop pokazuje ciekawą informację o aktualnym poborze mocy, którą to chciałem mieć pokazaną w Conky. Niestety nie znalazłem ku temu żadnych gotowych skryptów ani programów. Uznałem więc, że jest potrzeba &#8211; i sam zabrałem się za pisanie. Na początku myślałem by wykonać to w c++, jednak niestety parsowanie stringów tam jest nie na moje nerwy. Więc poszedłem na łatwiznę, i napisałem stosowny skrypt w php.</p>
<pre class="brush:php">#!/usr/bin/php
&lt;?php
/* CONFIG */
define ('BATTERY','BAT0'); //set to your acpi batt (/proc/acpi/battery/XXX)

/* END OF CONFIG */

if (!is_file('/proc/acpi/battery/'.BATTERY.'/state')) die("Battery state file not found!\n\r");

function showhelp() {
	echo "Energy Watcher 0.2\n\r";
	echo "Usage: ewatcher [-vw]\n\r";
	echo "   -v   verbose mode\n\r";
	echo "   -w   show only W\n\r";
}

$verbose = false;
$onlywatt = false;

$arguments = getopt('hvw');
if (isset($arguments['h'])) {
	showhelp(); exit();
}

if (isset($arguments['v'])) $verbose = true;
if (isset($arguments['w'])) $onlywatt = true;

/* get last timestamp &amp; amp */
if (is_file('last_timestamp')) $last_timestamp = file_get_contents('last_timestamp');
else $last_timestamp = time();

if (is_file('last_amp')) $last_amp = file_get_contents('last_amp');
else $last_amp = 1;

/* get current timestamp */
$current_timestamp=time();

/* get current amp */
$battery_state = file_get_contents('/proc/acpi/battery/'.BATTERY.'/state');
$pattern = "/remaining capacity\:[\ ]+([0-9]+)/";
preg_match($pattern,$battery_state,$matches);
$current_amp = intval($matches[1]);

if ( $current_timestamp &gt; ($last_timestamp+60) ) {

	/* get current voltage */
	$pattern = "/present voltage\:[\ ]+([0-9]+)/";
	preg_match($pattern,$battery_state,$matches);
	$current_voltage = intval($matches[1]);

	/* echo infos */
	if ($verbose) {
		echo 'Last timestamp: ' . $last_timestamp . "\n\r";
		echo 'Current timestamp: '. $current_timestamp . "\n\r";

		echo 'Last amp: '. $last_amp/1000 . " Ah\n\r";
		echo 'Current amp: '. $current_amp/1000 ." Ah\n\r";

		echo 'Current voltage: '. $current_voltage/1000 ." V\n\r";
	}

	/* calculate battery usage */
	$time_diff = $current_timestamp - $last_timestamp;
	$amp_diff = ($last_amp - $current_amp) / 1000;
	$battery_usage = $amp_diff / ($time_diff/(60*60));

	if (!$onlywatt) echo 'Battery usage: '.$battery_usage .' A'."\n\r";

	$watt1 = sprintf("%01.2f", ($current_amp * $current_voltage) / (1000*1000) );
	$watt2 = sprintf("%01.2f", ($battery_usage * $current_voltage) / 1000 );
	if (!$onlywatt) echo 'Remaining: '.$watt1 .' W' ."\n\r";
	if (!$onlywatt) echo 'Battery usage: '.$watt2.' W' ."\n\r";
	else echo $watt2;

	file_put_contents('last_timestamp',$current_timestamp);
	file_put_contents('last_amp',$current_amp);
	file_put_contents('last_watt2',$watt2);

} else {
	if ($verbose) echo 'Not enough time for new stats'."\n\r";
	if (is_file('last_watt2')) {
		$watt2 = file_get_contents('last_watt2');
		if (!$onlywatt) echo 'Last battery usage: '.$watt2.' W' ."\n\r";
		else echo $watt2."\n";
	}
}
/* save infos */
if (!is_file('last_timestamp')) {
	file_put_contents('last_timestamp',$current_timestamp);
	file_put_contents('last_amp',$current_amp);
}

?&gt;</pre>
<p>Zapisujemy sobie pod nazwą najlepiej ewatcher i jest <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tworzy on sobie trzy pliki w katalogu, w którym działa więc musi być uruchamiany z uprawnieniami które mu na to pozwolą. Wykorzystanie mocy oblicza na podstawie ostatnich 60 sekund. Opcja -v wyświetla więcej informacji które pobiera z różnych plików, natomiast opcja -w ogranicza się do wyświetlenia wykorzystanej mocy &#8211; właśnie po to, by móc z taką opcją włączyć skrypt do conkyego.</p>
<p>Aby skrypt działał poprawnie wymagane jest oczywiście zainstalowane php w systemie, oraz dostęp z php do katalogu /proc. W skrypcie musimy skonfigurować naszą baterię, ale w większości wypadków defaultowe ustawienie BAT0 będzie poprawne.</p>
<p>Do conky&#8217;ego skrypt wstawiamy następująco:<br />
<em>${execi 60 /sciezka/ewatcher -w}</em></p>
<p>Skrypt musi mieć ustawiony atrybut uruchamialny (<em>chmod +x</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/energy-watcher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Omijanie limitów MegaVideo</title>
		<link>http://blog.kuczok.net/omijanie-limitow-megavideo/</link>
		<comments>http://blog.kuczok.net/omijanie-limitow-megavideo/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 15:55:58 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[strony internetowe]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[bez limitu]]></category>
		<category><![CDATA[CBand]]></category>
		<category><![CDATA[filmy]]></category>
		<category><![CDATA[flowplayer]]></category>
		<category><![CDATA[jwplayer]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[megavideo]]></category>
		<category><![CDATA[mod_cband]]></category>
		<category><![CDATA[movies]]></category>
		<category><![CDATA[nolimit]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[skrypt]]></category>
		<category><![CDATA[skrypty]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[teledyski]]></category>

		<guid isPermaLink="false">http://blog.kuczok.net/?p=146</guid>
		<description><![CDATA[Ostatnio coraz popularniejsze stają się filmy online. Największy serwis, który oferuje hosting oraz odtwarzanie filmów online to megavideo.com. Właśnie na nim skupimy swoją uwagę, a ten artykuł poprowadzi nas (prawie) za rączkę jak stworzyć narzędzie do oglądania filmów bez limitów dla wszystkich tylko przy użyciu jednego konta Premium. Do wykonania serwisu identycznego jak w opisywanym [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio coraz popularniejsze stają się filmy online. Największy serwis, który oferuje hosting oraz odtwarzanie filmów online to megavideo.com. Właśnie na nim skupimy swoją uwagę, a ten artykuł poprowadzi nas (prawie) za rączkę jak stworzyć narzędzie do oglądania filmów bez limitów dla wszystkich tylko przy użyciu jednego konta Premium.</p>
<p>Do wykonania serwisu identycznego jak w opisywanym tutaj artykule potrzebny będzie serwer dedykowany, oparty na apache2 oraz php5. Oczywiście bardzo prawdopodobny jest fakt, że będzie to wszystko działało poprawnie na hostingu wirtualnym, lecz sądzę że to nie jest dobre.</p>
<p>Na początek zaczniemy od konfiguracji apache. Z racji tego, iż mamy streamować filmy online przydatne będzie limitowanie łącza. Przydzielenie dla każdego użytkownika maksymalnego dostępnego pasma nie jest zbyt dobrym rozwiązaniem &#8211; nie chcemy by użytkownicy pobierali filmy dzięki naszemu serwisowi, tylko by je oglądali. Myślę że ograniczenie do 2mbit (256kB/s) jest rozsądne &#8211; zostawia odpowiedni zapas do oglądania online, a nie jest zachęcające do wykorzystywania serwisu do pobierania filmów, chociaż tacy na pewno też się znajdą <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Do ograniczenia łącza skorzystamy z rodzimego modułu CBand. Link do pobrania, skrócona konfiguracja jest <a href="http://www.bgevolution.com/blog/apache-mod-cband/">tutaj</a> oraz <a href="http://codee.pl/cband.html">tutaj</a>. Ja przejdę od razu do konfiguracji którą wprowadziłem w swoim &#8222;interesie&#8221; <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Plik <em>/etc/apache2/vhosts.d/00_default_vhost.conf</em> [akurat ten host był w moim przypadku]</p>
<p>W sekcji <em>VirtualHost</em></p>
<blockquote><p>CBandRemoteSpeed 2048 10 20</p>
<p>CBandDefaultExceededCode 509</p></blockquote>
<p>Teraz przejdźmy do kodu strony. Na początek strona <em>index.php</em> z prostym formularzem i jak na razie bez skryptu (w przykładzie uproszczony kod)</p>
<pre class="brush:xml">&lt;html&gt;
&lt;head&gt;&lt;title&gt;Filmy megavideo bez limitu!&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;
&lt;form action="index.php" method="post"&gt;
&lt;p&gt;Podaj URL filmu megavideo: &lt;input type="text" name="url" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type="submit" name="submit" value="Odtwarzaj!" /&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Super, mamy formularz <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Teraz musimy się zastanowić nad identyfikacją. Każdy film na megavideo identyfikowany jest po bodajże 8 znakach, które trzeba wyciągnąć z url filmu. Niestety, url bywają różne, jednak skupię się tutaj tylko nad tym, które możemy zobaczyć po kliknięciu w &#8222;show url of video&#8221; w playerze megavideo. Można to wyciągać wyrażeniami regularnymi, jednak tutaj posłużymy się <em>substr </em>i <em>strpos</em>. No i od razu przejdźmy do kodu, który takie coś wyciąga:</p>
<pre class="brush:php">$url_filmu = $_POST['url']; //to ad tego naszego formularza nieco wyżej
if (strpos($url_filmu,'&amp;v=')!==FALSE) $kod_filmu = substr($url_filmu,(strpos($url_filmu,'&amp;v=')+3),8);
if (strpos($url_filmu,'/v/')!==FALSE) $kod_filmu = substr($url_filmu,(strpos($url_filmu,'/v/')+3), 8);</pre>
<p>Jak widać są tutaj dwa &#8222;podejścia&#8221; &#8211; wynika to z racji tego, że url może być zapisany różnymi metodami.</p>
<p>Teraz następny krok. O ile to co robiliśmy dotychczas to były czynności przygotowujące, to teraz najważniejsze, i najtrudniejsze. Musimy obsłużyć logowanie do megavideo (czyli nasze konto premium), zapisanie plików cookies, oraz stream filmu. Zaczniemy od logowania. Wszystko działać będzie poprawnie również na zwykłym koncie, jednak po 60 (czy 90 &#8211; nie pamiętam) minutach stracimy możliwość oglądania filmu &#8211; odezwie się limit <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Korzystamy w tym momencie z klasy i streamera, który dostępny jest w dziale <a href="/download-pobieralnia/">download</a> &#8211; może swego czasu rozpiszę całą klasę do obsługi megavideo, ale jak na razie tylko z niej skorzystamy. Do pliku <em>config.php</em> ładujemy nasze dane do megavideo, no i logowanie mamy za pomocą pliku <em>login.php</em>, oto jego zawartość.</p>
<pre class="brush:php">require_once('config.php');
require_once('megavideo.php');

$obj = new MegaVideo;
$obj-&gt;get_cookies();</pre>
<p>Zapisze nam to plik cookie.txt z ciasteczkiem z logowania &#8211; od teraz skrypt przy streamingu będzie używał podanych danych. Skrypt do logowania używamy jedynie jednorazowo, na początku użycia skryptu, jak też przy każdej zmianie danych do megavideo.</p>
<p>Stream filmu już jest prawie ostatnim etapem. Tutaj też ze skryptu do streamingu wykorzystujemy <em>stream.php</em>, któremu jako parametr <em>url</em> podany getem dajemy id filmu, które wybraliśmy nieco wyżej, do zmiennej <em>$kod_filmu</em>.</p>
<pre class="brush:php">set_time_limit(0); //tak żeby nas nie wywaliło w trakcie streamingu

//sprawdzamy czy mamy id filmu czy nie warto nawet wczytywać naszych bibliotek
if (isset($_GET['url'])) $id = $_GET['url'];
else exit();

require_once('config.php'); //ładujemy konfig - tzn login i hasło
require_once('megavideo.php'); //klasa do obsługi megavideo

$mv = new MegaVideo; //nowa instancja klasy mv

if (isset($_GET['start'])) $position = intval($_GET['start']);
else $position = 0;

$filesize = $mv-&gt;get_remote_filesize($_GET['url']);

if ($position &lt;= 0) $file = $mv-&gt;get_remote_video('http://www.megavideo.com/?v=' . $_GET['url']);
else $file = $mv-&gt;get_remote_video('http://www.megavideo.com/?v=' . $_GET['url']) . $position . '/';

$fp = fopen($file, 'rb');

if ($position != 0) header("HTTP/1.1 206 Partial Content"); //nie odtwarzamy od początku - tylko mamy przewinięty film

header('Content-Type: video/x-flv');
header('Content-Disposition: attachment; filename="file.flv"');

if ($position != 0) { //tak samo jak wyżej, film już jest przewinięty <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />
    header('Accept-Ranges: bytes');
    header('Content-Range: bytes '. $position .'-'. ($filesize + $position) .'/'. ($filesize + $position));
}
header('Content-Length: '. $filesize);
while (!feof($fp)) print fread($fp, 8192); //czytamy flv od megavideo i przesyłamy go do klienta, aż film się nie skończy.</pre>
<p>Teraz połączmy to wszystko w jedną całość. Skorzystamy z JWPlayera. Można użyć również np. Flowplayera czy też jakiegokolwiek innego odtwarzacza flv online, jednak z darmowych przekonuje mnie najbardziej JWPlayer, z racji braku reklamy w trybie pełnoekranowym, natomiast Flowplayer szczyci nas przez cały okres oglądania swym logiem. Przykładowy sposób wstawienia odtwarzacza JWPlayer:</p>
<pre class="brush:xml">&lt;div id='mediaspace'&gt;Ładowanie odtwarzacza...&lt;/div&gt;

&lt;script type='text/javascript'&gt;
  var so = new SWFObject('/jwplayer/player.swf','mpl','480','385','9');
  so.addParam('allowfullscreen','true');
  so.addParam('allowscriptaccess','always');
  so.addParam('wmode','opaque');
  so.addVariable('file','http://nasz-serwer-do-streamu.pl/stream.php?url=&lt;?php echo $kod_filmu; ?&gt;');
  so.addVariable('type','lighttpd');
  so.addVariable('stretching','excatfit');
  so.addVariable('bufferlength','10');
  so.addVariable('autostart','true');
  so.write('mediaspace');
&lt;/script&gt;</pre>
<p>Może dzięki temu artykułowi ludzie przestaną tak zdzierać pieniądze na allegro za oglądanie filmów bez limitów przez megavideo. Myślę również że nie zepsuję nikomu pomysłu na biznes <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>W razie problemów, lub chęci bardziej specyficznego rozjaśnienia i/lub dopasowania kodu &#8211; zapraszam do kontaktu.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/omijanie-limitow-megavideo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>IMGHost 2.2 opublikowany!</title>
		<link>http://blog.kuczok.net/imghost-2-2-opublikowany/</link>
		<comments>http://blog.kuczok.net/imghost-2-2-opublikowany/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 10:09:09 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[strony internetowe]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[hosting obrazków]]></category>
		<category><![CDATA[hosting zdjęć]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[pobieralnia]]></category>
		<category><![CDATA[skrypt]]></category>
		<category><![CDATA[strony]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://blog.kuczok.net/?p=173</guid>
		<description><![CDATA[Skrypt do hostingu zdjęć i obrazków &#8211; używany na http://img.kuczok.net/ &#8211; został opublikowany. Wymaga do działania PHP w wersji 5 oraz bazy danych MySQL. Posiada zintegrowany przyjemny instalator. Pobrać można go w pobieralni, gdzie też aktualnie można znaleźć inne skrypty jak np. inferno.]]></description>
			<content:encoded><![CDATA[<p>Skrypt do hostingu zdjęć i obrazków &#8211; używany na <a href="http://img.kuczok.net/">http://img.kuczok.net/</a> &#8211; został opublikowany.</p>
<p>Wymaga do działania PHP w wersji 5 oraz bazy danych MySQL. Posiada zintegrowany przyjemny instalator.</p>
<p>Pobrać można go w <a href="http://blog.kuczok.net/download-pobieralnia/">pobieralni</a>, gdzie też aktualnie można znaleźć inne skrypty jak np. inferno.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/imghost-2-2-opublikowany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ewolucja&#8230;?</title>
		<link>http://blog.kuczok.net/ewolucja/</link>
		<comments>http://blog.kuczok.net/ewolucja/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 15:56:45 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[programowanie]]></category>
		<category><![CDATA[przemyślenia]]></category>
		<category><![CDATA[strony internetowe]]></category>
		<category><![CDATA[ewolucja]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[postęp technologiczny]]></category>
		<category><![CDATA[semantyka]]></category>
		<category><![CDATA[standard]]></category>
		<category><![CDATA[unifikacja]]></category>
		<category><![CDATA[wolny kraj]]></category>
		<category><![CDATA[wolny zawód]]></category>

		<guid isPermaLink="false">http://blog.kuczok.net/?p=120</guid>
		<description><![CDATA[Dawno, dawno temu&#8230; &#60;p&#62;&#60;center&#62;coś na środku&#60;center&#62;&#60;p&#62; Jeszcze nie tak całkiem dawno&#8230; &#60;p align="center"&#62;coś na środku&#60;p&#62; Nowocześnie? &#60;p style="text-align: center;"&#62;coś na środku&#60;p&#62; Ewolucja? Postęp? Unifikacja? Elastyczność kodu? Mhm&#8230; Semantyka? Cóż, idziemy naprzód zgodnie ze standardami, wszystko brnie do przodu&#8230; Ktoś tam wyżej, na górze, ustala zasady, którymi podążamy&#8230; Nawet w wolnym kraju, czy wolnym &#8222;zawodzie&#8221; &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Dawno, dawno temu&#8230;</p>
<p><span style="font-family: monospace;"></p>
<pre class="brush:xml">&lt;p&gt;&lt;center&gt;coś na środku&lt;center&gt;&lt;p&gt;</pre>
<p></span></p>
<p>Jeszcze nie tak całkiem dawno&#8230;</p>
<p><span style="font-family: monospace;"></p>
<pre class="brush:xml">&lt;p align="center"&gt;coś na środku&lt;p&gt;</pre>
<p></span></p>
<p>Nowocześnie?</p>
<p><span style="font-family: monospace;"></p>
<pre class="brush:xml">&lt;p style="text-align: center;"&gt;coś na środku&lt;p&gt;</pre>
<p></span></p>
<p>Ewolucja? Postęp? Unifikacja? Elastyczność kodu? Mhm&#8230; Semantyka?<br />
Cóż, idziemy naprzód zgodnie ze standardami, wszystko brnie do przodu&#8230; Ktoś tam wyżej, na górze, ustala zasady, którymi podążamy&#8230; Nawet w wolnym kraju, czy wolnym &#8222;zawodzie&#8221; &#8211; informatyce. Cóż, nie pozostaje nic innego jak poddać się postępowi, który tak naprawdę jaki by nie był &#8211; jest nam odgórnie narzucony i przez wszystkich wymagany&#8230; <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/ewolucja/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Obrazki osadzone w jednoplikowym skrypcie php</title>
		<link>http://blog.kuczok.net/obrazki-osadzone-w-jednoplikowym-skrypcie-php/</link>
		<comments>http://blog.kuczok.net/obrazki-osadzone-w-jednoplikowym-skrypcie-php/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 13:50:40 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programowanie]]></category>
		<category><![CDATA[base64]]></category>
		<category><![CDATA[embedded]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[inferno]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[obrazek]]></category>
		<category><![CDATA[osadzony]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[zdjęcia]]></category>

		<guid isPermaLink="false">http://blog.kuczok.net/?p=18</guid>
		<description><![CDATA[Wstęp&#8230; Ostatnio pracuję nad projektem inferno &#8211; jedno plikowym systemem zdalnego zarządzania systemem, oczywiście na licencji GPL. Panel takiego skryptu musi ładnie wyglądać, a żeby ładnie wyglądał potrzebuje obrazków&#8230; Tylko jak tu teraz umieścić obrazki w jednym pliku z skryptem? Okazuje się że to nie jest wcale takie trudne! Sposób podejrzałem w skrypcie c99shell. Wystarczy [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Wstęp&#8230; <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </strong></p>
<p>Ostatnio pracuję nad projektem inferno &#8211; jedno plikowym systemem zdalnego zarządzania systemem, oczywiście na licencji GPL. Panel takiego skryptu musi ładnie wyglądać, a żeby ładnie wyglądał potrzebuje obrazków&#8230; Tylko jak tu teraz umieścić obrazki w jednym pliku z skryptem?</p>
<p>Okazuje się że to nie jest wcale takie trudne! Sposób podejrzałem w skrypcie c99shell. Wystarczy zakodować obrazki base64 i wstawić je do pliku php!:)<br />
Wystarczy odpowiednia manipulacja funkcjami <em>base64_decode </em>oraz <em>base64_encode</em>.</p>
<p><strong>No to zaczynamy!</strong></p>
<p>Podstawą są same obrazki. Musimy je zakodować. Oczywiście, funkcją którą wykorzystamy do tego celu będzie <em>base64_encode</em>. Przyjmuję, że mamy plik graficzny w formacie gif o nazwie &#8216;ikonka.gif&#8217;.</p>
<p><span style="font-family: monospace;"> </span></p>
<pre class="brush:php">$filename='ikonka.gif';
file_put_contents($filename.'base64.txt',
base64_encode(file_get_contents($filename));</pre>
<p>Skrypt stworzy nam nowy plik &#8211; ikonka.gif.base64.txt, w którym to znajdziemy zakodowany nasz plik graficzny. Właściwie to już połowa pracy za nami <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Teraz musimy zająć się skryptem, który ma obsługiwać ten obrazek. Przyjmuję, że skrypt jest w pliku <em>skrypt.php</em>, oraz obrazek będziemy chcieli wyświetlić poprzez <em>skrypt.php?image=ikonka</em>.</p>
<p>Na górze dokumentu dopisujemy więc:</p>
<p><span style="font-family: monospace;"> </span></p>
<pre class="brush:php">if (isset($_GET['image']) &amp;&amp; $_GET['image']=='ikonka') {
header('Content-type: image/gif'); //nasz plik był w formacie gif
echo base64_decode('MIEJSCE'); //tutaj umieszczamy "zakodowaną" zawartość pliku graficznego
exit(); //no i kończymy skrypt, bo obrazek już mamy!
}</pre>
<p>I już mamy osadzony obrazek w skrypcie PHP <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Więcej!</strong></p>
<p>Zapraszam do pobrania skryptu <a href="http://www.kuczok.net/download-pobieralnia/">Inferno</a>, w którym można zobaczyć praktyczne i bardziej zaawansowane zastosowanie powyższej metody.</p>
<p>Good luck &amp; have fun <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/obrazki-osadzone-w-jednoplikowym-skrypcie-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

