PHP (Hypertextový Preprocesor, původně Personal Home Page) je multiplatformní skriptovací programovací jazyk, určený především pro programování dynamických internetových stránek (aplikací).
LAMP je často používaná zkratka pro kombinaci operačního systému GNU/Linux, webového serveru Apache, databázového systému MySQL (případně PostgreSQL) a PHP.
Příklad PHP skriptu, který zobrazí slovo Ahoj:
<?php echo "Ahoj"; ?>
Další informace viz manuálové stránky PHP.
Nabízejí PHP dokumentaci, šablony a zejména usnadňují psaní skriptů (třídy, funkce, procedury).
Funkce print stejně tak konstruktor echo slouží pro vypsání obsahu na obrazovku.
Print je o něco málo pomalejší než echo, ale zato vrací hodnotu True nebo False. Způsob použití se dále liší při výpisu proměnné.
<?php
$text = print "Jak se mate?"; // s echo toto neni mozne
if($text) {
echo “Výpis úspěšný:)“;
}
?>
Funkce print_r umožňuje navíc i vypsat obsah pole:
<?php
$pole = array ('a' => 'délka', 'b' => 'šířka', 'c' => array ('x', 'y', 'z'));
print_r ($pole);
?>
Zobrazení poslední aktualizace souboru číselně:
<?
/* aktualni soubor */
$file = $_SERVER['SCRIPT_FILENAME'];
/* cas zmeny souboru */
$update = filemtime($file);
/* aktualizace ciselne */
echo "<p>Poslední aktualizace: " .date('d. n. Y – H:i\'s"', $update). "</p>";
?>
Zobrazení poslední aktualizace souboru slovně (české slovní zobrazení měsíce a dne v týdnu):
<?php
/* aktualni cas */
echo "<p>Nyní je " .date('l d. m. Y H:i\'s"'). ".</p>";
/* aktualni soubor */
$file = $_SERVER['SCRIPT_FILENAME'];
/* cas zmeny souboru */
$update = filemtime($file);
/* aktualizace ciselne */
echo "<p>Poslední aktualizace: " .date('d. n. Y – H:i\'s"', $update). "<br />";
/* aktualizace slovne */
$months = array('leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');
$days = array('pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota', 'neděle');
echo "Poslední aktualizace: " .$days[date('w', $update) - 1] ." ". date('j', $update). ". " .$months[date('n', $update) - 1] . date(' Y – H:i\'s"', $update). "</p>";
?>
Český formát datumu:
<?php
// Czech date
$en = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$cz = array("ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince");
$date = str_replace($en, $cz, date("j. F Y"));
$datePlusOneDay = str_replace($en, $cz, date("j. F Y", strtotime('+1 day')));
$dateMo = str_replace($en, $cz, date("j. F Y", strtotime('monday this week')));
$dateTu = str_replace($en, $cz, date("j. F Y", strtotime('tuesday this week')));
$dateWe = str_replace($en, $cz, date("j. F Y", strtotime('wednesday this week')));
$dateMoNext = str_replace($en, $cz, date("j. F Y", strtotime('monday next week')));
?>Zobrazení intervalu mezi datumy ve dnech:
<?php
$dateA = date_create('2014-11-12');
$dateB = date_create('2014-10-13');
$interval = date_diff($dateA, $dateB);
echo $interval->format('%R%a days');
?> rand – generuje náhodná celá čísla v rozsahu 0-32767 (Windows):
<?php echo rand() . "\n"; echo rand(3, 12); // cela cisla v rozsahu 3 az 12 ?>
mt_rand – generuje náhodná celá čísla přibližně 4x rychleji než funkce rand
<?php echo mt_rand() . "\n"; echo mt_rand(3, 12); // cela cisla v rozsahu 3 az 12 ?>
Při zjišťování délky řetězce pozor na diakritiku např.:
print strlen('Tomáš Daněk'); // 14 :(
print mb_strlen('Tomáš Daněk', 'utf-8'); // 11Trvalé přesměrování URL adresy bez ztráty pozice ve vyhledávačích (úspěch není ovšem nikdy zaručen):
RewriteEngine on RewriteRule (.*) http://www.nova-domena.cz/$1 [R=301,QSA]
Nouzové řešení:
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://tomas.dankovi.info/");
header("Connection: close"); // fix IE bug
?>
V případě hledání chyb nebo problémů v PHP skriptu je vhodné zapnout zobrazování chybových hlášení.
Změnu nastavení je možné provést několika způsoby:
<IfModule mod_php4.c> php_value error_reporting 2047 php_flag display_errors 1 </IfModule>
<IfModule mod_php5.c> #php_value error_reporting 6143 # PHP 5.2 a méně php_value error_reporting 30719 # PHP 5.3 a více php_flag display_errors 1 </IfModule>
<?php
ini_set("display_errors", 1);
error_reporting(E_ALL);
$x = 2 / 0; //chyba deleni nulou
?>| Popis | error_reporting() | PHP4 | PHP5 | PHP5.3 |
| Nezobrazovat hlášení (implicitní) | 0 | 0 | 0 | 0 |
| Zobrazovat všechna hlášení | E_ALL | 2047 | 6143 | 30719 |
| Zobrazovat pouze chyby a varování | E_ERROR | E_WARNING | E_PARSE | 7 | 7 | 7 |
| Všechna hlášení, kromě notice | E_ALL ^ E_NOTICE | 2039 | 6135 | 30711 |
| Všechna hlášení, kromě deprecated | E_ALL ^ E_DEPRECATED | - | - | 22527 |
Níže uvedený skript nabízí základní ochranu e-mailu zveřejněném na webu proti spam robotům. Převádí text e-mailové adresy na HTML entity a zobrazuje jej pomocí JavaScriptu.
<?php
// javascript antispam e-mail link
function antispamlink($email, $title){
$return = "<script type=\"text/javascript\"><!--\ndocument.write('<a href=\"' + 'mailto:' + '";
$offset = 0;
while ($offset >= 0) {
$code1 .= '&#'.ordutf8($email, $offset).';';
}
$offset = 0;
while ($offset >= 0) {
$code2 .= '&#'.ordutf8($title, $offset).';';
}
$return .= $code1."' + '\">' + '".$code2."' + '<\/a>');\n--></script>";
return $return;
}
// utf-8 characters to ASCII (ord function isn't UTF-8 fiendly)
function ordutf8($string, &$offset) {
$code = ord(substr($string, $offset,1));
if ($code >= 128) { //otherwise 0xxxxxxx
if ($code < 224) $bytesnumber = 2; //110xxxxx
else if ($code < 240) $bytesnumber = 3; //1110xxxx
else if ($code < 248) $bytesnumber = 4; //11110xxx
$codetemp = $code – 192 – ($bytesnumber > 2 ? 32 : 0) – ($bytesnumber > 3 ? 16 : 0);
for ($i = 2; $i <= $bytesnumber; $i++) {
$offset ++;
$code2 = ord(substr($string, $offset, 1)) – 128; //10xxxxxx
$codetemp = $codetemp*64 + $code2;
}
$code = $codetemp;
}
$offset += 1;
if ($offset >= strlen($string)) $offset = -1;
return $code;
}
// print e-mail with title
echo antispamlink("info@dhosting.cz","Bc. Tomáš Daněk");
?>