<?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; kod</title>
	<atom:link href="http://blog.kuczok.net/tag/kod/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>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>Standardy stron internetowych</title>
		<link>http://blog.kuczok.net/standardy-stron-internetowych/</link>
		<comments>http://blog.kuczok.net/standardy-stron-internetowych/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 06:23:44 +0000</pubDate>
		<dc:creator>end</dc:creator>
				<category><![CDATA[przemyślenia]]></category>
		<category><![CDATA[strony internetowe]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[divy]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[internetowe]]></category>
		<category><![CDATA[klient]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[semantyczność]]></category>
		<category><![CDATA[semantyczny]]></category>
		<category><![CDATA[standardy]]></category>
		<category><![CDATA[strony]]></category>
		<category><![CDATA[tabelki]]></category>
		<category><![CDATA[tworzenie]]></category>
		<category><![CDATA[validator]]></category>
		<category><![CDATA[w3c]]></category>
		<category><![CDATA[walidacja]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.kuczok.net/?p=84</guid>
		<description><![CDATA[Nie tylko ja się zajmuję tworzeniem stron internetowych, jak też całych portali &#8211; takich ludzi jest mnóstwo. Chcę tutaj napisać o jakości i pewnych wymaganiach, które klienci powinni przestrzegać. Więc jeżeli jesteś klientem, zamawiasz u kogokolwiek stronę internetową to poświęć chwilę, by przeczytać ten krótki artykulik. Oczywiście, jeżeli zamawiasz stronę niskobudżetową &#8211; nie spodziewaj się [...]]]></description>
			<content:encoded><![CDATA[<p>Nie tylko ja się zajmuję tworzeniem stron internetowych, jak też całych portali &#8211; takich ludzi jest mnóstwo. Chcę tutaj napisać o jakości i pewnych wymaganiach, które klienci powinni przestrzegać. Więc jeżeli jesteś klientem, zamawiasz u kogokolwiek stronę internetową to poświęć chwilę, by przeczytać ten krótki artykulik. Oczywiście, jeżeli zamawiasz stronę niskobudżetową &#8211; nie spodziewaj się by wszystkie warunki dobrej strony zostały spełnione. Zanim zamówisz stronę, upewnij się w jakich standardach będzie ona wykonana! Odpowiedni poziom kodu strony jest wymagany m.in. do jej dobrego wypozycjonowania!</p>
<p><strong>Standard xHTML</strong></p>
<p>Aktualnie w internecie obowiązuje standard xHTML. HTML to naprawdę już trochę przestarzały standard. Po czym rozpoznać, w jakim standardzie wykonana jest strona? Zerknij w kod strony, w pierwszej linijce powinna być deklaracja DOCTYPE, która określa w jakim standardzie strona została wykonana. Przykładowa deklaracja kodu xHTML:</p>
<blockquote><p>&lt;!DOCTYPE html PUBLIC &#8222;-//W3C//DTD XHTML 1.0 Transitional//EN&#8221; &#8222;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#8221;&gt;</p></blockquote>
<p>Można z niej wyczytać, iż strona kodowana jest w xHTML 1.0, w wersji przepisowej. Można też spotkać deklarację xHTML Strict &#8211; czyli restrykcyjną. Nie będę się tutaj rozwodził, która wersja jest lepsza, osobiście sam zawsze korzystam z transitional. Jeżeli spotkasz deklarację xHTML 1.1 &#8211; również jest dobrze. W treści tego artykułu pisząc o kodzie HTML mam na myśli oczywiście kod xHTML, jednak z przyzwyczajenia piszę bez początkowego &#8216;x&#8217; <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Jeżeli sprawdzając stronę nie odnajdziesz na początku jej kodu deklaracji to może naprawdę źle wróżyć&#8230;</p>
<p><strong>Divy, nie tabelki!</strong></p>
<p>Wiele dawnych webmasterów tworzyło strony, w których treść była w tabelkach, które określały wygląd strony. Dość często można było również spotkać dodatkowo ramki. Te czasy to już przeszłość, teraz nowoczesna strona internetowa opiera się o &#8216;divy&#8217;. Czym właściwie są te divy? Najprościej rzecz ujmując są to pola, które można dowolnie formatować i pozycjonować na stronie internetowej, przy użyciu CSS (o którym jest mowa w dalszej części tekstu). Jeżeli nie znasz się na kodzie HTML, może być Ci ciężko określić, czy strona oparta jest o tabelki, czy o divy &#8211; jednak spróbuj zajrzeć w kod, i sprawdź, czy przypadkiem na każdej podstronie nie przeważają tabelki (tabelka to tag &lt;table&gt;). Jeżeli na stronie nie będzie żadnych danych tabelarycznych, a zobaczysz w kodzie tabelki, możesz śmiało pytać o to swojego webmastera <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Poprawny kod xHTML</strong></p>
<p>To nie Ty masz znać kod HTML, a osoba która Ci wykonuje stronę, więc jak sprawdzić czy wszystko jest poprawnie? W3C (<a href="http://www.w3.org/">World Wide Web Consortium</a>) udostępnia bezpłatnie na swojej stronie internetowej walidator kodu pod adresem <a href="http://validator.w3.org/">http://validator.w3.org/</a>. Dowiesz się czy strona jest wykonana w pełni poprawnie, czy są na niej błędy. Śmiało, możesz do osoby wykonującej dla Ciebie stronę napisać, że strona nie parsuje się poprawnie w walidatorze kodu na w3c i oczekiwać na poprawę kodu. Jak chcesz, możesz również sprawdzić w nim każdą podstronę, nie tylko stronę główną &#8211; bo może zdarzyć się tak, że tylko strona główna będzie wykonana w pełni poprawnie, a na podstronach pojawią się już błędy.</p>
<p><strong>Kaskadowe arkusze stylów CSS</strong></p>
<p>Kiedyś strony byłe formatowane w jednym pliku, przez używanie tagu FONT i pokrewnych. Aktualnie nie korzysta się już z takiego rozwiązania, za wygląd strony odpowiada CSS.</p>
<p>Jak to działa?<br />
Strona HTML zawiera informacje n/t zawartości strony, oraz określa czym ma być który element strony. Natomiast CSS określa wygląd każdego z tych elementów. Edytując styl CSS w nowoczesnej stronie powinieneś być w stanie dowolnie zmieniać wygląd strony. Może trochę ciężko to brzmi, jednak jest to proste i sprowadza się do tego, że kod HTML powinien się ograniczać do treści strony, okraszonej prostymi tagami, typu h1, p, div, pomiędzy którymi zawiera się treść strony.</p>
<p>Dość często można spotkać kod CSS w statycznej stronie internetowej wpleciony w kod HTML, czyli tagi okraszone atrybutem style, w którym jest opisany wygląd danego elementu. To nie jest dobre rozwiązanie, to nie o to tu chodzi.</p>
<p>Jeżeli zobaczysz plik CSS oddzielony od kodu HTML, i tylko podpięty w nagłówku, możesz być zadowolony. Będziesz mógł dowolnie, z łatwością zmieniać wygląd strony. Zmieniając parametry wyglądu w jednym pliku CSS efekt od razu będzie widoczny na wszystkich podstronach serwisu. Prawda, że tak jest dużo łatwiej, niż modyfikować każdy plik HTML z osobna? <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Kod CSS też ma swoje zasady, i tak samo jak w przypadku kodu HTML można sprawdzić jego poprawność, dzięki W3C i darmowemu narzędziu, udostępnionemu na ich stronie &#8211; <a href="http://jigsaw.w3.org/css-validator/">http://jigsaw.w3.org/css-validator/</a>. Wpisujemy tam adres naszej strony, a walidator sam pobierze z niej kod CSS, i wyświetli nam informacje na temat jego poprawności.</p>
<p><strong>Różne przeglądarki internetowe</strong></p>
<p>Według danych zbieranych przez serwis <a href="http://ranking.pl">ranking.pl</a> około 40% polaków korzysta z przeglądarki Firefox, drugie tyle wykorzystuje przeglądarkę Internet Explorer. W pozostałych 20% mamy jeszcze użytkowników Opery, Chroma, Safari i innych przeglądarek. Można właściwie zapytać, co to ma do rzeczy? Ano ma &#8211; prawie każda przeglądarka, ma swój silnik, który analizuje nasz bezbłędny kod xHTML i CSS i wyświetla zgodnie ze swoim &#8216;widzimisie&#8217;. Strona zazwyczaj wygląda dobrze i tak samo pod przeglądarkami takimi jak Opera, Firefox, czy Chrome, jednak niestety możemy spotkać się z kompletnym rozwaleniem strony gdy otworzymy ją w przeglądarce Internet Explorer, która niestety narzuca sobie swoje standardy. Cóż &#8211; życie webmastera nie jest łatwe. Strona niedość że powinna być w pełni poprawnym kodem xHTML i CSS, to jeszcze musi się wyświetlać poprawnie w każdej przeglądarce internetowej. Warto ją sprawdzić przynajmniej w &#8216;podstawowej trójce&#8217;, czyli przeglądarkach Opera, Firefox i Internet Explorer.</p>
<p><strong>Podsumowanie&#8230;</strong></p>
<p>Tworzyć strony internetowe w dzisiejszych czasach może każdy. Istnieje wiele prostych w obsłudze programów do tego celu. Nawet popularne edytory tekstu oferują funkcję zapisu pliku jako stronę internetową. Jednak nie osiągniemy w ten sposób jakości kodu, jaka jest mile widziana w dzisiejszym internecie. Jeżeli masz więc swoją stronę internetową, sprawdź ją teraz pod kątem standardów opisanych w tym artykule <img src='http://blog.kuczok.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kuczok.net/standardy-stron-internetowych/feed/</wfw:commentRss>
		<slash:comments>0</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>

