<?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>nufue's &#187; PHP</title>
	<atom:link href="http://hrazdil.info/blog/category/programovani/php/feed" rel="self" type="application/rss+xml" />
	<link>http://hrazdil.info/blog</link>
	<description>blog o IT, programování, výletování, nakupování</description>
	<lastBuildDate>Fri, 04 May 2012 05:39:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>PHP dbase extension for PHP 5.4.1 (Windows, TS, VC9)</title>
		<link>http://hrazdil.info/blog/414-php-dbase-extension-for-php-5-4-1-windows-ts-vc9</link>
		<comments>http://hrazdil.info/blog/414-php-dbase-extension-for-php-5-4-1-windows-ts-vc9#comments</comments>
		<pubDate>Sun, 29 Apr 2012 09:30:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=414</guid>
		<description><![CDATA[After few hours spent setting up a devel environment for compilation of PHP extensions on Windows, I finally came up with working dBase extension (php_dbase.dll), suited for PHP 5.4.1 (VC9 x86 Thread Safe) version available from http://windows.php.net/download/ As far as &#8230; <a href="http://hrazdil.info/blog/414-php-dbase-extension-for-php-5-4-1-windows-ts-vc9">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After few hours spent setting up a devel environment for compilation of PHP extensions on Windows, I finally came up with working dBase extension (php_dbase.dll), suited for PHP 5.4.1 (VC9 x86 Thread Safe) version available from http://windows.php.net/download/</p>
<p>As far as I know there exists no working precompiled version of php_dbase.dll, that works with PHP 5.4, so I offer the file for download.</p>
<p><a href="http://hrazdil.info/files/php_dbase.dll" title="php_dbase.dll">php_dbase.php</a> (PHP 5.4.1 VC9 x86 TS Windows)</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/414-php-dbase-extension-for-php-5-4-1-windows-ts-vc9/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPmailer &#8211; problém s memory limitem</title>
		<link>http://hrazdil.info/blog/306-phpmailer-problem-s-memory-limitem</link>
		<comments>http://hrazdil.info/blog/306-phpmailer-problem-s-memory-limitem#comments</comments>
		<pubDate>Tue, 09 Mar 2010 11:20:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpmailer]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=306</guid>
		<description><![CDATA[Při odesílání e-mailu s větší přílohou pomocí phpmaileru můžete narazit na situaci, kdy vám PHP ohlásí překročení povoleného množství paměti a skript se ukončí. Chybová hláška pak vypadá následovně: Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to &#8230; <a href="http://hrazdil.info/blog/306-phpmailer-problem-s-memory-limitem">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Při odesílání e-mailu s větší přílohou pomocí phpmaileru můžete narazit na situaci, kdy vám PHP ohlásí překročení povoleného množství paměti a skript se ukončí. Chybová hláška pak vypadá následovně:</p>
<pre>Fatal error: Allowed memory size of 16777216 bytes exhausted
(tried to allocate 6123456 bytes)
in {........}/class.phpmailer.php on line 1262
</pre>
<p>Paměťový limit je 16 MB, skript jej celý vyčerpá.</p>
<p>Zjevným řešením by bylo navýšit paměťový limit v PHP. Ne vždy je tu ta možnost. Proto přichází na řadu řešení spočívající v úpravě zdrojového kódu phpmaileru.</p>
<p>Když se podíváte na řádek, označený v předchozí chybové hlášce, uvidíte tam něco takového:</p>
<p><code>$encoded = chunk_split(base64_encode($str), 76, $this-&gt;LE);</code></p>
<p>Tento kód vezme data z proměnné $str (4 MB), provede base64_encode, která data nafoukne na 5.3 MB, a takto upravená data předá funkci chunk_split, která udělá další kopii, přičemž za každý 76. bajt vloží ukončení řádku. Proměnná $encoded tak bude obsahovat něco kolem 5.9 MB dat. Když to všechno spočítáme, dostaneme se na 15.2 MB, což je 16 MB hranici nebezpečně blízko.</p>
<p>Přitom by stačilo využít toho, že není třeba uschovávat původní data. Předmětný řádek by se dal přepsat na:</p>
<pre>$b64 = base64_encode($str);
unset($str);
$encoded = chunk_split($b64, 76, $this-&gt;LE);
unset($b64);
</pre>
<p>Pomocí <code>unset()</code>ů na druhém a čtvrtém řádku uvolníme proměnné, které již nepotřebujeme. Po prvním řádku zabereme 4 MB + 5,3 MB paměti. Po druhém řádku už jenom 5,3 MB (4 MB část smažeme). Po třetím řádku pak máme 5,3 MB + 5,9 MB s tím, že na čtvrtém řádku 5,3 MB opět uvolníme.</p>
<p>Nevýhodou zmíněného postupu je fakt, že si smažeme obsah proměnných <code>$str</code> a <code>$b64</code>. Pokud s těmito proměnnými chceme později pracovat, máme smůlu.</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/306-phpmailer-problem-s-memory-limitem/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Čeština v předmětu e-mailu (PHP)</title>
		<link>http://hrazdil.info/blog/262-cestina-v-predmetu-e-mailu-php</link>
		<comments>http://hrazdil.info/blog/262-cestina-v-predmetu-e-mailu-php#comments</comments>
		<pubDate>Tue, 10 Nov 2009 13:56:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[čeština]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=262</guid>
		<description><![CDATA[Programátoři, kteří nevyužívají osvědčená řešení k posílání e-mailů (třeba phpmailer), občas narazí na problém s diakritikou (háčky, čárky) v předmětu e-mailu. Mají za to, že nastavení kódování v SMTP hlavičkách dostačuje. Předmět e-mailové zprávy se přenáší hlavičkami, jejichž kódování je &#8230; <a href="http://hrazdil.info/blog/262-cestina-v-predmetu-e-mailu-php">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Programátoři, kteří nevyužívají osvědčená řešení k posílání e-mailů (třeba <a href="http://hrazdil.info/blog/15-posilani-mailu-v-php-pomoci-phpmaileru">phpmailer</a>), občas narazí na problém s diakritikou (háčky, čárky) v předmětu e-mailu. Mají za to, že nastavení kódování v SMTP hlavičkách dostačuje. Předmět e-mailové zprávy se přenáší hlavičkami, jejichž kódování je omezeno na US-ASCII (tedy sedmibitové kódování, které neobsahuje žádné znaky s diakritikou). Pokud chceme v předmětu přenést diakritiku, využijeme rozšíření MIME, které definuje, jakým způsobem je možno v hlavičkách používat obsáhlejší znakové sady.</p>
<p>MIME určuje dva možné způsoby zápisu diakritiky do hlaviček. První je takzvaný &#8222;quoted-printable&#8220;, druhým pak &#8222;base64&#8243;. Obecný formát pro zápis je:</p>
<p><code>=?znaková sada?X?kódovaný text?=</code></p>
<p>kde &#8222;znaková sada&#8220; určuje znakovou sadu původního textu (utf-8, windows-1250 atd.), X označuje, která ze dvou uvedených metod kódování byla použita (Q = quoted-printable, B = base64), a poslední částí je samotný text, zakódovaný uvedenou metodou.</p>
<h3>Quoted-printable</h3>
<p>Toto kódování přiřazuje každému bajtu vstupního textu tři bajty výstupu. Prvním znakem je rovnítko (=), následuje hexadecimální reprezentace ASCII kódu ukládaného znaku. Písmeno A se tedy zakóduje jako =41, písmeno Z jako =5A, písmeno á jako =E1. Aby nebyl kódovaný text zbytečně nafouknutý, stačí takto kódovat pouze znaky mimo rozsah tisknutelných znaků US-ASCII (tedy znaky s ordinálními hodnotami od 33 do 126), pochopitelně s výjimkou rovnítka, které se kódovat musí.</p>
<p>Vícebajtové znaky vícebajtových kódování (např. UTF-8) se zapisují po jednotlivých bajtech &#8211; český znak s diakritikou v UTF-8 tedy vyprodukuje =XY=XZ (tedy 6 znaků).</p>
<p>V PHP se dá quoted-printable vyrobit pomocí funkce <code><a href="http://php.net/manual/en/function.imap-8bit.php">imap_8bit</a>()</code>, celý předmět pak například pomocí<br />
<code>$predmet = "=?utf-8?Q?".imap_8bit($predmet)."?=";</code></p>
<p>kde <code>$predmet</code> je řetězec v UTF-8.</p>
<p><span> </span></p>
<h3>Base64</h3>
<p>Toto kódování převádí posloupnost tří osmibitových znaků na čtyři znaky s šestibitovým kódováním. Výsledný text tedy není jednoduše čitelný (na rozdíl od quoted-printable, které se většinou dá dekódovat pouhým pohledem). V PHP nám k tomuto účelu poslouží funkce <code><a href="http://php.net/base64_encode">base64_encode</a>()</code>. Celý kód pro řetězec v UTF-8:</p>
<p><code>$predmet = "=?utf-8?B?".base64_encode($predmet)."?=";</code></p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/262-cestina-v-predmetu-e-mailu-php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nefunguje PHP skript spuštěný přes příkazový řádek</title>
		<link>http://hrazdil.info/blog/257-nefunguje-php-skript-spusteny-pres-prikazovy-radek</link>
		<comments>http://hrazdil.info/blog/257-nefunguje-php-skript-spusteny-pres-prikazovy-radek#comments</comments>
		<pubDate>Tue, 10 Nov 2009 07:51:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=257</guid>
		<description><![CDATA[Máte skript, který běžně spouštíte přes prohlížeč a vše nádherně funguje. Jednoho dne si třeba řeknete, že by bylo pěkné spouštět tenhle skript automaticky třeba pomocí CRONu. Cron nastavíte, skript se spustí, ale nefunguje (například se nepřipojí k databázi). Čím &#8230; <a href="http://hrazdil.info/blog/257-nefunguje-php-skript-spusteny-pres-prikazovy-radek">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Máte skript, který běžně spouštíte přes prohlížeč a vše nádherně funguje. Jednoho dne si třeba řeknete, že by bylo pěkné spouštět tenhle skript automaticky třeba pomocí CRONu. Cron nastavíte, skript se spustí, ale nefunguje (například se nepřipojí k databázi). Čím to je?</p>
<p>Za prvé &#8211; musíte includovat nějaký soubor (v našem příkladu třeba s nastavením přihlašovacích údajů k databázi).</p>
<p>Za druhé &#8211; musíte tento soubor includovat pomocí relativní cesty (tzn. např. <code>include './nastaveni.php';</code>).</p>
<p>V čem tedy vězí problém? Skript spouštěný přes konzoli (přes CLI verzi PHP) nevezme jako aktuální adresář ten, ve kterém je umístěn skript, nýbrž ten, který mu předá shell. PHP tedy nemůže najít includovaný soubor (protože se dívá do špatného adresáře) a include selže.</p>
<p>Jak z toho ven? Je to jednoduché. Používejte absolutní adresování, nejlépe založené na skutečném umístění souboru. Konkrétně tedy například</p>
<p><code>include './nastaveni.php';</code></p>
<p>nahraďte za</p>
<p><code>include dirname(__FILE__).'/nastaveni.php';</code></p>
<p>A vše poběží tak, jak má.</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/257-nefunguje-php-skript-spusteny-pres-prikazovy-radek/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>E-maily s přílohou v PHP &#8211; PHPmailer</title>
		<link>http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php</link>
		<comments>http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php#comments</comments>
		<pubDate>Thu, 12 Feb 2009 13:01:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[phpmailer]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=202</guid>
		<description><![CDATA[Po delší době se vracím k problematice posílání e-mailů v PHP. Tentokráte se budu zabývat posíláním e-mailů s přílohami. Instalace Postup instalace PHPmaileru je popsán ve starším článku, nebudu jej zde tedy opakovat. Tři typy příloh PHPmailer umožňuje k e-mailové &#8230; <a href="http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Po delší době se vracím k problematice posílání e-mailů v PHP. Tentokráte se budu zabývat posíláním e-mailů s přílohami.</p>
<h2>Instalace</h2>
<p>Postup instalace PHPmaileru je popsán ve <a href="http://hrazdil.info/blog/15-posilani-mailu-v-php-pomoci-phpmaileru">starším článku</a>, nebudu jej zde tedy opakovat.</p>
<h2>Tři typy příloh</h2>
<p>PHPmailer umožňuje k e-mailové zprávě připojit tři typy příloh &#8211; souborové, řetězcové a vložené. Souborové přílohy se vytvářejí ze souboru, ke kterému má skript přístup &#8211; obvykle se bude jednat třeba o PDF soubor s objednávkou, fotku apod. Řetězcová příloha spočívá v přiložení řetězce k e-mailu, přičemž tento řetězec se příjemci bude jevit jako soubor. Posledním typem jsou vložené přílohy, které se používají k přikládání obrázků, které se zobrazí v těle HTML e-mailu.</p>
<h2>Souborové přílohy</h2>
<p>Prvním typem přílohy je samotný soubor. K e-mailu jej připojíme pomocí konstrukce:</p>
<pre><code>$mail-&gt;AddAttachment($soubor, $jmeno, $kodovani, $mimeTyp);</code></pre>
<p>kde <code>$soubor</code> určuje název souboru, který se k e-mailu přikládá (včetně absolutní nebo relativní cesty). Název souboru je jediným povinným parametrem. Druhý parametr <code>$jmeno</code> obsahuje název souboru, který se zobrazí příjemci. To je užitečné v situacích, kdy potřebujeme přiložit soubor pod jiným jménem, než pod kterým je uložen v systému souboru. Třetí parametr, <code>$kodovani</code>, určuje způsob, jakým se obsah souboru zakóduje v těle e-mailu &#8211; možnosti jsou <code>"base64"</code>, <code>"quoted-printable"</code>, <code>"8bit"</code>, <code>"7bit"</code>, <code>"binary"</code> &#8211; doporučuji ponechat <code>"base64"</code>, což je také výchozí hodnota. Poslední parametr určuje MIME typ &#8211; buď uveďte vlastní, nebo ponechte výchozí hodnotu <code>"application/octet-stream"</code>.</p>
<p>Tímto způsobem můžete vložit i více souborů.</p>
<p>Příklad použití může vypadat například takto:</p>
<pre><code>$mail-&gt;AddAttachment("./nabidky/nabidka-cez.pdf", "nabidka.pdf");
$mail-&gt;AddAttachment("./vop/vop.doc", "obchodni-podminky.doc");</code></pre>
<h2>Řetězcové přílohy</h2>
<p>Tento typ příloh využijete v případě, že nemáte obsah přílohy uložen v souboru, nýbrž v proměnné. Syntaxe je velmi podobná, jako při vkládání souborů:</p>
<pre><code>$mail->AddStringAttachment($retezec, $jmeno, $kodovani, $mimeTyp);</code></pre>
<p>Oproti vkládání souborů jsou zde dva rozdíly &#8211; první parametr určuje proměnnou, v níž jsou uložena data, a druhý parametr, tentokráte povinný, označuje jméno souboru, pod kterým se řetězec do e-mailu uloží. Význam a výchozí hodnoty ostatních parametrů jsou shodné.</p>
<p>Příklad použití může vypadat například takto:</p>
<pre><code>// do proměnné $objednavka vložíme potvrzení objednávky ve formátu HTML
$mail-&gt;AddStringAttachment($objednavka, "objednavka.html");
// $mail-&gt;Body = "V přiloženém souboru objednavka.html naleznete
rekapitulaci vaší objednávky.";</code></pre>
<h2>Vložené přílohy</h2>
<p>Tento typ příloh slouží například k vkládání obrázků, ale i zvuků nebo videí, na které se lze odkazovat z těla HTML e-mailu. Syntaxe pro přidání vložené přílohy je následující:</p>
<pre><code>$mail-&gt;AddEmbeddedImage($soubor, $cid, $jmeno, $kodovani, $mimeTyp);</code></pre>
<p>Vidíme, že oproti výše uvedeným metodám přibyl jeden parametr. Prvním parametrem je jméno obrázku (včetně absolutní nebo relativní cesty), druhým je tzv. CID, jméno, pod kterým bude obrázek dostupný v HTML těle e-mailu. Další parametry mají stejný význam, jako u obou předcházejících metod. Hodnotu posledního parametru, <code>$mimeTyp</code>, je vhodné nastavit tak, aby reflektovala typ vloženého souboru (pro JPG obrázek nastavit <code>"image/jpeg"</code>, pro PNG nastavit <code>"image/png"</code> atd.). Na obrázek, vložený tímto způsobem, se v HTML kódu e-mailu odkazuje pomocí <code>&lt;img src='cid:cid-jmeno' alt='popisek obrazku'&gt;</code>.</p>
<p>Například na obrázek přiložený pomocí </p>
<pre><code>$mail-&gt;AddEmbeddedImage("./images/logo-cez.png", "cez", "logo.png", "base64", "image/png");</code></pre>
<p>se v těle HTML e-mailu odkážu pomocí <code>&lt;img src='cid:cez' alt='logo ČEZu'&gt;</code>.</p>
<h2>Konkrétní ukázka na závěr</h2>
<p>Na závěr uvedu kompletní kód, který přes SMTP server odešle e-mail, který bude obsahovat přiložený soubor.</p>
<pre><code>&lt;?php
  require "class.phpmailer.php";
  $mail = new PHPMailer();
  $mail-&gt;IsSMTP();  // k odeslání e-mailu použijeme SMTP server
  $mail-&gt;Host = "adresa.smtp.serveru";  // zadáme adresu SMTP serveru
  $mail-&gt;SMTPAuth = true;               // nastavíme true v případě, že server vyžaduje SMTP autentizaci
  $mail-&gt;Username = "jmenouzivatele";   // uživatelské jméno pro SMTP autentizaci
  $mail-&gt;Password = "heslo";            // heslo pro SMTP autentizaci
  $mail-&gt;From = "skript@example.com";   // adresa odesílatele skriptu
  $mail-&gt;FromName = "Testovací skript"; // jméno odesílatele skriptu (zobrazí se vedle adresy odesílatele)

  $mail-&gt;AddAddress("prvni.prijemce@example.com");  // přidáme příjemce
  $mail-&gt;AddAddress("druhy.prijemce@example.net", "Jméno druhého příjemce");  // a klidně i druhého, včetně jména

  $mail-&gt;IsHTML(true);  // bude to HTML e-mail
  $mail-&gt;Subject = "První mail poslaný pomocí PHPMaileru";    // nastavíme předmět e-mailu

  // nastavíme HTML tělo e-mailu
  $mail-&gt;Body = "Ahoj ahoj!

&lt;img src='cid:cez' alt='logo ČEZU'&gt;V přílohách ti posílám dva soubory - první je nabídka pro ČEZ, druhým jsou všeobecné obchodní podmínky.";
  // nastavíme textové tělo e-mailu
  $mail-&gt;AltBody = "Ahoj ahoj!\n\nV přílohách ti posílám dva soubory - první je nabídka pro ČEZ, druhým jsou všeobecné obchodní podmínky.";
  $mail-&gt;WordWrap = 50;   // je vhodné taky nastavit zalomení (po 50 znacích)
  $mail-&gt;CharSet = "utf-8";   // nastavíme kódování, ve kterém odesíláme e-mail

  // vložíme první soubor
  $mail-&gt;AddAttachment("./nabidky/nabidka-cez.pdf", "nabidka.pdf");
  // vložíme druhý soubor
  $mail-&gt;AddAttachment("./vop/vop.doc", "obchodni-podminky.doc");
  // vložíme obrázek, na který jsme se odkázali výše
  $mail-&gt;AddEmbeddedImage("./images/logo-cez.png", "cez", "logo.png", "base64", "image-png");

  if(!$mail-&gt;Send()) {  // odešleme e-mail
     echo 'Došlo k chybě při odeslání e-mailu.';
     echo 'Chybová hláška: ' . $mail-&gt;ErrorInfo;
  }
  else
  {
     echo 'E-mail byl v pořádku odeslán.';
  }
?&gt;</code></pre>
<p>To je pro dnešek vše &#8211; pokud máte dotazy nebo vám něco nefunguje, pište do komentářů.</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/202-e-maily-s-prilohou-v-php/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Radosti s nastavením PHP</title>
		<link>http://hrazdil.info/blog/152-radosti-s-nastavenim-php</link>
		<comments>http://hrazdil.info/blog/152-radosti-s-nastavenim-php#comments</comments>
		<pubDate>Sat, 04 Oct 2008 14:39:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=152</guid>
		<description><![CDATA[Po několika letech jsem se rozhodl jeden firemní server přemigrovat na nový stroj. Všechno šlo celkem v pohodě, až na to, že mi PHP nechtělo includovat z include_path. Chvíli jsem dumal, přesouval soubory, kontroloval oprávnění a pořád nic. Chybová hláška &#8230; <a href="http://hrazdil.info/blog/152-radosti-s-nastavenim-php">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Po několika letech jsem se rozhodl jeden firemní server přemigrovat na nový stroj. Všechno šlo celkem v pohodě, až na to, že mi PHP nechtělo includovat z <code>include_path</code>. Chvíli jsem dumal, přesouval soubory, kontroloval oprávnění a pořád nic. Chybová hláška o tom, že není adresář neexistuje.</p>
<p>Nakonec mě napadlo prozkoumat nastavení direktivy <code>open_basedir</code>. Bylo to ono, stačilo doplnit adresář s includem a vše se najednou rozběhlo. Jen by mě zajímalo, proč se v tomto případě nevypíše hláška typu &#8222;open_basedir restriction in effect&#8230;&#8220; &#8211; ale asi by to tak bylo příliš jednoduché.</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/152-radosti-s-nastavenim-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zjišťování výdělků na Backlinks v PHP</title>
		<link>http://hrazdil.info/blog/125-zjistovani-vydelku-na-backlinks-v-php</link>
		<comments>http://hrazdil.info/blog/125-zjistovani-vydelku-na-backlinks-v-php#comments</comments>
		<pubDate>Tue, 16 Sep 2008 10:36:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=125</guid>
		<description><![CDATA[Protože sem tam prodám nějaký ten odkaz přes Backlinks, udělal jsem si jednoduchý skript, který se přihlásí na účet u Backlinks a zjistí, kolik je prodaných odkazů a kolik který měsíc vydělám. Skript je velmi jednoduchý &#8211; použitím cURL se &#8230; <a href="http://hrazdil.info/blog/125-zjistovani-vydelku-na-backlinks-v-php">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Protože sem tam prodám nějaký ten odkaz přes <a href="http://whylink.com/?aff=25931">Backlinks</a>, udělal jsem si jednoduchý skript, který se přihlásí na účet u Backlinks a zjistí, kolik je prodaných odkazů a kolik který měsíc vydělám.</p>
<p>Skript je velmi jednoduchý &#8211; použitím cURL se přihlásí do <a href="http://whylink.com/?aff=25931">Backlinks</a> a pak pomocí regulárních výrazů zjistí počty odkazů a zůstatek a tyto hodnoty vypíše na obrazovku.</p>
<p>V komentářích uvítám připomínky a doplnění.</p>
<p>Aktuální verzi skriptu si můžete <a href="./download/backlinks.phps">stáhnout</a>.<br />
Poslední aktualizace: 2008-09-16</p>
<h2>Historie aktualizací</h2>
<p><strong>2008-09-16</strong><br />
- první veřejná verze</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/125-zjistovani-vydelku-na-backlinks-v-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak v PHP skriptu zjistit adresu stránky?</title>
		<link>http://hrazdil.info/blog/122-jak-v-php-skriptu-zjistit-adresu-stranky</link>
		<comments>http://hrazdil.info/blog/122-jak-v-php-skriptu-zjistit-adresu-stranky#comments</comments>
		<pubDate>Thu, 11 Sep 2008 10:04:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=122</guid>
		<description><![CDATA[Sem tam narazíme na potřebu v PHP pracovat s adresou aktuální stránky tak, jak nám ji vrátí třeba javascriptové location.href. Jak takovouto adresu získat v PHP? $adresa = "http"; if (isset($_SERVER['HTTPS']) &#38;&#38; !empty($_SERVER['HTTPS']) &#38;&#38; $_SERVER['HTTPS'] != "off") $adresa .= "s"; &#8230; <a href="http://hrazdil.info/blog/122-jak-v-php-skriptu-zjistit-adresu-stranky">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sem tam narazíme na potřebu v PHP pracovat s adresou aktuální stránky tak, jak nám ji vrátí třeba javascriptové <code>location.href</code>. Jak takovouto adresu získat v PHP?</p>
<pre><code>$adresa = "http";
if (isset($_SERVER['HTTPS']) &amp;&amp; !empty($_SERVER['HTTPS']) &amp;&amp; $_SERVER['HTTPS'] != "off") $adresa .= "s";
$adresa .= "://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];</code></pre>
<p>(pozor, pokud máte v adrese i částečný identifikátor &#8211; část od prvního výskytu znaku # dál &#8211; není možno v PHP hodnotu tohoto identifikátoru výše uvedeným způsobem zjistit)</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/122-jak-v-php-skriptu-zjistit-adresu-stranky/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zjišťování zůstatku na Paypalu v PHP</title>
		<link>http://hrazdil.info/blog/119-zjistovani-zustatku-na-paypalu</link>
		<comments>http://hrazdil.info/blog/119-zjistovani-zustatku-na-paypalu#comments</comments>
		<pubDate>Wed, 10 Sep 2008 09:06:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=119</guid>
		<description><![CDATA[Nedávno jsem si řekl, že by bylo pěkné mít možnost automaticky zjišťovat zůstatek na Paypalu (mám tam nějaké prostředky v USD, takže se mi celkové množství prostředků na účtu mění podle kurzu CZK/USD). Doufal jsem, že bude existovat nějaká jednoduchá &#8230; <a href="http://hrazdil.info/blog/119-zjistovani-zustatku-na-paypalu">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nedávno jsem si řekl, že by bylo pěkné mít možnost automaticky zjišťovat zůstatek na Paypalu (mám tam nějaké prostředky v USD, takže se mi celkové množství prostředků na účtu mění podle kurzu CZK/USD). Doufal jsem, že bude existovat nějaká jednoduchá možnost přes <a href="https://www.paypal.com/IntegrationCenter/ic_api-reference.html">paypalí api</a>, ale tam se mi nic nalézt nepodařilo.</p>
<p>Musela nastoupit hrubá síla a použití cURL s parsováním HTML. Oproti použití stabilního API je tu samozřejmě problém, že mé řešení přestane fungovat se změnou formátu stránky, nicméně pořád je to lepší než drátem do oka.</p>
<p>Jak to celé funguje? Paypal používá protokol HTTPS, cookies a zasílání přihlašovacích údajů metodou POST. Nic, co by cURL nezvládlo. Jak tedy postupovat?</p>
<p>Nejdříve si vytvoříme cURL element a nastavíme mu příslušné parametry.</p>
<pre><code>  $ch = curl_init("https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-submit&amp;dispatch=5885d80a13c0db1f38432c9462fe731381a7a80e09148cd4c582693e11bdcccd");
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($ch, CURLOPT_COOKIEFILE, "cookies.txt");
  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookies.txt");
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, "login_email=vas@email.cz&amp;login_password=heslo");</code></pre>
<p>Důležitý je hlavně poslední řádek, kde je potřeba správně nastavit váš přihlašovací e-mail a heslo na paypal. Jakmile máme vše nastaveno, můžeme provést požadavek. Ten zašle paypalu vaše přihlašovací údaje a zpět vrátí stránku, která zobrazuje &#8222;průběh přihlašování&#8220;.</p>
<pre><code>$data = curl_exec($ch);</code></pre>
<p>V proměnné $data tak máme obsah této stránky. Z té vykousneme adresu úvodní stránky, na kterou nás tato stránka přesměruje. Použijeme k tomu regulární výraz (potřebujeme získat obsah proměnné <code>login_access</code>).</p>
<pre><code>if (preg_match("/login_access=(\d+)\"/", $data, $regs)) {</code></pre>
<p>Jakmile tuto hodnotu získáme, vypneme zasílání POST dat, změníme URL na novou hodnotu a provedeme další cURL požadavek. Ten nám již vrátí úvodní stránku se zůstatky účtu.</p>
<pre><code>    $url = "https://www.paypal.com/cz/cgi-bin/webscr?cmd=_login-done&amp;login_access=".$regs[1];
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
</code></pre>
<p>Ze získané stránky pomocí regulárních výrazů vykousneme zůstatek v korunách, dolarech a celkový zůstatek převedený na koruny. (V případě, že máte zůstatky v jiných měnách, je potřeba regulární výrazy upravit.</p>
<pre><code>    if (preg_match("/
(\d+\.\d+) CZK&lt;\/td&gt;/", $data, $regs)) $czk = $regs[1];
    if (preg_match("/
\$(\d+\.\d+) USD&lt;\/td&gt;/", $data, $regs)) $usd = $regs[1];
    if (preg_match("/
(\d+\.\d+) CZK&lt;\/td&gt;/", $data, $regs)) $total = $regs[1];
</code></pre>
<p>V proměnných <code>$czk</code>, <code>$usd</code> a <code>$total</code> pak máme uloženo množství prostředků v jednotlivých měnách a můžeme si je uložit např. do databáze.</p>
<p>V komentářích uvítám připomínky a doplnění.</p>
<p>Aktuální verzi skriptu si můžete <a href="./download/paypal.phps">stáhnout</a>.<br />
Poslední aktualizace: 2008-09-10</p>
<h3>Historie aktualizací</h3>
<h4>2008-09-10</h4>
<p>- první veřejná verze</p>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/119-zjistovani-zustatku-na-paypalu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Posílání mailů v PHP přes SMTP server smtp.gmail.com pomocí Swift Maileru</title>
		<link>http://hrazdil.info/blog/23-posilani-mailu-v-php-pres-smtp-server-smtpgmailcom-pomoci-swift-maileru</link>
		<comments>http://hrazdil.info/blog/23-posilani-mailu-v-php-pres-smtp-server-smtpgmailcom-pomoci-swift-maileru#comments</comments>
		<pubDate>Sat, 14 Jun 2008 11:28:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://hrazdil.info/blog/?p=23</guid>
		<description><![CDATA[V tomto článku se budeme zabývat využitím třídy Swift Mailer k posílání mailů pomocí programovacího jazyka PHP přes SMTP server gmailu (smtp.gmail.com). V tomto případě nelze použít vestavěnou funkci mail(), neboť gmail požaduje jak SMTP autentizaci, tak šifrovaný přenos (pomocí &#8230; <a href="http://hrazdil.info/blog/23-posilani-mailu-v-php-pres-smtp-server-smtpgmailcom-pomoci-swift-maileru">Pokračovat ve čtení <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>V tomto článku se budeme zabývat využitím třídy Swift Mailer k posílání mailů pomocí programovacího jazyka PHP přes SMTP server gmailu (smtp.gmail.com). V tomto případě nelze použít vestavěnou funkci mail(), neboť gmail požaduje jak SMTP autentizaci, tak šifrovaný přenos (pomocí TLS).<span id="more-23"></span></p>
<h2>Co budeme potřebovat?</h2>
<ul>
<li>PHP 5 s povoleným rozšířením php_openssl.dll</li>
<li>Swift Mailer (instalace popsána dále)</li>
<li>účet na gmailu</li>
</ul>
<h2>Instalace Swift Maileru</h2>
<p>Z <a href="http://www.swiftmailer.org/">webové stránky</a> Swift Maileru si <a href="http://www.swiftmailer.org/download/">stáhneme aktuální verzi</a> &#8211; v době psaní článku je to 3.3.3 z března 2008. Stáhneme verzi pro PHP 5. K dispozici jsou dva balíčky &#8211; jeden zabalený zipem, druhý gzipem. Oba balíčky jsou funkčně rovnocenné, vyberte si podle vlastní chuti (většinou zip pro Windows, gzip pro Unixové systémy). Po rozbalení uvidíme několik souborů a adresářů. Pro zprovoznění nám stačí zkopírovat adresář <code>lib</code> buď do do <code>include_path</code> (do adresáře, který najdeme v souboru php.ini) nebo přímo do adresáře naší aplikace. První způsob nám umožní vkládat Swift Mailer do našich aplikací pomocí <code>require_once "lib/Swift.php";</code>, u druhé metody budeme muset pro každou aplikaci zkopírovat soubor do adresáře aplikace a potom vkládat pomocí <code>require_once "./lib/Swift.php";</code>.</p>
<p>Zbývá jen podotknout, že u většiny hostingů zřejmě nebude možné zkopírovat soubory do include_path, na druhou stranu by měl být webhoster schopen na požádání Swift Mailer nainstalovat.</p>
<h2>Jak odeslat e-mail přes gmailí SMTP?</h2>
<p>V této části si ukážeme jednoduchý kód pro poslání e-mailu a tento si okomentujeme.</p>
<div class="hl-main">
<pre><span class="hl-inlinetags">&lt;?php</span><span class="hl-code">
  </span><span class="hl-reserved">require_once</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">lib/Swift.php</span><span class="hl-quotes">&quot;</span><span class="hl-code">;   </span><span class="hl-comment">//</span><span class="hl-comment"> require potøebných souborù</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-reserved">require_once</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">lib/Swift/Connection/SMTP.php</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
  </span><span class="hl-var">$smtp</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Swift_Connection_SMTP</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">smtp.gmail.com</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-comment">//</span><span class="hl-comment"> pøipoj se přes smtp.gmail.com</span><span class="hl-comment"></span><span class="hl-code">
    </span><span class="hl-identifier">Swift_Connection_SMTP</span><span class="hl-code">::</span><span class="hl-identifier">PORT_SECURE</span><span class="hl-code">,   </span><span class="hl-comment">//</span><span class="hl-comment"> zabezpečené spojení</span><span class="hl-comment"></span><span class="hl-code">
    </span><span class="hl-identifier">Swift_Connection_SMTP</span><span class="hl-code">::</span><span class="hl-identifier">ENC_TLS</span><span class="hl-brackets">)</span><span class="hl-code">;      </span><span class="hl-comment">//</span><span class="hl-comment"> pomocí TLS</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-var">$smtp</span><span class="hl-code">-&gt;</span><span class="hl-identifier">setUsername</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">example@gmail.com</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;  </span><span class="hl-comment">//</span><span class="hl-comment"> uživatelské jméno (pro SMTP autorizaci)</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-var">$smtp</span><span class="hl-code">-&gt;</span><span class="hl-identifier">setPassword</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">password</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;           </span><span class="hl-comment">//</span><span class="hl-comment"> heslo</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-var">$swift</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Swift</span><span class="hl-brackets">(</span><span class="hl-var">$smtp</span><span class="hl-brackets">)</span><span class="hl-code">;              </span><span class="hl-comment">//</span><span class="hl-comment"> vytvoøíme objekt Swift Maileru</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-var">$msg</span><span class="hl-code"> = </span><span class="hl-reserved">new</span><span class="hl-code"> </span><span class="hl-identifier">Swift_Message</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">Pøedmìt e-mailu</span><span class="hl-quotes">&quot;</span><span class="hl-code">,  </span><span class="hl-comment">//</span><span class="hl-comment"> vytvoøíme novou zprávu</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-quotes">&quot;</span><span class="hl-string">Zdar, toto je testovací e-mail pøes Swiftmailer a gmail SMTP server</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;
  </span><span class="hl-var">$msg</span><span class="hl-code">-&gt;</span><span class="hl-identifier">setCharset</span><span class="hl-brackets">(</span><span class="hl-quotes">&quot;</span><span class="hl-string">utf-8</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-code">;           </span><span class="hl-comment">//</span><span class="hl-comment"> nastavíme kódování</span><span class="hl-comment"></span><span class="hl-code">

  </span><span class="hl-comment">//</span><span class="hl-comment"> zkusíme odeslat</span><span class="hl-comment"></span><span class="hl-code">
  </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-var">$swift</span><span class="hl-code">-&gt;</span><span class="hl-identifier">send</span><span class="hl-brackets">(</span><span class="hl-var">$msg</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">e-mail@prijemce.cz</span><span class="hl-quotes">&quot;</span><span class="hl-code">, </span><span class="hl-quotes">&quot;</span><span class="hl-string">e-mail@odesilatele.cz</span><span class="hl-quotes">&quot;</span><span class="hl-brackets">)</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">echo</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">sent</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
  </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-reserved">echo</span><span class="hl-code"> </span><span class="hl-quotes">&quot;</span><span class="hl-string">error</span><span class="hl-quotes">&quot;</span><span class="hl-code">;
</span><span class="hl-inlinetags">?&gt;</span></pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://hrazdil.info/blog/23-posilani-mailu-v-php-pres-smtp-server-smtpgmailcom-pomoci-swift-maileru/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

