PHP » MyEgo.cz - Radek Hulán webzine

MyEgo.cz

home foto blogy mywindows.cz kontakt

Windows Server: skript pro automatickou zálohu MySQL databáze a obsahu adresářů na FTP

PHP 28.10.2014

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 03.11.2013

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

PHP 31.05.2013
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

PHP 03.07.2012

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:

Programujeme aplikaci pro Windows 8 pomocí HTML5, CSS3 a JavaScriptu

PHP 25.06.2012

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

PHP 13.02.2012

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?

PHP 24.10.2011

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

PHP 18.04.2011

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

PHP 13.12.2010

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

PHP 13.12.2010

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++;
 }
}