PHP Hilfsfunktionen (PHP)


Aus Macwrench

Wechseln zu: Navigation, Suche

Ein paar nützliche Hilfsfunktionen für den täglichen PHP-Irrsinn ;-)

Inhaltsverzeichnis

Dateisystem

glob_r()

Eine rekursive Variante von glob()

  1. function glob_r($dir = "", $flags = 0) {
  2. $files = array();
  3. if(empty($dir) || !is_dir(dirname($dir))) {
  4. return $files;
  5. }
  6. $supp = str_replace(dirname($dir),"",$dir);
  7. $dir = dirname($dir).DIRECTORY_SEPARATOR;
  8.  
  9. // get all files:
  10. $files = glob($dir.$supp,$flags);
  11.  
  12. // get all subdirectories:
  13. $_dirs = scandir($dir);
  14. $dirs = array();
  15. foreach($_dirs as $_dir) {
  16. if(substr($_dir,0,1) == ".") {
  17. continue;
  18. }
  19. if(is_dir($dir.$_dir)) {
  20. $dirs[] = $dir.$_dir;
  21. }
  22. }
  23. unset($_dirs);
  24. foreach($dirs as $dir) {
  25. $_files = glob_r($dir.$supp,$flags);
  26. $files = array_merge($files,$_files);
  27. }
  28. return $files;
  29. }

alternativ (ab PHP5) mit der Klasse RecursiveDirectoryIterator der SPL:

  1. <?php
  2. $dir_iterator = new RecursiveDirectoryIterator("/path/to/directory");
  3. $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
  4. foreach ($iterator as $file) {
  5. echo $file, "\n";
  6. }
  7. ?>

CLI-Skripte

Ein paar hilfreiche Funktionen für PHP-CLI Skript

isRunning()

überprüft mittels Manpage.png ps -ax und Manpage.png grep, ob dieses Skript bereits läuft. Die PHP-Funktion shell_exec() muss dafür verfügbar sein. Funktioniert nur, wenn das wie folgt Skript direkt aufgerufen wird und nicht über den PHP-Interpreter:

./test.php
# und NICHT so
/usr/bin/local/php5 -q ./test.php

Letzterer Aufruf hätte zur Folge, dass in der verwendeten Variable $_ENV["_"] der PHP-Interpreter (in diesem Fall /usr/bin/local/php5 steht und nicht das Skript. Dazu ist ggf. mittels Manpage.png chmod die Ausführungs-Berechtigung entsprechend zu setzen.

  1. public static function isRunning() {
  2.  
  3. if(!isset($_ENV["_"]) || empty($_ENV["_"])) {
  4. return false;
  5. }
  6. if(substr($_ENV["_"],0,1) == "./") {
  7. $cmd = substr($_ENV["_"],2);
  8. } else {
  9. $cmd = $_ENV["_"];
  10. }
  11. $psaux = shell_exec('ps -ax | grep "'.$cmd.'"');
  12. $psaux = explode("\n",$psaux);
  13. $processes = array();
  14. foreach($psaux as $process) {
  15. if(stripos($process,$cmd) && !stripos($process,"grep")) {
  16. $processes[] = $process;
  17. }
  18. }
  19. if(count($processes) > 1) {
  20. return true;
  21. } else {
  22. return false;
  23. }
  24.  
  25. }

isConsole()

schützt ein CLI-Skript davor, über einen Webserver aufgerufen zu werden:

  1. /**
  2. * check if this script has been called from a terminal (console) or via web server.
  3. * @return boolean
  4. */
  5. public static function isConsole() {
  6. if(
  7. (isset($_SERVER["CLIENTNAME"]) && strtolower($_SERVER["CLIENTNAME"]) != "console") ||
  8. isset($_SERVER["SESSIONNAME"]) ||
  9. isset($_SERVER["HTTP_HOST"])
  10. ) {
  11. return false;
  12. }
  13. return true;
  14. }
Persönliche Werkzeuge