Ergebnis 1 bis 15 von 15

Thema: 1001 Nützliche Funktionen für PHP

  1. #1
    TP-Greis Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.422

    1001 Nützliche Funktionen für PHP

    Na gut, ganz so viele sind es nicht, aber diese hab ich mit der Zeit zusammengesammelt und nutze sie recht oft für alles Mögliche (Zeitberechnung, Stringmanipulation, etc.).

    Verbesserungsvorschläge und Ideen sind gern willkommen ;)

    Code:
    // --------------- Zeitberechnungen ---------------
    
    
    function startcount()
    // Startcount / Endcount - misst die Zeit in ms, die waehrend der
    // erstellung der Seite vergangen sind.
    {
      $mtime = microtime();
      $mtime = explode(" ",$mtime);
      $mtime = $mtime[1] + $mtime[0];
      return $mtime;
    }
    
    function endcount($starttime)
    {
      $mtime = microtime();
      $mtime = explode(" ",$mtime);
      $mtime = $mtime[1] + $mtime[0];
      $endtime = $mtime;
      $totaltime = ($endtime - $starttime);
      printf("%f", $totaltime);
    }
    
    function unix2date($unixzeit,$format,$clock)
    // Wandelt einen UNIX-Timestamp in ein normales Datum um
    // und schickt einen String zurueck ...
    // 11.09.2002 18:03 Uhr
    {
    
    	if($format=="long") $months = array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
    	if($format=="short") $months = array("Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");
    	if($format=="digit") $months = array("01.","02.","03.","04.","05.","06.","07.","08.","09.","10.","11.","12.");
    
    	list($mday,$month,$year) = split("( )",date("d n Y",$unixzeit));
    	$month -= 1;
    
    	if($clock=="uhr")
    	{
    		$uhrzeit=date("H:i",$unixzeit);
    		return $this_day="$mday. $months[$month] $year - $uhrzeit";
    	}
    	else
    	{
    		return $this_day="$mday. $months[$month] $year";
    	}
    }
    
    function date_diff($date1, $date2) # Vergleicht zwei TIMESTAMP (20021121) Daten (Tage, Stunden, Minuten, Sekunden)
    {
      $s = strtotime($date2)-strtotime($date1);
      $d = intval($s/86400);
      $s -= $d*86400;
      $h = intval($s/3600);
      $s -= $h*3600;
      $m = intval($s/60);
      $s -= $m*60;
      return array("d"=>$d,"h"=>$h,"m"=>$m,"s"=>$s);
    }
    
    function calc_days($start,$end) # Errechnet die Tage (unixdate) zwischen zwei Daten
    {
      $result = (int)(($end-$start)/86400);
      return $result;
    }
    
    // --------------- Textstrings manipulieren, BB-Codes ---------------
    
    function cleantext($string)
    // 20.02.2003 - ' werden auch umgewandelt (ENT_QUOTES)
    // 21.02.2003 - wenn magic_quotes_gpc aus ist, addslashes durchführen
    {
     	$string=trim($string);
    	if(get_magic_quotes_gpc() != 1) $string=addslashes($string); # Magic Quotes an/aus?
    	$string=htmlentities($string,ENT_QUOTES); # ' auch umwandeln
      $string=preg_replace('/\r\n|\r|\n/', '<br />', $string); # \r und \n Umbrüche umwandeln
      return $string;
    }
    
    function re_htmlentities($html)
    // Erstellt aus HTML-Entitles normale Zeichen her (fuer Emails)
    // Neue, kurze Version
    // 10.10.2002 16:50 Uhr
    {
      $arr = get_html_translation_table(HTML_ENTITIES);
      $arr = array_flip($arr);
      return strtr($html, $arr);
    }
    
    function br2break($string)
    // Erstellt aus <br /> und <br> wieder normale \r\n Umbrueche
    {
    	return preg_replace("=<br(>|([\s/][^>]*)>)\r?\n?=i", "\r\n", $string);
    }
    
    function bbcode2html($text)
    // Erstellt aus den BBCodes die passenden <span>-Definitionen
    {
      $text = preg_replace("#\[f\](.*?)\[/f\]#si", '<strong>\\1</strong>', $text);
      $text = preg_replace("#\[k\](.*?)\[/k\]#si", '<em>\\1</em>', $text);
      $text = preg_replace("#\[b\](.*?)\[/b\]#si", '<span class="blau">\\1</span>', $text);
      return $text;
    }
    
    // Macht aus https, ftps, mailtos und news anklickbare links
    function replace_uri($str)
    {
      $pattern = '#(^|[^\"=]{1})(http://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';
      return preg_replace($pattern,"\\1<a href=\"\\2\\3\">\\2\\3</a>\\4",$str);
    }
    
    // Ersetzt Umlaute mit oe, ue etc.
    // Nützlich für hochgeladene Dateien
    // 20.02.2003 22:56
    function replace_umlaut($str)
    {
    	$str=str_replace("ß","ss",$str);
    	$str=str_replace("ä","ae",$str);
    	$str=str_replace("ü","ue",$str);
    	$str=str_replace("ö","oe",$str);
    	$str=str_replace("Ä","Ae",$str);
    	$str=str_replace("Ü","Ue",$str);
    	$str=str_replace("Ö","Oe",$str);
    	$str=str_replace(",","",$str);
    	$str=preg_replace("/\s/s","_",$str); # Alle Leerzeichen weg
    	return $str;
    }
    
    // --------------- RegEx zum Überprüfen von Strings ---------------
    
    // Ueberprueft, ob im String nur Zahlen stehen
    function checknumber($string)
    {
    	if (!preg_match("/^\d+$/",$string))
    	{ return false; }
    	else { return true; }
    }
    
    // Ueberprueft, ob im String nur Buchstaben stehen
    function checkletter($string)
    {
    	if (!preg_match("=^[a-zäöüß]+$=i",$string))
    	{ return false; }
    	else { return true; }
    }
    
    function check_email($email) // Checkt, ob Emails gültig sind
    {
      $nonascii      = "\x80-\xff"; # Non-ASCII-Chars are not allowed
    
      $nqtext        = "[^\\\\$nonascii\015\012\"]";
      $qchar         = "\\\\[^$nonascii]";
    
      $protocol      = '(?:mailto:)';
    
      $normuser      = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
      $quotedstring  = "\"(?:$nqtext|$qchar)+\"";
      $user_part     = "(?:$normuser|$quotedstring)";
    
      $dom_mainpart  = '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
      $dom_subpart   = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
      $dom_tldpart   = '[a-zA-Z]{2,5}';
      $domain_part   = "$dom_subpart$dom_mainpart$dom_tldpart";
    
      $regex         = "$protocol?$user_part\@$domain_part";
      // RegEx end
    
      return preg_match("/^$regex$/",$email);
    }
    
    function checkurl($url) # Überprüft, ob URLs äußerlich korrekt sind
    {
    	$regex="^(http://|https://)?[-a-z0-9]+(\.?[-a-z0-9]+){0,3}\.[a-z]{2,4}((/[[:graph:]]*){1,5}([[:graph:]]+\.[a-z0-9]{1,5})?)?$";
      return eregi($regex,$url);
    }
    
    // --------------- Passworterstellung / ID-Erstellung ---------------
    
    function generatepw($length)
    // Erstellt ein zufaelliges Passwort und schickt es zurueck
    // Erwartet wird ein Wert (Laenge des Passwortes)
    // Ohne l und 1 (sieht zu aehnlich aus)
    // 15.08.2002 12:09 Uhr
    {
    	$pass = "";
    	$index = 1;
    	while ($index <= $length)
    	{
    		mt_srand((double)microtime()*1000000);
    		$random = mt_rand(0,59);
    		$pass .= substr("abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ023456789", $random, 1);
    		$index++;
    	}
    	return $pass;
    }
    
    function makeunique($passlen)
    // Schnellere, aber auch einfachere Version eines Passwortgenerators
    // Die Zeichen sind willkuerlich, man hat keine Auswahl
    // 26.03.2003 - Verbesserte Zufallsfunktion
    {
    	list($usec, $sec) = explode(' ', microtime());
    	mt_srand((float) $sec + ((float) $usec * 100000));
    	$rand_string = md5(uniqid(mt_rand(), true));
    
    	$passwort = substr($rand_string,0,$passlen);
    	return $passwort;
    }
    
    // --------------- Dateimanipulation ---------------
    
    
    function delete_file($file)
    // Datei 100% löschen
    {
    	$delete = @unlink($file);
    	clearstatcache();
      	if (@file_exists($file))
      	{
        	$filesys = eregi_replace("/","\\",$file);
         	$delete = @system("del $filesys");
        	clearstatcache();
         	if (@file_exists($file))
         	{
            	$delete = @chmod ($file, 0775);
            	$delete = @unlink($file);
          		$delete = @system("del $filesys");
         	}
      	}
     	clearstatcache();
      	if (@file_exists($file))
    	{
    		return false;
    	}
      	else
      	{
      		return true;
      	}
    }
    
    // --------------- Bilderstellung / Manipulation ---------------
    
    // function createthumb ($bild,$newwidth=120,$ziel="./thumbs/")
    function createthumb ($bild,$newwidth,$ziel)
    {
    	$bild2 = $quell.$bild;
      if(!file_exists($bild2)) return 0;
    
    	$daten  = getimagesize ($bild2);
    	$width  = $daten[0];
    	$height = $daten[1];
    	$typ    = $daten[2];
    	$newheight = intval($height*$newwidth/$width);
    	$thumb =     $ziel."tn_".$bild;
    
    	switch ($typ)
    	{
    		case "1":
    			echo "Das .GIF Format wird leider nicht unterst&uuml;tzt.";
    			break;
    		case "2":
    			$old = ImageCreateFromJPEG($bild2);
    			$new = imagecreatetruecolor($newwidth,$newheight);
    			
    			imagecopyresampled($new,$old,0,0,0,0,$newwidth,$newheight,$width,$height);
    			ImageJPEG($new,$thumb);
    			break;
    		case "3":
    			$old = ImageCreateFromPNG($bild2);
    			$new = imagecreatetruecolor($newwidth,$newheight);
    
    			imagecopyresampled($new,$old,0,0,0,0,$newwidth,$newheight,$width,$height);
    			ImagePNG($new,$thumb);
    			break;
    		default:
    		echo "Dateityp ist ung&uuml;ltig!";
    
    	}
    
    	return $thumb;
    }
    ?>
    Geändert von Adagio (14.04.2003 um 02:17 Uhr)
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  2. #2
    TP-Specialist Avatar von mike
    Registriert seit
    Jan 2002
    Ort
    TP/Dynamik
    Beiträge
    2.876
    Perlen, Adagio.
    Danke
    Gehelft? Hier kannst du dich bedanken.

    mike

  3. #3
    TP-Greis Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.422
    Habs grad noch mal aktualisiert
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  4. #4
    TP-Senior Avatar von blueGirl
    Registriert seit
    Jan 2002
    Ort
    camburg
    Beiträge
    149
    das ist aber ne schöne sammlung, sehr hilfreich, danke!

    blueGirl
    blueGirl

  5. #5
    TP-Insider Avatar von HoRnominatoR
    Registriert seit
    Dec 2003
    Ort
    nienburg (raum hannover)
    Beiträge
    971
    hier auch mal ne funktion meinerseits

    Code:
    <?
    
    function convert($slashes,$html,$nl2br,$bbcode,$var)
    {
    
     if(!empty($slashes) && $slashes = 1)
     {
      $var = stripslashes($var);
     }
    
     if(!empty($html) && $html = 1)
     {
      $var = htmlspecialchars($var);
     }
    
     if(!empty($nl2br) && $nl2br = 1)
     {
      $var = nl2br($var);
     }
    
     if(!empty($bbcode) && $bbcode = 1)
     {
      $bbcode_array = array('[i ]', '[/i ]', '[b ]', '[/b ]', '[u ]', '[/u ]'); // freizeichen loeschen
      $replace_array = array('<em>', '</em>', '<strong>',
     '</strong>', '<span style="text-decoration:underline;">', '</span>');
    
      for($i = 0; $i < count($bbcode_array); $i++)
      {
       $var = str_replace($bbcode_array[$i], $replace_array[$i], $var);
      }
     }
    
     return $var;
    }
    ?>
    enthaelt stripslashes (slashes aus datenbankstring entfernen), htmlentities (< und > ersetzen, damit kein html ausgefuehrt werden kann), nl2br (um absaetze automatisch umzuwandeln) und bbcode (fett/kursiv/unterstrichen fuer textabschnitte - ersetzt einzeln um nicht nur den laengsten string wie mit preg zu ersetzen)


    convert(int, int, int, int, $string);

    int = 0 = wird nicht umgewandelt
    int = 1 = wird umgewandelt

    bei der reihenfolge
    int1 = stripslashes, slashes (nicht) umwandeln
    int2 = htmlspecialchars, < und > (nicht) umwandeln
    int3 = nl2br, absaetze (nicht) umwandeln
    int4 = bbcode, bbcode (nicht) umwandeln

    $string is eben der string in dem ersetzt werden soll.

    edit: die freizeichen im bbcode_array muessen geloescht werden, aber sonst schluckts das forum (warum kann man bbcode hier nicht deaktivieren?? menno).
    Geändert von HoRnominatoR (05.03.2004 um 21:54 Uhr)
    in eile kam er,
    in schwarzem gewand,
    aus den tiefen des waldes,
    ein einsamer mann, ein geschoepf der freiheit,
    ein geschoepf ohne furcht,
    doch alle nannten sie ihn nur T O D

  6. #6
    TP-Senior Avatar von blueGirl
    Registriert seit
    Jan 2002
    Ort
    camburg
    Beiträge
    149
    wow! das brauch ich grad! danke schön! blueGirl
    blueGirl

  7. #7
    TP-Specialist Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    @Horno:
    Wozu sind denn bitte die Zuweisungen in den IF-Abfragen, die IMMER wahr sind? Warum eine Prüfung mit empty, wenn nur ein boolscher Wert benötigt wird? Deshalb verstehe ich die Sache mit dem int(eger) auch nicht... Ja/Nein sind Wahrheitswerte - was anderes wird da doch nicht gebraucht.
    Und, warum werden der Funktion str_replace nicht direkt die Arrays übergeben? ... Diese kleine Funktion ist meiner Meinung nach doch "etwas überladen" mit unnötigem Kram, oder?

    Gruss
    Jan

    ich fuer meinen teil habe nicht vor mich weiter von einem fehlerhaften programm, das von inkompetenten entwicklern, [...] zugemuellt wird und es auch nicht fertig bringen dafuer mal ein bugfix zur verfuegung zu stellen, wie es fuer ihre sicherheitsluecken immer tun, unterwerfen zu lassen.
    ...da fällt mir ein Glashaus und diverse Steine ein. Just my 2 cents...

  8. #8
    TP-Senior
    Registriert seit
    Jun 2004
    Ort
    leipzig
    Beiträge
    214
    und <strong> ist reichlich veraltet...
    BeCreated - Geduld und Zeit für Ihre Wünsche

  9. #9
    TP-Insider Avatar von HoRnominatoR
    Registriert seit
    Dec 2003
    Ort
    nienburg (raum hannover)
    Beiträge
    971
    @stuck

    wenn ich genau drueber nachdenke, liegst du wohl richtig, solange 0 != NULL.
    sollte ich eventuell mal umschreiben. das mit 1/0 hab ich gemacht, um einfach festzulegen, ob entsprechende konvertierung wirklich vorgenommen oder uebersprungen werden soll, verbesserungsvorschlaege sind bei mir immer gern gesehen. str_replace koennte ich auch mal durch strtr() ersetzen, zwecks vereinfachung.

    @feuervogel

    falls du wirklich ahnung von dem hast was du da sprichst, welche alternative wuerdest du denn anbieten? (zumal ich die aussagen fuer mehr als falsch halte - es ist aktueller denn je)
    in eile kam er,
    in schwarzem gewand,
    aus den tiefen des waldes,
    ein einsamer mann, ein geschoepf der freiheit,
    ein geschoepf ohne furcht,
    doch alle nannten sie ihn nur T O D

  10. #10
    TP-Senior
    Registriert seit
    Jun 2004
    Ort
    leipzig
    Beiträge
    214
    meine alternative ist:

    <b>

    <strong> stammt noch aus html 1.0-zeiten und ist somit unzweifelhaft alt.
    BeCreated - Geduld und Zeit für Ihre Wünsche

  11. #11
    TP-Greis Avatar von Boris
    Registriert seit
    Mar 2001
    Ort
    Stuttgart & Kornwestheim
    Beiträge
    9.422
    Zitat Zitat von feuervogel
    meine alternative ist:

    <b>

    <strong> stammt noch aus html 1.0-zeiten und ist somit unzweifelhaft alt.
    Tja, da muss ich Dich leider enttäuschen. <b> ist nicht mehr Teil des aktuellen XHTML-Standards, sondern <strong>. Erst informieren, dann reden ;-)
    My software never has bugs. It just develops random features ...

    » DevShack - die Website des freien Webentwicklers Boris

  12. #12
    TP-Insider Avatar von HoRnominatoR
    Registriert seit
    Dec 2003
    Ort
    nienburg (raum hannover)
    Beiträge
    971
    <b> und <strong> haben soviel gemein wie java und javascript.

    <b> = bold = fett
    <strong> = stark betont

    fuer die logische auszeichnung eines stark betonten textes gibt es keine alternative zu <strong>. <b> ist ein rein optisches praesentationsmittel und hat in aktuellen dokumenten rein garnichts mehr verloren, da komplett durch CSS ersetzt, noch weniger als frueher, screenreader und braillezeilen werden mehr denn je benutzt, das web wird fuer behinderte immer offener, semantisches markup tritt in den vordergrund. strong ist garnicht mehr wegzudenken, war es auch nie.
    in eile kam er,
    in schwarzem gewand,
    aus den tiefen des waldes,
    ein einsamer mann, ein geschoepf der freiheit,
    ein geschoepf ohne furcht,
    doch alle nannten sie ihn nur T O D

  13. #13
    TP-Insider Avatar von HoRnominatoR
    Registriert seit
    Dec 2003
    Ort
    nienburg (raum hannover)
    Beiträge
    971
    im grunde hat er mit seiner aussage schon recht - es ist unzweifelhaft alt, aber genau damit auch aktuell, da es schon immer grundlegend fuer ein semantisches markup war. es findet bloss keine ersetzung statt, wozu auch... strong bleibt strong, b bleibt b, das eine hat mit dem anderen nichts zu tun.
    in eile kam er,
    in schwarzem gewand,
    aus den tiefen des waldes,
    ein einsamer mann, ein geschoepf der freiheit,
    ein geschoepf ohne furcht,
    doch alle nannten sie ihn nur T O D

  14. #14
    TP-Senior
    Registriert seit
    Jun 2004
    Ort
    leipzig
    Beiträge
    214
    ah, okay, ich hab mich einfach nur noch nie mit der behindertengerechten darstellung einer webseite auseinander gesetzt...
    BeCreated - Geduld und Zeit für Ihre Wünsche

  15. #15
    TP-Insider Avatar von loki
    Registriert seit
    May 2003
    Ort
    Aachen
    Beiträge
    720
    Danke Adagio, deine generatePW Funktion kommt mir gerade gelegen
    "Man muss die Welt nicht verstehen, man muss sich nur darin zurechtfinden."
    Einstein


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51