Windows Server: skript pro automatickou zálohu MySQL databáze a obsahu adresářů na FTP
Ideální hosting pro větší projekty, které nepotřebují vlastní dedikovaný server, je dle mého VPS s Windows. Snadno se administruje, nabízí vysoký výkon (v případě cloudu téměř neomezený), a spustíte na něm vše - od IIS, přes Apache, MySQL po SQL Server 2014.
Za pomoci jen integrovaných Windows nástrojů (Command line a ftp.exe) a 7Zipu je na takovémto serveru snadné napsat zálohování na externí FTP.
Osobně používám skript, který v pravidelném intervalu (X hodin) udělá kompletní dump MySQL databáze, nahraje jej zašifrovaný na FTP server, a jak lokálně tak na FTP serveru smaže staré zálohy, aby tam bylo místo pro nové. Podobně pracuji s adresáři, zazipují se, zašifrují, a nahrají na FTP server, se smazáním těch nejstarších.
Slouží mi pro to pár jednoduchých BAT souborů. Zálohu MySQL jsem převzal a upravil z Redolive.com.
Budu rád, pokud tyto zálohovací skripty použijete, když mi dáte vědět.
Skripty počítají s formátem data "xx dd. mm. yyyy" (česká instalace Windows Server 2012 R2), pokud máte na serveru jinak nastavené národní prostředí, skripty pracující s datumem upravte. Samozřejmě je potřeba nastavit [hodnoty v hranatých závorkách]. Na FTP skript předpokládá existenci adresářů /db a /media.
[config.bat] Konfigurační soubor
@echo off SET FTPUSER=[ftp_uzivatel] SET FTPPASSWORD=[ftp_heslo] SET FTPPORT=[ip_adresa_a_port_ve_tvaru_10,0,0,1,5,25] SET FTPHOST=[ftp_host] IF %1 NEQ "" SET FTPDIR=%1 SET DaysToKeep=7 :: ------------------------------------ :: DATUM ocekavano jako "xx dd. mm. yyyy" :: ------------------------------------ set year=%DATE:~11,4% set day=%DATE:~3,2% set mnt=%DATE:~7,2% set hr=%TIME:~0,2% set min=%TIME:~3,2% IF %day% LSS 10 SET day=0%day:~1,1% IF %mnt% LSS 10 SET mnt=0%mnt:~1,1% IF %hr% LSS 10 SET hr=0%hr:~1,1% IF %min% LSS 10 SET min=0%min:~1,1%
Integrace UltraEdit / UEStudio a PHP manuálu
PHP manuál si můžete stáhnout v "enhanced" podobě včetně uživatelských komentářů a pohodlně si jej procházet off-line.
Pokud používáte UltraEdit či UEStudio (můj oblíbený editor a IDE), je možné si integrovat tuto nápovědu i do IDE. Funguje to tak, že si označíte dané slovo, stisknete horkou klávesu a zobrazí se vám PHP nápověda s vyhledanou označenou funkcí.
Stačí si pro to založit v "Tool Configuration" novou utilitu PHP manuál:

Základem je command line: HH php_enhanced_en.chm::/res/function.%sel%.html.
Plus je potřeba si vytvořit malinkatý skript, který v označeném textu převede znak "_" na "-", protože takto je PHP nápověda formátovaná (místo "array_push" se hledá "array-push"). Vytvořte si prázdný soubor třeba s názvem "c:\backup\help.txt" a poté javascriptový soubor phpmanual.js, kterému dejte tento obsah:
// Tool Configuration
// Name: PHP manual
// Command line: HH php_enhanced_en.chm::/res/function.%sel%.html
if (UltraEdit.activeDocument.isSel()){
var str = UltraEdit.activeDocument.selection;
var fname = "C:\\backup\\help.txt";
UltraEdit.open(fname);
str = str.replace(/_/g, '-');
UltraEdit.activeDocument.write(str);
UltraEdit.activeDocument.selectAll();
UltraEdit.runTool("PHP manual");
UltraEdit.closeFile(fname,2);
}
Následně stačí si phpmanual.js přidat jako skript a dát mu horkou klávesu. Není to úplně elegantní metoda, protože Tool Configuration nepracuje s (například) obsahem clipboardu, takže se nuceně založí nový dokument, v něm se přepíše a označí onen text, otevře se PHP nápověda, a pomocný dokument se zase zavře. Nicméně funguje to :)
SQL Server - zrušení replikace databáze
use master go exec sp_helpreplicationdb exec sp_removedbreplication 'databaze' ALTER DATABASE databaze SET SINGLE_USER WITH ROLLBACK IMMEDIATE ALTER DATABASE databaze SET MULTI_USER
Zde přihlašte do soutěže své Windows 8 aplikace
Před 14 dny byla na MyWindows.cz vyhlášena soutěž pro vývojáře Windows 8 aplikací.
Své aplikace můžete přihlásit do soutěže pomocí tohoto formuláře:
https://mywindows.cz/soutez.php
Uzávěrka prvního kola je 10.7. a druhého pak 28.8.
Jako vývojář dostanete bezplatně pozvánku do Windows Store (který zatím není otevřen pro vývojáře z ČR), propagaci a recenzi aplikace na MyWindows.cz, tiskovou zprávu pro další média, odkazy z dalších webů (včetně Twitter / Facebook s 10 000 followers), výherce pak XBox 360.
Související články:
- Vývojáři, předběhněte konkurenci! Soutěž o pozvánky do Windows Store pro Metro aplikace
- Začínáme s vývojem Metro aplikací
- Jak připravit aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScript – den 0
- Jak připravit aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScript – den 1
- Jak připravit aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScript – den 2
- Jak připravit aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScript – den 3
- Jak připravit aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScript – den 4
Programujeme aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScriptu
Cílem těchto pěti článků je poskytnout praktický recept, podle něhož lze zcela od začátku vytvořit aplikaci pro Windows 8.

Pro jednotlivé díly se podívejte na:
- Den 0 - vytvoření projektu, připojení k datům, příprava úvodní stránky, použití stylů ve stránce, vytvoření výchozí obrazovky
- Den 1 - obrazovka rozšíření, různé úrovně přiblížení, nastavení aplikace, režim off-line, filtry
- Den 2 - podpora mezinárodního prostředí, správa aktivace režimu offline, přidání ovládacího prvku flipView na stránky karet, podpora přichyceného zobrazení, podpora různých rozlišení, podpora různých velikostí karet
- Den 3 - kontrakt Hledání, kontrakt Sdílení, kontrakt Výběr souboru, živá dlaždice, sekundární dlaždice
- Den 4 - přidání souboru se stavem sbírky, připojení ke službě SkyDrive, aktualizace sbírky uživatele ve službě SkyDrive
Pro obecný úvod se vám bude hodit článek Začínáme s vývojem Metro aplikací a poté zde máme Soutěž o pozvánky do Windows Store pro Metro aplikace.
Automatické načtení sídla firmy a verifikace DIČ (VAT) pro celou EU
Minulý rok jsem publikoval krátký článek ohledně automatické načtení sídla české firmy a DIČ podle zadaného IČ z ARES XML pomocí PHP a jQuery. Uvedenou službu je možné snado rozšířit na celou EU pomocí webové služby dostupné na adrese ec.europa.eu. Tato službá má totiž veřejně dostupné WSDL a pomocí SOAP klienta ji snadno můžete dotazovat.
Zjednodušený kód produkující stejný výstup jako dříve odkazovaný skript pro ARES může vypadat takto - vstupem je dvouznakový kód země a IČ (přesněji DIČ bez počátečního kódu země, což v praxi bývá IČ):
<?php
header("Content-Type: application/json; charset=UTF-8");
$a = array();
try {
$ic = $_REQUEST['ic']; // IČ
$country = $_REQUEST['country']; // Country code
$soap = new SoapClient(
'http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl');
$params = array('countryCode' => $country, 'vatNumber' => $ic);
$result = $soap->checkVatApprox($params);
if (!$result->valid) {
$a['stav'] = 'DIČ '.$country.$ic.' nebylo nalezeno';
} else {
$a['ic'] = strval($result->vatNumber);
$a['dic'] = $country.$a['ic'];
$a['firma'] = strval($result->traderName);
if (!$result->traderCity && $result->traderAddress) {
$t = explode("\n",$result->traderAddress);
$result->traderStreet = $t[0];
$result->traderCity = $t[1];
$result->traderPostcode = $t[2];
}
$a['ulice'] = strval($result->traderStreet);
$a['mesto'] = strval($result->traderCity);
$a['psc'] = strval($result->traderPostcode);
$a['stav'] = 'ok';
}
} catch (Exception $e) {
$a['stav'] = 'EC služba právě není dostupná';
}
echo json_encode($a);
?>
A výstupem třeba pro Mladá fronta a.s. je takovýto JSON:
{
"ic":"49240315",
"dic":"CZ49240315",
"firma":"Mlad\u00e1 fronta a.s.",
"ulice":"Mezi Vodami 1952\/9",
"mesto":"PRAHA 12 - MOD\u0158ANY",
"psc":"143 00 PRAHA 412",
"stav":"ok"
}
(PHP) den nemá 86 400 sekund?
Víte kolik má den sekund? Občas jsem viděl v PHP toto počítat jako 24 (hodin) * 60 (minut) * 60 (sekund). Nefunguje to.
setlocale(LC_ALL, "czech");
date_default_timezone_set("Europe/Paris");
function p($t) {
$d = getdate( $t );
echo $d['mday'],' ';
}
$o = 24*60*60; // 86 400
$t = mktime(0,0,0,10,29,2011);
p($t);
for ($i = 1; $i<=4; $i++) {
$t += $o;
p($t);
}
Vypíše:
29 30 30 31 1
Automatické načtení sídla firmy a DIČ podle zadaného IČ (ARES XML) pomocí PHP a jQuery
V eshopu zaměřeném na firemní zákazníky můžete těmto usnadnit nákup a prvotní registraci tím, že podle zadaného IČ načtete kompletní informace o sídle a DIČ z databáze ARES. MFČR ji poskytuje jako webovou službu vracející přehledný XML feed.
Implementace s pomocí jQuery je velice jednoduchá, stačí si vytvořit JSON feed reagující na AJAXový požadavek pod názvem ares.php:
<?php
header("Content-Type: application/json; charset=UTF-8");
define('ARES','http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=');
$ico = intval($_REQUEST['ico']);
$file = @file_get_contents(ARES.$ico);
if ($file) $xml = @simplexml_load_string($file);
$a = array();
if ($xml) {
$ns = $xml->getDocNamespaces();
$data = $xml->children($ns['are']);
$el = $data->children($ns['D'])->VBAS;
if (strval($el->ICO) == $ico) {
$a['ico'] = strval($el->ICO);
$a['dic'] = strval($el->DIC);
$a['firma'] = strval($el->OF);
$a['ulice'] = strval($el->AA->NU).' '.strval($el->AA->CO);
$a['mesto'] = strval($el->AA->N);
$a['psc'] = strval($el->AA->PSC);
$a['stav'] = 'ok';
} else
$a['stav'] = 'IČ firmy nebylo nalezeno';
} else
$a['stav'] = 'Databáze ARES není dostupná';
echo json_encode($a);
?>
Rychlý export HTML stránky do PDF v PHP
Pokud potřebujete rychle vytvořit z HTML stránky PDF soubor a nabídnout jej ke stažení či poslat jej emailem v PHP, existuje na to výborná knihovna mPDF. Podporuje zpracování řady formátovacích prvků v CSS, nemusíte tedy HTML stránku či layout nijak speciálně upravovat.
Pokud máte třeba fakturu v eshopu připravenou jako HTML, je její převod do PDF otázkou pár řádků kódu:
require("mpdf/mpdf.php");
$mpdf = new mPDF('utf-8','A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
// CSS soubor
$stylesheet = file_get_contents('faktura.css');
// faktura v HTML (PHP, atd.)
$html = file_get_contents('faktura.html');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html,2);
$name = "danovy-doklad.pdf";
$mpdf->Output($name,"D"); // download
Rychlý export databázové tabulky do Excelu (2007/2010) v PHP
Pokud potřebujete rychle exportovat nějaká data - tabulku či VIEW - z MySQL databáze do Excelu, je to v PHP velice snadné díky PHPExcel knihovně na Codeplexu. Kromě moderního XLSX umí tato knihovna i XLS, PDF, CSV a další formáty.
Tento jednoduchý skript vezme VIEW v MySQL databázi (v tomto případě čtenost článků, které nějak souvisí s Microsoftem), vytvoří z nich Excelovský soubor, a nabídne jej ke stažení v Excel 2010 formátu.
class createXLSX {
var $xlsxrow = 1;
var $xlsxcolumn = 1;
var $maxcolumn = 0;
function getColumn($column) {
if ($this->maxcolumn < $column)
$this->maxcolumn = $column;
if ($column > 26)
return chr(ord('A') + floor(($column - 1)/26) - 1) . chr(ord('A') + ($column % 26) - 1);
else
return chr(ord('A') + $column - 1);
}
function writeRow($x, $data, $bold = false) {
$i = 0;
foreach ($data as $s) {
$c = $this->getColumn($this->xlsxcolumn + $i++).strval($this->xlsxrow);
$x->setActiveSheetIndex(0)->setCellValue($c,$s);
if ($bold)
$x->getActiveSheet()->getStyle($c)->getFont()->setBold(true);
}
$this->xlsxrow++;
}
}