Kategorie: Programování

PHP počet pracovních dní v měsíci, svátky, velikonoce

Prostřednictvím této nehezky designované funkce zjistíme počet pracovních dní v daném měsíci nebo počet pracovních dní zbývajících do konce měsíce 🙂
Zohledňujeme státní svátky, velikonoce i velký pátek…

<?php 
echo workingDaysInThisMonth ( strtotime ( '2017-12-01' ) ); 

function workingDaysInThisMonth ( $date = false ) 
{ 
  if ( !$date ) { 
    $date = time (); 
  } 
  $holidays = [ 
     1 => [1 ],
     5 => [1, 5 ],
     7 => [5, 6 ],
     9 => [28 ],
     10 => [28 ],
     11 => [17 ],
     12 => [24, 25, 26 ]
 ];

 $easter = date ( 'd.m.Y', strtotime ( date ( 'Y-m-d', easter_date ( date ( 'Y', $date ) ) ) . ' +1 days' ) );
 $bigFriday = date ( 'd.m.Y', strtotime ( date ( 'Y-m-d', easter_date ( date ( 'Y', $date ) ) ) . ' previous friday' ) );
 $holidays[ date ( 'n', strtotime ( $easter ) ) ][] = ( int ) date ( 'j', strtotime ( $easter ) );
 $holidays[ date ( 'n', strtotime ( $bigFriday ) ) ][] = ( int ) date ( 'j', strtotime ( $bigFriday ) );
 for ( $m = 1; $m <= 12; $m++ ) {
  for ( $d = 1; $d <= date ( 't', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-01' ) ); $d++ ) {
   if ( date ( 'w', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) == 0 ) {
    $holidays[ date ( 'n', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) ][] = ( int ) date ( 'j', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) );
   }
   if ( date ( 'w', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) == 6 ) {
    $holidays[ date ( 'n', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) ) ][] = ( int ) date ( 'j', strtotime ( date ( 'Y', $date ) . '-' . str_pad ( $m, 2, '0', STR_PAD_LEFT ) . '-' . str_pad ( $d, 2, '0', STR_PAD_LEFT ) ) );
   }
  }
 }

 $days = 0;
 $tomorrow = date ( 'Y-m-d', strtotime ( '+1 day', $date ) );
 $today = date ( 'Y-m-d', $date );
 if ( date ( 'n', strtotime ( $tomorrow ) ) != date ( 'n', strtotime ( $today ) ) ) {
  return $days;
 }

 for ( $d = date ( 'j', strtotime ( $tomorrow ) ); $d <= date ( 't', strtotime ( $tomorrow ) ); $d++ ) {
  if ( !in_array ( $d, $holidays[ date ( 'n', strtotime ( $tomorrow ) ) ] ) ) {
   $days++;
  }
 }
 return $days;
}

MySQL záloha ze vzdáleného serveru na lokální počítač automaticky

Počet spravovaných webů pomalu roste a pomalu není čas vše vkládat do referencí, měl bych doplnit alespoň instalované e-shopy (ano, stále v Zencart, Magento je složitý na low cost řešení). A protože v podstatě všechny weby, které jsem vyrobil používají MySQL databázi a různí útočníci z Brazílie nebo Číny se snaží weby nabourat, vyvstala otázka efektivního automatického zálohování databází. (Pokračování textu…)

WordPress – šablony kategorií s pluginem Idealien Category Enhancements

Na většině webů, které jsem postavil na WordPress jsem použil plugin Idealien Category Enhancements. Tento plugin umí nastavit jednu šablonu pro celou Rubriku i podrubriky, šablona se tedy dědí. Navíc je také možné nastavit některé podrubrice jinou šablonu, než má nadřazená rubrika. Uvedený plugin je potřebný při tvorbě webu, který má více sekcí s odlišným obsahem sidebarů. (Pokračování textu…)

Internetový obchod Magento – řešení problémů při instalaci

Protože se objevily v krátkém sledu poptávky na realizaci internetových obchodů, přistoupil jsem ve volných chvílích k testovací instalaci e-shopu Magento. Test probíhal na počítači s OS Windows a instalovaným Apache, PHP a MySQL. Stažený zip soubor jsem rozbalil do adresáře htdocs webového serveru Apache, adresář po rozbalení zabírá na disku přibližně 57 MB prostoru. Po otevření stránky http://localhost/magento v prohlížeči internetu je vidět instalační průvodce.

(Pokračování textu…)

E-shop Zencart rozesílá spamy – řešení, výběr open-source náhrady

Jeden z hostingů, kde jsem uvedl do provozu Zencart mi zaslal informaci, že z dané domény jsou rozesílány spamy. Určení, který skript spamy rozesílá bylo zjednodušeno tím, že hosting poslal konkrétní název PHP souboru. Uvedený soubor se nacházel v adresáři images a spolu s ním řada dalších. Doposud mi není znám způsob, jak se do adresáře images soubory dostaly. Nepoužívám Total Commander, odkud některé viry vykrádají hesla, navíc hesla jsou složité na určení pomocí brute-force.
(Pokračování textu…)

Memtest USB instalace – Rescue CD

Potřeboval jsem spustit memtest na serveru bez cd-rom mechaniky. Můj oblíbený systém Rescue CD obsahuje Memtest, prošel jsem tedy postup instalace na USB disk, jevil se mi však složitý a postup, který jsem vyzkoušel byl nefunkční. Ještě další pátrání, došel jsem i na jeden web, který nabízel postup pro vytvoření bootovacího USB tímto způsobem s využitím FreeDOS, což jsem měl původně v úmyslu. A nějaké další neurčité postupy, není čas ale zkoušet všechno.

Nic se mi nelíbilo, takže u mně funkční postup je:

– stáhnout program UNetbootin
– pomocí tohoto programu uložit na USB flash disk ISO obraz RescueCD

a hotovo, funguje to. Pokud potom chceme takto vytvořený bootovací disk použít na daném počítači, nejprve je zapojíme do nějakého USB portu, potom teprve v BIOSu nastavíme pořadí bootovacích zařízení, kde dáme na první místo náš USB disk.

Zencart – změna sazby daně se zachováním cen produktů

V roce 2010 dochází ke změně sazby daně z přidané hodnoty z 19% na 20%. V případě, že zákazníkům chceme v internetovém obchodě postaveném na Zencartu zachovat ceny i v dalším roce na stejné výši, použijeme tento SQL dotaz:

UPDATE
products t1, tax_rates t2
SET
t1.products_price=(products_price*1.19)/1.2
WHERE
t1.products_tax_class_id=t2.tax_class_id
AND
t2.tax_rate=19

Potom upravíme výši daňové sazby a popisy daně následujícím SQL dotazem:

UPDATE
tax_class t1, tax_rates t2
SET
t1.tax_class_title='DPH 20%',
t1.tax_class_description='Daň z přidané hodnoty 20%',
t2.tax_rate='20',
t2.tax_description='DPH 20%'
WHERE
t1.tax_class_id=t2.tax_class_id
AND
t2.tax_rate=19

SQL dotazy spustíme v administraci – Nástroje – Instalace SQL patchů. Uvedený postup je bez záruky, pokud se tento postup rozhodnete použít, nezapomeňtě před změnou stáhnout zálohu databáze!

Ubuntu 8 – překódování mp3 audio pomocí ffmpeg

Na streamovacím serveru, který vysílá datový proud ve formátu WMV prostřednictvím softwaru Videolan VLC, se projevil problém se scházející zvukovou stopou ve formátu MP3 u streamovaného videa. Bylo použito řešení ze stránky Encoding mp3 audio with ffmpeg on Ubuntu Hardy. Převzato z uvedené stránky:

Podpora MP3 není zahrnuta ve ffmpeg v základním repositáři Ubuntu, je však možné použít repositáře Medibuntu. Jestliže je ffmpeg již máte instalovaný, odeberte jej. Doplňte do zdrojů softwaru repozitář Medibuntu a ověřovací klíč podle tohoto postupu:

sudo wget http://www.medibuntu.org/sources.list.d/hardy.list -O /etc/apt/sources.list.d/medibuntu.list
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O - | sudo apt-key add - && sudo apt-get update

Potom instalujeme ffmpeg a libmp3lame codec (součást libavcodec balíčku):

sudo apt-get install ffmpeg
sudo apt-get install libavcodec1d

Ubuntu 10

sudo wget http://www.medibuntu.org/sources.list.d/`lsb_release -cs`.list --output-document=/etc/apt/sources.list.d/medibuntu.list && sudo apt-get -q update && sudo apt-get --yes -q --allow-unauthenticated install medibuntu-keyring && sudo apt-get -q update
sudo apt-get install ffmpeg libavcodec-extra-52

Debian Squeeze

keyring: http://debian-multimedia.org/pool/main/d/debian-multimedia-keyring/debian-multimedia-keyring_2010.12.26_all.deb
aptitude install gstreamer0.10-fluendo-mp3 ffmpeg sox twolame vorbis-tools lame faad

Ubuntu Nvidia – klonování výstupu na televizor – TwinView Clone TV out

Před časem jsem sestavil malý server s TV výstupem. Ubuntu 8, grafika nvidia 7800, po zapnutí byla na TV výstupu černobílá kopie obrazu na monitoru. Stačilo zapnout příslušný ovladač hardwaru a obraz byl barevný, postup pro instalaci ovladačů nvidia je zde. Při stavbě další podobné sestavy, tentokrát s grafikou nvidia 8400 se objevil problém v tom, že svideo výstup grafiky měl obnovovací frekvenci 60 Hz. V konfiguračním souboru xorg.conf bylo nutné nastavit parametr TVStandard v sekci Screen.

Zde je konkrétní funkční konfigurace xorg:

Section "Monitor"
 Identifier     "Monitor0"
 VendorName     "Unknown"
 ModelName      "CRT-1"
 HorizSync       30.0 - 61.0
 VertRefresh     56.0 - 75.0
 Option         "DPMS"
EndSection

Section "Device"
 Identifier     "Videocard0"
 Driver         "nvidia"
 VendorName     "NVIDIA Corporation"
 BoardName      "GeForce 8400 GS"
EndSection

Section "Screen"
 Identifier     "Screen0"
 Device         "Videocard0"
 Monitor        "Monitor0"
 DefaultDepth    24
 Option         "TwinView" "1"
 Option         "TVStandard" "PAL-G"
 Option         "metamodes" "CRT: 800x600_56 +0+0, TV: 800x600 +0+0"
 SubSection     "Display"
 Depth       24
 EndSubSection
EndSection

Ubuntu – Připojení sdíleného disku bez hesla

Pro připojení sdíleného disku bez hesla použijeme příkaz:

sudo mount.cifs //192.168.1.115/zalohy /home/nas -o guest