Thursday, July 29th 2010, 1:41pm UTC+2

You are not logged in.

  • Login
  • Register

undefined

Super Moderator

Posts: 4,248

Location: Germany

1

Sunday, October 20th 2002, 11:10pm

Problemfragen auf einem Blick

Für die Suchmaske:
extension bibliotheken phpversion gd


Ihr Interessiert euch für PHP oder Perl/CGI und wist nicht ob dies auf eurem Server möglich ist?
Hier ein Skript. Das euch dabei helfen wird dies Schnell heraus zu finden.
Öffnet einen Editor (z.B. Notepad oder Kedit) eurer Wahl.
Fügt folgendes in die Neue Seite ein.

PHP Source code

1
2
3
<?php
  phpinfo();
?>
Speichert es mit dem Namen info und der Dateiendung .php also:

Source code

1
info.php
auf eurem Server. Danach mit einem Internetbrowser die Url zu diesem Script aufrufen.
z.B. http://meineDOMAIN/info.php
Die PHP Info ist der Standard Informationsaufruf unter PHP. Hier könnt ihr verschiedene Informationen herausfinden.
Als Beispiel hänge ich Die PHPinfo ausgabe von meinem Heimserver einmal an.
undefined has attached the following file:
  • info.tar (40.96 kB - 24 times downloaded - Last download: Mar 14th 2008, 1:40pm)
Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
PHP Katepart - Speichenrechner - .htpasswd - RPM XDG Tool - Kcmnvview - QTidy
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

2

Tuesday, July 22nd 2003, 1:24pm

Register Globals oder was sind Super Globals

Für die Suchmaske:
senden empfangen posten ankommen flashvars echo get post Register Globals Mail senden verschicken


Frage: Meine Daten oder Variablen kommen nicht an?

Dies liegt mit überaus großer Wahrscheinlichkeit daran das Register Globals in der php.ini auf off steht!

Anmerkung:
Seit PHP 4.1.0 steht diese Einstellung Standard mäßig auf aus. Weil sie eine Sicherheitslücke darstellt. Daher sollten beim übergeben von Daten die so genannten Superglobals verwendet werden.

Beispiele dieser Vordefinierten Variablen:

PHP Source code

1
2
3
4
5
6
$_GET['foo'// Steht für Variablen die mit einem String an der CGI Schnittstelle übergeben werden. 
$_POST['foo'// Wenn Daten mittels eines Formulares übergeben werden.
$_FILES['foo'// Bei Dateiupload
$_SERVER['PHP_SELF'// Gibt die Globalen Variablen des Servers zurück.
$_COOKIE['foo'// Verarbeitung der Cookie Variablen
$_REQUEST['foo'// Gibt $_GET,$_POST und $_COOKIE zusammen zurück.

weitere Informationen Vordefinierte Variablen findet ihr unter PHP Manual

Frage: Wie kann ich feststellen das Register Globals auf off steht?
Verwendet dieses Script:

PHP Source code

1
2
3
if(ini_get($_SERVER['register_globals']) == 0) {
      echo "Off";
   }


Abhilfe:
  • richtig Coden :)
  • Ist mir zu schwer: In der PHP.ini die Einstellung auf On setzen und den Server neu starten.
  • Geht nicht - ist der Server meines Providers: Erstellt eine .htaccess Datei die diese Einstellungen in deinem Verzeichnisbaum rekursiv wieder Aktiviert! Siehe Beispiel!
  • Geht auch nicht darf keine .htaccess nutzen: richtig Coden :)


Beispiel .htaccess register Globals:

PHP Source code

1
2
3
<FilesMatch "\.(php|html?)$">
php_flag register_globals on
</FilesMatch>


Debugging:
Frage: Wie kann ich feststellen ob Daten angekommen sind?
Verwendet in der PHP Datei die Anweisung print_r() .
Sie gibt euch die Array Variablen zurück.

Beispiel print_r:

PHP Source code

1
print_r($_POST);


mfg Ming
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

3

Tuesday, July 29th 2003, 12:15pm

Probleme mit Sonderzeichen oder Umlauten.

Für die Suchmaske:
umlaute Sonderzeichen decodieren codieren zeichensatz wörter utf8_encode utf8_decode url_encode url_decode Mac Apple

Anmerkung:
Flash kann nur Text an der angegebenen URL laden wenn im Standard-MIME-Format ( application/x-www-form-urlencoded ) RFC1738 die Daten übergeben werden!

Problem-Lösungen:
Man kann System.useCodepage = true; auf eine Bildübergreifende Ebene setzen. Oder in das Bild oder MovieClip in dem Daten empfangen und gesendet werden. Unter Mac dürfte dies wenig hilfreich sein oder wenn man einen Server besitzt der den UserAgent (Benutzer oder Browser) nicht Identifiziert. Hier ist es Sinnvoller ? empfehlung ? die in PHP vorhandenen Befehl urlencode zu verwenden.

PHP_Manual urlencode

Für Flash MX ist es erforderlich den Befehl utf8_encode hinzu zu fügen!

PHP_Manual utf8_encode

Beispiel:

PHP Source code

1
2
3
$foo "Umlaute wie ÄÜÖöäß müssen mit urlencode und utf8_encode Codiert werden!";
echo "Flash5Variablen=" urlencode($foo);
echo "FlashMXVariablen=" urlencode(utf8_encode($foo));


mfg Ming
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

4

Tuesday, July 29th 2003, 5:19pm

Problem: Meine SWF Dateien werden nicht Aktualisiert!

Text für Suchenmaske:
cache kontrolle Internet Explorer aktualisieren reload refresh update temp temporäre

Anmerkung:
Viele von euch kennen das Problem oder haben sich schon mal bei einer Dynamischen Webseite gewundert das die Seiten nicht Aktualisiert wurden. Für dieses sache gibt es in PHP die so genannten HEADER Funktionen oder die HTTP Header Spezifikation Diese Spezifikation sollte wie es der Name auch schon sagt im Dateikopf stehen. Also bevor PHP mit dem Interpretieren der ganzen Seite beginnt. Für den Cache Controll stehen in PHP ebenfalls Funktionen zur Verfügung die man in diesen Headerblock mit einfügt die Standard Befehle zum Steuern dieses Problems lauten Last-Modified, Cache-Control und Pragma. Diese werden auch von allen Browsern Interpretiert einzige Ausnahme ist Micros... die hier wieder ihr eigenes Süppchen kochen müssen, hierzu Später mehr. Einen Typischen Cache-Control Header findet ihr mit genauen erläuterungen in der PHP-Maunal.

In dem folgenden Beispiel erlauben wir das Caching, legen aber eine befristete Zeit fest bis das die Seite verfallen oder Aktualisiert werden muß. Viele Befehle kommen euch bekannt vor, ich möchte aber einen kurz erläutern, getlastmod() nimmt die Zeit der letzten Änderung der Aktuell aufgerufenen Seite. Expires und Last-Modified gehören zusammen und bringen nur dann ihre Funktion! Genauere Info findet ihr in den oben aufgeführten Links.
Beispiel Cachesteuerung:

PHP Source code

1
2
3
4
5
6
$LEBENSDAUER 15;  // Cache Lebensdauer (Minuten) HTTP 1.1
$EXPIRES gmdate("D, d M Y H:i:s"time() + $LEBENSDAUER 80) ." GMT";
$MODIFIED gmdate("D, d M Y H:i:s"getlastmod()) ." GMT";
header("Expires: " $EXPIRES);// HTTP 1.0
header("Last-Modified: " $MODIFIED);// HTTP 1.0
header("Cache-Control: public, max-age=" $LEBENSDAUER 60);// HTTP 1.1
Wenn ihr das Caching unterbinden möchtet ist folgender Code angesagt.
Beispiel kein Caching:

PHP Source code

1
2
3
4
header("Expires: Mon, 13 Jul 1997 02:00:00 GMT");// HTTP 1.0
header("Last-Modified: " gmdate("D, d M Y H:i:s") ." GMT");// HTTP 1.0
header("Cache-Control: no-cache");// HTTP 1.1
header("Pragma: no-cache");// HTTP 1.1
Der Trick hierbei ist Relativ einfach, bei Expires fügt ihr ein Datum ein das schon lange verstrichen ist. Bei HTTP1.1 Cache-Control reicht ein einfaches no-cache oder Pragma no-cache aus. Diese werden von allen Browsern interpretiert und angenommen. Ausnahme hierbei ist der IE 5 und 6. Warum Mircoschr... hier mal wieder eine Extratour machen muste weiß keiner aber mittlerweile sind wir das von Redmond ja gewohnt, genug gewettert jetzt des Rätzels Lösung.
Wie schon angedeutet werden Pragma und no-cache im IE nicht Interpretiert ? hier gibt es drei Befehle auf die ich jetzt etwas genauer eingehen werde.
No-Check Post-Check Pre-Check
  • No-Check = Besagt das der Client kein Cachekontrolle durchführen soll. Kurz ? Es wird gecached aber nie Aktualisiert!
  • Post-Check = Der Client vergleicht den Browsercache mit der Seite nach einer vorgegebenen Zeit (interval expires) Wenn nicht angegeben dann Aktiv und wird vom Browser selbst Verwaltet.
  • Pre-Check = Der Browser fragt die Webseite auf die letzte Aktualisierung ab und vergleicht bei einem Unterschied den Cache mit der Seite. Es wird die Zeit der Letzten Änderung genommen, also das Datum der Datei.

Und genau hier liegt der Bock begraben. Wenn man eine SWF Datei in den Browsercache lädt. Aber nun in dieser SWF Datei ein Verknüpfung zu einer auf dem Server befindlichen Datei setzt. Kann der IE diese nicht vergleichen und Aktualisieren. Daher wird eine gewollte Cache Steuerung unter IE in Verbindung mit Flash nicht funktionieren. Weil sein Cache-Control sich nur auf das Datum der Datei und Scripting konzentriert. Die einzige Möglichkeit dieses Problem zu umgehen, ist den Cache des IE zu deaktivieren oder Besser gesagt im zu untersagen diese Seiten zu cachen!

PHP Source code

1
header("Cache-Control: post-check=0, pre-check=0"FALSE);

oder - wenn ihr nur eine HTML Seite verwendet.

PHP Source code

1
2
<meta http-equiv="Cache-Control" content="post-check=0">
<meta http-equiv="Cache-Control" content="pre-check=0">


Des weiteren könnt ihr auch mit .htaccess das Chachen von Seiten Steuern. In dem ihr ? wenn vorhanden ? wenn Mode-Expires aktiv? Folgendes in die .htaccess eintragt.

PHP Source code

1
2
ExpiresActive on
ExpiresDefault "access plus 60 seconds"

Besagt das die Seite 60 Sekunden nach dem letzten Zugriff ungültig ist und somit neu geladen werden muss.

mfg Ming
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

5

Thursday, October 23rd 2003, 1:11pm

Fehlersuche in PHP

Richtiges Debuggen mit PHP
Oft kommt es vor das man ein Script Online stellt und auf einmal nichts mehr funktioniert. Dabei kann man sich auf einfache weise in PHP Routinen schreiben oder simple Ausgaben erzeugen die es einem ermöglichen eine Protokolldarstellung zu erstellen. Hier einmal ein Beispiel wie man so etwas macht. Dazu setzt man in den Header die headers_sent abfrage um eventuelle Konflikte zu vermeiden. Und schaltet mit ini_alter die Fehlerprotokollierung ein, zusätzlich ist es sinnvoll den Cache leer zu halten.

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
  /*
   PHP Debugging
  */
  
if(!headers_sent())
{
 @ini_alter('error_reporting''E_ALL & ~E_NOTICE');
 @ini_alter('display_errors'true);
 @ini_alter('html_errors'true);
 
 header("Cache-Control: no-store, no-cache, must-revalidate");
 header("Cache-Control: post-check=0, pre-check=0"FALSE);
 header("Pragma: no-cache");
 
 $headerinfo "Debugger Header gestartet.";
 
}
?>
Im Dateifuss kann man sich nun ein Script includen das einem wie in diesem Beispiel die Superglobals zurück gibt. Die ist natürlich beliebig erweiterbar. Aber genügt in der regel völlig aus. Damit man sich nicht die Seite zumacht habe ich es in einen Layer gepackt der dadurch auch von der Seitendarstellung unabhängig ist.

PHP Source code

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
<?php
function browsercheck()
{
 $browsers = array("msie","gecko""opera""konqueror");
 for($i 0$i count($browsers); $i++)
 {
  if(preg_match("/(" $browsers[$i] . ")/i"$_SERVER['HTTP_USER_AGENT']))
  {
    return $browsers[$i];
   break;
  } else {
    return "and";
  }
 }
}

  $CssAll " right: 10px; bottom: 20px; padding: 2px; width: 240px; height: auto; background-color: #EFEFEF; border: 1px solid;";
  $thisStyle =  array("msie" => "position: absolute; overflow-y: scroll; overflow-x: scroll;",
                      "gecko" => "position: fixed; overflow: -moz-scrollbars-vertical -moz-scrollbars-horizontal;",
                      "opera" => "position: fixed; overflow: auto;",
                      "konqueror" => "position: fixed; overflow: auto;");
 
echo "<div align=\"left\" style=\"" $thisStyle[browsercheck()] . $CssAll "\"><strong style=\"font-size: 10px;\">DEBUGGER:</strong>";
echo "<pre style=\"color: #000000; font-size: 10px; font-family: Arial;\">";
echo "\$_POST<br />";
   print_r($_POST);
echo "\$_GET<br />";
   print_r($_GET);
echo "\$_FILES<br />";
   print_r($_FILES);
echo "\$_SESSION<br />";
   print_r($_SESSION);
echo "register_globals:" ini_get('register_globals') . "<br />";
echo $headerinfo "<br />";
echo "error_reporting: " . (bool)ini_get('error_reporting') . "<br />";
echo "display_errors: " . (bool)ini_get('display_errors') . "<br />";
echo "html_errors: " . (bool)ini_get('html_errors') . "<br />";
echo "</pre></div>";
?>

Wichtig:Die dateien müssen mit include_once(); eingebunden werden.
Viel Spass beim Debuggen :D
Ming
Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
PHP Katepart - Speichenrechner - .htpasswd - RPM XDG Tool - Kcmnvview - QTidy
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

6

Sunday, April 22nd 2007, 5:23pm

Wie kann ich Textknoten ohne Regexp Ersetzen?

Seit PHP5 geht das Relative einfach über das Dom Objekt.
Im Beispiel Suche ich nach allen div tags und ersetze die Textknoten bei den Elementen die das Attributes class='TextBloc' Beinhalten:

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$str file_get_contents"http://my.homepage.de/index.php" );
$str stripslashes$str );

$dom = new DomDocument'1.0''utf-8' );
$dom->loadHTML$str );
$Nodes $dom->getElementsByTagName"div" );
foreach( $Nodes AS $Child ) {
   if ( $Child->getAttributeNode"class" )->nodeValue == 'TextBloc' ) {
      $old $Child->firstChild;
      $new = new DOMText"Einen neuen Text einfuegen ;-)" );
      $Child->replaceChild$new$old );
   }
}

echo $dom->saveHTML();
Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
PHP Katepart - Speichenrechner - .htpasswd - RPM XDG Tool - Kcmnvview - QTidy
  • Go to the top of the page

undefined

Super Moderator

Posts: 4,248

Location: Germany

7

Sunday, April 22nd 2007, 5:28pm

Wie Kann ich auf JSON/Ajax zugreifen?

Seit PHP 5.2.* ist die json Extension fester bestandteil.
Ihr könnt Relative einfach Object wandeln.
Hierbei ist die Typenabfrage aber von Entscheidenden Vorteil ;)

PHP Source code

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
<?php

$JSON_STRING json_encode(
   array(
      "aArray" => range"a""z" ),
      "bArray" => range150 )
   )
);

$Suche "aArray";

$MyStdClass json_decode$JSON_STRING );

try {

   throw new Exception"ERROR: $Suche ist keine Instance der 'stdClass' Klasse von json_decode()." );

   if ( $MyStdClass->$Suche instanceof $MyStdClass )
      var_dump"<pre>instanceof:" $MyStdClass->$Suche "</pre>" );

} catch( Exception $ErrorHandle ) {

   echo $ErrorHandle->getMessage() . "<br /><pre>";

   if ( property_exists$MyStdClass$Suche ) )
      var_dump"property_exists:"$MyStdClass->$Suche );

   echo "</pre>";

}

var_dump"<pre>" $MyStdClass "</pre>" );

?>
Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
PHP Katepart - Speichenrechner - .htpasswd - RPM XDG Tool - Kcmnvview - QTidy
  • Go to the top of the page