TP Underground Lounge 07/08
-


Hinweise


Thema geschlossen
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 01.08.2006, 14:46   #1
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Exclamation

Wichtige PHP-Tipps


Dieser Thread bleibt geschlossen und wird von den Mods hier laufend ergänzt.
Er dient dazu, auf die häufigen Fragen eine Soforthilfe zu leisten.

Wer Ergänzungen oder Korrekturen hat, möge das doch bitte mir oder einem anderen Mod dieses Bereiches per PN mitteilen.
Viel Erfolg !

Inhaltsverzeichnis
utf-8
Fehlersuche in PHP-Scripts
Typische Fehler
Ablaufzeit eines Skriptes messen
kleine PHP-Diener
Variablen
Optimierungen
Mailadresse auf Gültigkeit prüfen
Datum formatieren
Verzeichnisse und Dateien
Array-Funktionen
Hilfreiche MySQL-Befehle
Text-Ersetzungsroutinen


Ich kenne den Syntax des Befehls xyz nicht - wer kann helfen ?

gib im Browser ein: php.net/xyz
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (31.07.2007 um 14:28 Uhr).
steffenk ist offline  


Alt 01.08.2006, 14:46   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Utf-8


Um UTF-8 zu nutzen, gibt es mehrere Möglichkeiten:

- die Datei selbst als UTF-8 speichern (das können nicht alle Editoren!)

- via META angeben (HTML):
HTML-Code:
<meta http-equiv="content-type" content="text/html; utf-8">

- wenn die Datei eine .php Datei ist, musst du es via header() angeben:
PHP-Code:
header('Content-Type: text/html; charset=utf-8'); 
Bei manchen Servern ist ein Eintrag in die .htaccess hilfreich:
Code:
AddDefaultCharset UTF-8
AddCharset utf-8 .css .html .xhtml
XML-Dokumente werden so mit utf-8 ausgegeben:
Code:
<?xml version="1.0" encoding="utf-8"?>
In CSS-Stylesheets wird utf-8 so angegeben:
Code:
@charset "utf-8";
es kann aber auch direkt mit utf-8 eingebunden werden:
Code:
<link rel="stylesheet" type="text/css" media="screen,projection" href="/design/main.css" charset="utf-8" />

Ein Formular kann utf-8-Kodierung erhalten:
Code:
<form accept-charset="utf-8" method=…



Wenn man mit MySQL-DBs arbeitet und die Kommunikation auch auf utf-8 Basis laufen soll, führt folgende Anweisung direkt nach dem Verbindungsaufbau zum Erfolg:
PHP-Code:
$res=mysql_query("SET NAMES 'utf8'"); 
weiterführende Infos
UTF8 und HTML / Javascript
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (13.10.2006 um 17:37 Uhr).
steffenk ist offline  
Alt 01.08.2006, 14:57   #3
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Fehlersuche in PHP-Scripts


Wenn Scripts nicht richtig funktionieren, liegt es oft an Fehlern / Auslasser / Verschreiber im Script.

Um eine Ausgabe aller Fehler und Warnungen zu bekommen, reicht eine Anweisung am Anfang des Scriptes:
PHP-Code:
error_reporting(E_ALL); 
Um sich die Variablen eines Arrays ausgeben zu lassen, ist folgende Anweisung hilfreich:

PHP-Code:
echo '<pre>'.print_r($array,true).'</pre>'
Dies ist auch Hilfreich, um sich alle $_GET,$_POST oder $_SESSION-Einträge anzeigen zu lassen.

MySQL-Fehler findet man am leichtesten durch folgende Anweisung:

PHP-Code:
$sql="SELECT * FROM ....";
$res=mysql_query($sql,$link) or die('MySQL-Fehler: '.mysql_error().'<br>SQL-Query: '.$sql); 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline  
Alt 01.08.2006, 15:09   #4
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Typische Fehler


Ein ganz typischer Fehler ist ein falscher Vergleichsoperator:
PHP-Code:
if($var=3) { ... } 
Hier wurde ein = vergessen, was nicht eine Prüfung auf Inhalt 3 bewirkt, sonder der Variablen den Wert 3 zuweist. Richtig:
PHP-Code:
if($var==3) { ... } 
Ein vergessenes ; am Ende einer Zeile führt zu einer Fehlermeldung, die sich auf eine Folgezeile bezieht. Hier sollte man immer zuerst ein vergessenes ; in den Zeilen zuvor prüfen.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline  
Alt 01.08.2006, 15:47   #5
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Ablaufzeit eines Skriptes messen


Nicht nur zur Optimierung kann es nützlich sein, die Ablaufzeit zu messen.
Hier ein einfaches Beispiel:

PHP-Code:
//am Anfang des Skriptes
$anfangszeit=microtime();
$anfangszeit=explode(" ",$anfangszeit);
$anfangszeit=$anfangszeit[1]+$anfangszeit[0];

// Hier folgt das Skript


//am Ende des Skriptes
$endzeit=microtime();
$endzeit=explode(" ",$endzeit);
$endzeit=$endzeit[1]+$endzeit[0];
printf("Dauer: %f sek.",$endzeit-$anfangszeit); 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline  
Alt 01.08.2006, 16:40   #6
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

kleine PHP-Diener


Alphabet erstellen:
PHP-Code:
for($i 65$i <= 90$i++) $alpha[] = chr($i); 
Alphabet ausgeben:
PHP-Code:
foreach ($alpha as $a) {echo "$a (Ascii: ".ord($a).")<br>";} 
Zeilen einer Tabelle alternierend einfärben:
PHP-Code:
$i=0;
while(
$bedingung) {
   echo 
'<tr bgcolor="'.($i++ % =='green' 'red').'"><td>...</td></tr>';

__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (08.08.2006 um 15:30 Uhr).
steffenk ist offline  
Alt 01.08.2006, 16:54   #7
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Variablen


Eine Variable beginnt mit dem Zeichen $
Wenn Variable in doppelten Hochkommas stehen, werden sie auch ersetzt:
PHP-Code:
echo "$anzahl Birnen liegen im Obstkorb"
Will man einen Variablennamen zusammensetzen, so kann man dies so erreichen:
PHP-Code:
$i=3;
${
'varname_'.$i}=$i
Die neue Variable heisst jetzt $varname_3 und hat den Inhalt 3.

Eine Referenz auf eine Variable kann man so erzeugen:
PHP-Code:
$array['ebene1']['ebene2']['ebene3']=25;
$ref = &$array['ebene1']['ebene2']['ebene3'];
echo 
$ref
In $ref steht jetzt die 25.
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (01.08.2006 um 17:09 Uhr).
steffenk ist offline  
Alt 02.08.2006, 13:59   #8
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Optimierungen


Schleifen
PHP-Code:
for($i 1$i <= count($var);$i++ ){ ... } 
Ohwohl der Code schön ausschaut ,wird bei jedem Durchlauf der (for)-Schleife der Befehl count() durchgefürht. Und wenn $var == array mit 10000000 Datensätzen gefüllt ist wird die Schleife richtig langsam.
Dieses ist also nur eine Performancebremse und sollte wenn möglich vermieden werden.
Besser:
PHP-Code:
$anzahl count($var); 
for(
$i 1$i <= $anzahl;$i++ ){ ... } 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (02.08.2006 um 14:01 Uhr).
steffenk ist offline  
Alt 02.08.2006, 14:28   #9
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Mailadresse auf Gültigkeit prüfen


PHP-Code:
//Prüfung der E-Mailadresse
function checkmail($address) {
   return 
preg_match("/^[_a-z0-9-] (\.[_a-z0-9-] )*@([0-9a-z][0-9a-z-]*[0-9a-z]{2}\.) ([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|shop)$/i"$address);

Natürlich gibt es noch weitere Arten der Überprüfung, hier einige Variationen:

(1) Herkömmliche Prüfung:
PHP-Code:
if (!ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Zaz]+)$",
$email)) 

(2) Erweiterung für Umlautdomains:
PHP-Code:
if (!ereg("^([a-zA-Z0-9\.\_\-]+)@([äöüÄÜÖa-zA-Z0-9\.\-]+\.[A-Za-z][A-Zaz]+)$",
$email)) 
(3) Erweiterung nach IDN, allerdings beschränkt auf ISO-8859-1 (Latin-1):
PHP-Code:
if (!ereg("^([à-öø-ÿa-zÀ-ÖØ-ÞA-Z0-9\.\_\-]+)@([à-öø-ÿa-zÀ-ÖØ-ÞA-Z0-9\.\-
]+\.[A-Za-z][A-Za-z]+)$"
$email)) 
Weitere Zeichen hängen allerdings von den jeweiligen landesspezifischen Browsereinstellungen ab.


(4) Einfache Prüfung ohne die Verwendung regulärer Ausdrücke:
PHP-Code:
if (strlen($email) < || strpos($email'@') < || strpos($email'.') < 1
Vorteil: Funktioniert mit allen Mail-Adressen.


(5) International funktionierende Kombination (?):
PHP-Code:
if (strlen($email) < || strpos($email'@') < || strpos($email'.') < || !preg_match("/^([\w|\.|\-|_]+)@([\w||\-|_]+)\.([\w|\.|\-
|_]+)$/i"
$email)) 
Prüft zunächst die Länge (mind. 6 Zeichen), dann das Vorkommen von "@" und "." und schließlich per preg_match den gültigen Aufbau
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer

Geändert von steffenk (12.08.2006 um 12:48 Uhr).
steffenk ist offline  
Alt 02.08.2006, 14:29   #10
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Datum formatieren


PHP-Code:
$today date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today date("m.d.y");                         // 03.10.01
$today date("j, n, Y");                       // 10, 3, 2001
$today date("Ymd");                           // 20010310
$today date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$today date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$today date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$today date("H:i:s");                         // 17:16:17 
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline  
Alt 02.08.2006, 14:39   #11
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

Verzeichnisse und Dateien


Erstellen eines Verzeichnisses
Aufruf mit create_dir('verzeichnisname');
PHP-Code:
//Erstellen eines Verzeichnisses, hier mit CHMOD 777
function create_dir($neuverz) {
    
$dir ".";
    
$check true;
    
$handle opendir($dir);
  &n