Přihlášení

registrace ~ obnova hesla

MyEgo.cz › „Radek Hulán - nejčtenější a nejoblíbenější publicista v ČR“ .

PHP skript pro posílání SMS z sms.sluzba.cz

09.03.2010 - PHP - autor: Radek Hulán

Téměř identická služba ke KlikniaVolej.cz je i sms.sluzba.cz. Posílání SMS (na základě dokumentace z tohoto PDF) přes tuto bránu můžete v PHP zajistit třeba následovně:

$action = 'send';
$body = 'Text SMS zpravy';
$vars = array(
'msg' => $body,
'msisdn' => $telefon,
'act' => $action,
'login' => $username,
'auth' => md5(md5($passwd).$username.$action.substr($body,0,31))
);
$data = http_build_query($vars);

$url = 'https://smsgateapi.sluzba.cz/apipost10/sms';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_VERBOSE , false);
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
$response = curl_exec($ch);
curl_close($ch);

PHP skript pro posílání SMS z KlikniaVolej.cz

09.03.2010 - PHP - autor: Radek Hulán

KlikniaVolej.cz je služba pod hlavičkou MAFRA a.s. (iDNES), která umožňuje posílat SMS přes jejich webovou bránu s tím, že dostupné je i API pro aplikační napojení. API je opravdu triviální, popsané je v tomto PDF, jedná se o prostý POST na dané URL s několika položkami.

Máte následující proměnné obsahující vaše údaje k přihášení:

$username = přihlašovací jméno
$passwd = přihlašovací heslo
$sender = vaše jméno
$telefon = číslo, na které chcete poslat SMS

Poté odešlete SMS pomocí CURL následovně:

srand((double)microtime()*1000000); 
$id = strval(time()).rand(0, 999); // jedinečné ID
$vars = array(
'user' => $username,
'number' => $telefon,
'sender' => $sender,
'text' => "Text SMS zpravy",
'encoding' => 'ascii',
'test' => '0',
'id' => $id,
'hash' => sha1( $username . ':' . $id . ':' . sha1($passwd) ),
'flash' => '0'
);
$data = http_build_query($vars);

$url = 'http://kavremote.mobil.cz:80/smsgateway.pl';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 180);
curl_setopt($ch, CURLOPT_HEADER , false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER , true);
curl_setopt($ch, CURLOPT_VERBOSE , false);
curl_setopt($ch, CURLOPT_POST , true);
curl_setopt($ch, CURLOPT_POSTFIELDS , $data);
$response = curl_exec($ch);
curl_close($ch);

Hostujeme PHP aplikace na Windows (namísto Linuxu)

05.12.2009 - PHP - autor: Radek Hulán

Naprostá většina webových programátorů v PHP / MySQL hostuje své aplikace na Linuxu, využívajíce LAMP platformu, nicméně vytvářejí je většinou na Windows. Řada z nich si nedokáže představit jiný postup. Tento článek by měl popsat výhody a nevýhody Windows hostingu pro PHP aplikace a zkušenosti s migrací aplikací mezi Apache -> IIS a MySQL -> SQL Server 2008.

Windows hosting versus Linux hosting (pro PHP)

Přestože osobně také preferuji na desktopu Windows (a aplikace pro ně), pro hostování PHP / MySQL aplikací jsem řadu let používal jen a pouze Linuxové webhostingy. Od spousty lidí nakonec stále není problém slyšet "axiom" na server patří Linux (aniž ovšem dodávají proč), a o Windows webhostingu vůbec neuvažují.

Výhody Windows 2008 Server hostingu

K přechodu na Windows hosting vás může přimět:

  • potřeba využívat i jiné databáze než MySQL, například Microsoft SQL Server 2008, které mají lepší možnosti programování,
  • potřeba provozovat současně PHP i ASP.NET aplikace na jednom serveru,
  • pokud chcete hostovat větší množství domén, a vyplatí se vám tedy fyzický či virtualizovaný vlastní server, ale je pro vás (jako pro většinu lidí programujících na Windows) snazší administrovat si Windows 2008 Server než třeba Gentoo Linux,
  • výrazná nespokojenost (podpořená zkušeností) s low-cost LAMP hostingy s "neomezeným" počtem domén, které se sice tváří jako ve všem nelimitované, ale v důsledku vás stojí spoustu nervů a zbytečného úsilí,
  • potřeba ovlivnit nastavení serveru, které sdílená LAMP platforma nenabídne,
  • snadná správa serveru i aplikací z Windows desktopu i mobilního telefonu,
  • používání aplikací, které znáte z desktopu (správce souborů, editor, atd.), i pro práci na serveru,
  • stabilní systém a "nezbořené" MySQL tabulky, jak je známe snad ze všech sdílených LAMP webhostingů.

SQL Server 2008 - dotaz pro vypsání parametrů tabulky

27.11.2009 - PHP - autor: Radek Hulán

Jedna ze základních funkcí každého redakčního systému je editor číselníků. V každé aplikaci jich existuje spousta, a mají mezi sebou různé relace. Máme jej napsaný pro různé databáze, od MySQL, přes Oracle po SQL Server 2008.

V praxi to funguje tak, že se skript napojí na INFORMATION_SCHEME, načte si automaticky strukturu tabulky, datové typy, délky polí, autoincrementy, komentář k polím, přidá k tomu případné odkazy na jiné číselníky (třeba tabulka měst se odkazuje na tabulku krajů), a tyto umožní pohodlně editovat. Textová pole jsou samozřejmě zpracovávána WYSIWYG editorem. Je to prostě komfortní možnost jak rychle upravit parametry aplikace pro běžné uživatele.

V případě MySQL existuje INFORMATION_SCHEME.COLUMNS tabulka, v níž je vše potřebné. Na SQL Server 2008 musíte použít poněkud složitější dotaz, a to třeba takovýto:

CREATE VIEW [dbo].[dbscheme] AS
SELECT t.name AS TabulkaNazev, c.colid AS SloupecPozice, c.name AS SloupecNazev, ISNULL(i.CHARACTER_MAXIMUM_LENGTH, i.NUMERIC_PRECISION) AS SloupecDelka, i.DATA_TYPE AS SloupecTyp, i.COLUMN_DEFAULT AS SloupecDefault, CAST(cd.value AS varchar(255)) AS SloupecPopis
FROM sys.sysobjects AS t JOIN sys.syscolumns AS c ON c.id = t.id JOIN INFORMATION_SCHEMA.COLUMNS AS i ON i.TABLE_CATALOG = 'databáze' AND i.TABLE_SCHEMA = 'dbo' AND i.TABLE_NAME = t.name AND i.COLUMN_NAME = c.name LEFT JOIN sys.extended_properties AS cd ON cd.major_id = c.id AND cd.minor_id = c.colid AND cd.name = 'MS_Description'
WHERE t.type = 'u'

Výsledkem bude pohled, který vám nabídne název tabulky, jméno a datový typ sloupce, jeho defaultní hodnotu, velikost datového pole a description ke sloupci (SloupecPopis), který následně můžete zobrazit uživateli jako textový popis (takže namísto technického itemid aplikace vypisuje automaticky sloupec jako Číslo článku).

WinCache - výborný PHP akcelerátor od Microsoftu

22.11.2009 - PHP - autor: Radek Hulán

Microsoft vydal finální verzi WinCache rozšíření pro PHP, což je akcelerátor podobné funkčnosti jako eAccelerator, XCache, Zend Optimizer+ či APC, jen dokonale optimalizovaný pro Windows, IIS7.x a PHP 5.2/5.3 provozované jako FastCGI modul.

Podle prvních reakcí na fóru to vypadá, že se WinCache rychlostně dostal před konkurenci, a kombinace PHP + IIS + WinCache by tak mohla být top platforma i pro hostování open-source PHP aplikací, nejen pro .NET. Dokumentace k WinCache je dostupná přímo na PHP.net.

Osobně vyzkouším nasadit WinCache na MyEgo.cz a dalších webech, a udělat srovnání na Zend Server CE.

Související: Hostujeme PHP aplikace na Windows (namísto Linuxu)

Zend Server (PHP) na Windows s SQL Server 1.1 driverem, kompilovaný pomocí VC8 (Visual Studio 2005)

17.09.2009 - PHP - autor: Radek Hulán

Před nedávnem vydané PHP 5.3 je díky spolupráci Microsoftu a Zendu výrazně lépe optimalizované pro Windows než předchozí verze, a netýká se to jen nativní podpory pro kompilaci ve Visual Studiu 2008 či 2005 oproti stařičkému Visual Studiu 6.0 z roku 1998, v němž jako jediném dosud šla oficiálně zkompilovat verze PHP 5.2 a starší.

PHP je na Windows s IIS 7.5 provozováno zásadně jako FastCGI proces, a to nejlépe v kombinaci s nějakým kompilátorem do bytecode a optimalizátorem jako je Zend Optimizer+.  Zend Optimizer+ je součástí speciální distribuce PHP od Zendu, která je zdarma dostupná pod názvem Zend Server CE. Na Windows rozhodně nepoužívejte běžné binárky z PHP.net.

Provozovat PHP na Windows většinou také znamená, že potřebujete nativně a co nejrychleji propojit PHP s SQL Server 2008 databázi. Microsoft nabízí na Codeplexu SQL Server Driver for PHP, což je rozšížení pro PHP, které je v současné verzi 1.1 tím nejlepším (z pohledu funkčnosti i rychlosti), jak propojit PHP s SQL Server 2005 / 2008 databázovým serverem.

Problém je pouze v tom, že zatímco Zend Server CE je kompilován ve Visual Studiu 2005 (VC8), tak SQL Server Driver for PHP se v binární podobě dodává jen jako VC6 anebo VC9. Naštěstí celý projekt na Codeplexu je dostupný včetně zdrojových kódů a není tedy problém si VC8 verzi zkompilovat.

Co budete potřebovat pro kompilaci?

Jak migrovat z MySQL na Oracle 10g databázi + PHP

05.05.2009 - PHP - autor: Radek Hulán

Před pár měsíci jsem zde popisoval 10 bodů jak migrovat z MySQL na SQL Server 2008 + IIS7 + PHP. SQL Server 2008 považuji za současnou nejlepší databázi. Pro jeden projekt si klient přál použít Oracle 10g (má v ní obrovské skladiště jiných dat), takže bylo nutné pracovat s etalonem a matkou všech databází, a to na úrovni poměrně starého OCI8 rozhraní v PHP verze 5.1.6.

Náš redační systém tak už běží na MySQL 4.x (mysql), MySQL 5.x (mysqli), SQLite 2.0, SQLite 3.0 (přes PDO), SQL Server 2008 databázi (přes sqlsrv) a nově i na Oracle 10g (přes oci8).

Práce s Oraclem je v PHP poměrně dobře zaběhnutá a stabilní, přesto se hodí sumarizace hlavních rozdílů, pokud předěláváte redakční systém (kromě doplnění databázového layeru) z MySQL na Oracle.

1. Neexistuje LIMIT start, offset

Podobně jako SQL Server, tak ani Oracle nemá pohodlné stránkování v SQL přes LIMIT start, offset příkaz, jako umí (jinak velice primitivní) MySQL. Obejít se to dá ale snadno za použití sub-selectu a magické funkce ROWNUM, tedy obdoby ROW_NUMBER() z SQL Serveru:

SELECT * FROM (
	SELECT ROWNUM as CisloSloupce, fieldsX ORDER BY fieldsY ) 
	WHERE CisloSloupce BETWEEN ($offset+1)  AND ($offset+$limit)
	

Dobré je upravit si vaši metodu pro SQL příkaz v databázovém layeru, která SQL dotaz s LIMIT klauzulí automaticky modifikuje na vnořený SELECT, takže se nemusí nic dalšího přepisovat v CMS.

Programujete v PHP? Zajděte si na školení Nette!

23.03.2009 - PHP - autor: Radek Hulán
Nette

Pokud programujete v PHP, asi znáte slovo Nette. Je to poměrně nedávno veřejně uvedený framework pro PHP, který má dost odlišný přístup od frameworků konkurenčních.

Autorem frameworku je Nette Foundation, což je vznešený název pro Davida Grudla :-) David se nesnaží stavět mraky nesmírně složitých knihoven pro různá obskurní použití, ale relativně málo dobře promyšlených tříd (zhruba desítku hlavních), které významně vylepšují jazyk samotný a práci s ním.

Na Nette je sympatické, že je můžete ale nemusíte používat celé (kompletní komprimovaný framework má mimochodem příjemných 240KB). Pokud chcete používat jen věci pro rozšíření možností jazyka a ladění aplikací (typicky Object, Debug a další), snadno je pár řádky kódu integrujete i do vašeho stávajícího frameworku či CMS.

Postupem času ale asi začnete využívat i výhod Routeru či výborných formulářů, no a od toho je už pouze krůček k MVC třídám.

Obecně - pokud jste programátor v PHP, a přestože máte framework vlastní, zajděte si na školení Nette. Školení je na profesionální úrovni a velice dobře připravené. David má navíc spoustu dobrých nápadů i jejich realizací, a jeho školení Nette a koukání se do kódu je opravdu skvělou inspirací.

A doporučil bych rovnou školení spíše dvoudenní. Osobně jsem absolvoval jednodenní, a pro řadu věcí nebyla (z nedostatku času) možnost jít plně do hloubky, přestože se začínalo v 9:00 a končilo v 19:00.

10 bodů jak migrovat z MySQL na SQL Server 2008 + IIS7 + PHP

22.01.2009 - PHP - autor: Radek Hulán

Pro několik nových velkých portálových projektů (desítky tisíc registrovaných členů, milióny komentářů pod desítkami tisíc článků, milióny příspěvků v diskusním chatu) budeme používat namísto kombinace Linux + PHP + MySQL + Apache nově tři čtvrtiny Microsoftích technologií, tedy Windows 2008 Server, IIS7, SQL Server 2008 Web/Standard Edition a z open-source tak zůstane jen PHP.

Základem je samozřejmě SQL Server 2008 databáze, která výborně škáluje, je stabilní a je možné ji programovat podstatně lépe než zaostalou MySQL. Výborné jsou i standardně dodávané nástroje pro ladění výkonu - SQL Server Profiler a Database Engine Tuning Advisor.

S prvotními testy s reálnými daty na nové platformě jsem osobně velice spokojen, po optimalizaci SQL dotazů, přepsání části kódu z PHP do T-SQL (na triggery a uložené procedury) je výkon ohromující.

Tam, kde MySQL + Apache zabral podobný (byť relativně neoptimalizovaný) soubor dotazů nad menším datovým objemem cca 0.5 sekundy pro vytvoření jedné stránky, tam kombinace IIS7 + SQL Server 2008 potřebuje jen desítky milisekund (30-50ms) dle stránky. Toto je skutečné živé generování stránky, která se dále ukládá jako statická a server je tedy ještě rychlejší.

Pro připojení PHP na SQL Server používáme SQL Server Driver for PHP 1.0. Ukázal se jako nejstabilnější a nejrychlejší, ve srovnání na občas padající MSSQL či PDO_MSSQL.

Uvedený vývoj a přesun z MySQL na SQL Server není samozřejmě bez problémů, zde je tedy pár poznatků, které se vám budou při migraci aplikace a dat hodit.

Použijte DB konečně naplno - zapomeňte na DB layer

07.01.2009 - PHP - autor: Radek Hulán

U spousty PHP projektů se člověk setká s databázovým layerem. Na tom není v zásadě nic špatného, objektový layer nad sadou funkcí je nutná věc. Špatné je, že většina těchto layerů "podporuje" více různých DB (ano, to je špatné), a to pochopitelně na úrovni nejnižšího společného jmenovatele. Takže se přes layer umíte připojit k DB, provést SELECT či INSERT, získat další záznam, případně chybové hlášení, a ... to je vlastně všechno.

Neuvěřitelná primitivnost. Jenže dnešní databáze toho umí mnohem více.

Problém je, že pokud se dostanete za hranice primitivního ANSI-92 SQL, 16 let stará věc, tak podobnost databází končí. Pokud definujete uloženou proceduru či funkci v T-SQL, nebude fungovat na Oracle s PL-SQL a už vůbec ne v primitivním MySQL.

Dokonce i trivialita jako je vynucení použití určitých indexů, nebo i návrh VIEW nebude všude fungovat stejně. Definice pro cizí klíče je odlišná. Ani datové typy nejsou stejné. LIMIT x není stejný. Nad Oraclem namísto IDENTITY či AUTOINCREMENT polí budete muset dělat sekvence a triggery pro BEFORE INSERT na daných tabulkách.

Databázové layery, které pracují s více typy databází, mají smysl pro některé open-source projekty. Tam je rychlost nadřazena nad výkon a spolehlivost. Jejich programátoři se poté omezují na nejprimitivnější SQL, "aby to fungovalo všude". Osobně ovšem ze všech projektů, kde jde o výkon, databázový layer pro model více databází odstraňuji (pokud tam je), ponechávám jen DB jedinou a optimalizované objekty pro ni, a snažím se vyždímat z této konkrétní použité databáze maximum.

Pro jeden velký portálový projekt (stovky tisíc pageviews denně) používám SQL Server 2008 a IIS7 právě proto, že T-SQL je mocný nástroj, a to i při propojení na PHP jako back-end. Na výkonu "skriptovaného" PHP zde tak v podstatě nezáleží, použije se jen pro prezentační část, a na to je PHP velice dobré.

Databázový layer pro více DB není znakem pokroku, u projektů postavených pro jeden konkrétní systém je často naopak znakem toho, že daný vývojář zná jen základy SQL a nic víc. Vše ostatní "prasí" na aplikační úrovni, přestože zpracování na serveru bývá rychlejší a výhodnější.

Asi založím "Ligu proti databázovým layerům" s podtitulem "Použijte vaši DB konečně naplno a nativně (a nejenom na primitivní SELECT a INSERT)" :-)

Dnešní rychlokvašná "MySQL generace" totiž vůbec neví, že databáze jsou určené k tomu, aby se v nich programovalo.

Starší články

Stránka: 1/7

1 2 3 4 5 6 7

ACTIVE 24 - virtuální dedikovaný server s 38% slevou, jen za 499 Kč

Vyvíjíte webové stránky a aplikace? ACTIVE 24 vám dá virtuální dedikovaný server s 38% slevou, jen za 499 Kč měsíčně. A teď navíc soutěž o tablet Wacom Bamboo Pen & Touch!

ACTIVE 24 - virtuální dedikovaný server s 38% slevou, jen za 499 Kč