7. srpna 2008

Tipy pro PHP kodéry

PhP kodéři, nebo chcete li programátoři občas používají některé postupy, které jsou již zastaralé, či nedoporučované. Pokusil jsem se z hlavy vyjmenovat z některé z nich na které jsem za posledních pár pracovních dní narazil.

1/ Načítání souborů do proměnné
nepoužívejte často používaný a doporučovaný fopen, je hrozně pomalý.

$data = '';
$fp = fopen("FILE", "r");
while ($fp && !feof($fp)) {
  $data .= fread($fp, 1024);
}
fclose($fp);

ale místo něj použijte rychlejší file_get_contents:
$data = file_get_contents("FILE");  

2/ ošetřujte správně stav když není dostupná databáze
opravdu nestačí tenhle kód
MySQL_Connect($db_server, $db_user, $db_pass);
  MySQL_Select_DB($db_name) or
   Die ('Nepodařilo se připojit k databázi.');

pak se Vám stane, že Google zaindexuje vaší chybovou hlášku. Podle W3C normy, slouží k těmto situacím chybový stav 503.
if (!MySQL_Connect($db_server, $db_user, $db_pass) || !MySQL_Select_DB($db_name)) {
  header("HTTP/1.1 503 Service Unavailable");
  echo "Nepodařilo se připojit k databázi.\n";
  exit;
}

3/ procházení polí - jedině foreach

Pořád narážím v kódu na takovéto procházení polí:
reset($pole);
while (list($key, $val) = each($pole)) {
  echo 'klíč: ' .$key .' - hodnota: ' .$val .'\n';
}

Microtime tvrdí, že takovéto procházení polí je hrozně pomalé, raději používejte:
foreach($pole AS $key => $val) {
  echo 'klíč: ' .$key .' - hodnota: ' .$val .'\n';
}


4/ načítání chráněných dat přes kombinaci exec a wget

pokud načítáte chráněné obrázky a soubory (server kde jsou umístněny vyžaduje refferer nebo kód prohlížeče) přes kombinaci exec a wget. Nedělejte to - jsou jednoduší řešení:
function get_data($url) {
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  curl_setopt ($ch, CURLOPT_REFERER, $url);
  curl_setopt ($ch, CURLOPT_USERAGENT, "Firefox, best browser");
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

5/ procházení souborů v php

často vidím, jak se na serveru procházejí složky a soubory takle:
$soubory = array();
$dir = opendir("./adresar/");
while (($filename = readdir($dir)) !== false) {
   if (substr($filename, -4) == ".jpg") {
    $soubory[] = $filename;
  }
}
closedir($dir);

coz je pomale a neefektivni, lepší je použít glob, který vytvoří pole (a na výpis třeba foreach (bod 3)):
$soubory = glob("./adresar/*.jpg");

Někdy příště budu pokračovat, prolézáním starého kodu a razením osatním se nahromadí hodně inspirace...

Žádné komentáře: