Kulcsszó - php

Többen is kértetek tőlem az elmúlt időszakban PHP-val kapcsolatos segítséget, gondoltam, most megosztok egy kis szösszenetet egy nemrég futott webes projektem kódjából. A projekt keretén belül többek között automatikus miniatür generálást kellett megvalósítanom. Ehhez az alábbi funkciót használtam:

 function imgResize($baseFile, $newFile, $newWidth) {
  $data = getimagesize($baseFile);
  $mime = $data['mime'];
  switch ($mime) {
   case 'image/png':
     $imgcreate = 'imagecreatefrompng';
     $imgsave = 'imagepng';
     break;

   case 'image/gif':
     $imgcreate = 'imagecreatefromgif';
     $imgsave = 'imagegif';
     break;

   case 'image/jpeg':
     $imgcreate = 'imagecreatefromjpeg';
     $imgsave = 'imagejpeg';
     break;

   default:
     throw new Exception("Filetype not supported.");
  }

  $img = $imgcreate($baseFile);
  list($width, $height) = getimagesize($baseFile);

  $newHeight = ($height / $width) * $newWidth;
  $tmp = imagecreatetruecolor($newWidth, $newHeight);
  imagecopyresampled($tmp, $img, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);

  if(file_exists($newFile)) {
   unlink($newFile);
  }
  $imgsave($tmp, "$newFile");
 }

Fontos volt, hogy az elkészített miniatür fájldátuma megegyezzen az eredeti fájl dátumával, amit pedig a következő funkcióval lehet könnyen megvalósítani:

 function copyFileDate($src, $dest) {
  $dt = filemtime($src);
  if ($dt === FALSE) return FALSE;
  touch($dest, $dt);
 }

Egy belső használatra szánt adminisztrációs rendszer készítésénél shell hívásokat kellett PHP-ból indítanom (sajnos az elvégzendő feladatot nem lehetett szebben - és gyorsabban - megvalósítani, csak shell hívással).
A szkriptek futási ideje igen magas volt, ráadásul egy meghatározott felhasználói interakció után több shell szkriptet is el kellett indítani. Mivel a művelet megengedte, ezért aszinkron futást kértem - ez esetben a PHP nem várja meg az aktuális shell_exec visszatérését (azaz a szkript lefutását), hanem tovább megy:
shell_exec("PARANCS > /dev/null 2>/dev/null &");