PHP verwenden

Diese Rubrik behandelt viele Fehler, die möglicherweise beim Schreiben von PHP-Skripten auftreten.

  1. Ich kann mir die Reihenfolge der Parameter von PHP-Funktionen nicht merken - gibt es ein Schema?
  2. Ich möchte ein PHP-Skript schreiben, das Daten von beliebigen Formularen verarbeiten kann. Woher weiß ich, welche Variablen über die POST-Methode verfügbar sind?
  3. Ich möchte alle einfachen Anführungszeichen (') in einen Backslash gefolgt von einem einfachen Anführungszeichen (\') ersetzen lassen. Wie kann ich das mit einem regulären Ausdruck machen? Ich möchte außerdem " zu \" und \ zu \\ konvertieren.
  4. Wenn ich den folgenden Code ausführe, wird die Ausgabe in der falschen Reihenfolge ausgegeben: <?php function myfunc($argument) { echo $argument + 10; } $variable = 10; echo "myfunc($variable) = " . myfunc($variable); ?> Woran liegt das?
  5. Wo sind meine Zeilenumbrüche geblieben? <pre> <?php echo "Das soll die erste Zeile sein."; ?> <?php echo "Das soll nach dem obigen Zeilenumbruch erscheinen."; ?> </pre>
  6. Ich bekomme die Meldung 'Warning: Cannot send session cookie - headers already sent...' oder 'Cannot add header information - headers already sent...'.
  7. Wie kann ich auf Informationen aus dem Request-Header zugreifen?
  8. Wenn ich versuche, Authentifizierung mit IIS zu nutzen, bekomme ich die Meldung 'No Input file specified'.
  9. Windows: Ich kann keine auf einem anderen Rechner freigegebenen Dateien aufrufen, wenn ich den IIS verwende.
  10. Wie kann ich XML und PHP mischen? PHP beschwert sich über meine <?xml-Tags!
  11. Wo kann ich eine komplette Liste der mir zur Verfügung stehenden Variablen finden?
  12. Wie kann ich PDF-Dateien generieren, ohne die nicht-freie und kommerzielle Bibliothek PDFLib zu verwenden? Ich suche etwas, das frei ist und keine externen PDF-Bibliotheken benötigt.
  13. Einige PHP-Direktiven akzeptieren nicht nur Integer-Byte-Werte, sondern auch abgekürzte Byte-Werte. Welche Abkürzungen gibt es?
Ich kann mir die Reihenfolge der Parameter von PHP-Funktionen nicht merken - gibt es ein Schema?

PHP besteht aus Hunderten externer Bibliotheken, so dass dies manchmal etwas durcheinander erscheint. Eine einfache Regel ist aber wie folgt:

Parameter von Array-Funktionen sind als "needle, haystack" (Nadel, Heuhaufen) geordnet, während die Parameter von String-Funktionen genau andersrum geordnet sind, also als "haystack, needle" (Heuhaufen, Nadel).

Ich möchte ein PHP-Skript schreiben, das Daten von beliebigen Formularen verarbeiten kann. Woher weiß ich, welche Variablen über die POST-Methode verfügbar sind?

PHP bietet viele vordefinierte Variablen, wie das superglobale $_POST. Sie können $_POST mit einer Schleife durchlaufen, da es sich um ein assoziatives Array mit allen über die POST-Methode übertragenen Variablen handelt. Als Beispiel verwenden wir die foreach-Schleife, um (mit der Funktion empty()) auf leere Werte zu prüfen, und geben diese Werte aus.

<?php
$empty 
$post = array();
foreach (
$_POST as $varname => $varvalue) {
    if (empty(
$varvalue)) {
        
$empty[$varname] = $varvalue;
    } else {
        
$post[$varname] = $varvalue;
    }
}

print 
"<pre>";
if (empty(
$empty)) {
    print 
"Keiner der POST-Werte ist leer. Die Werte sind:\n";
    
var_dump($post);
} else {
    print 
"Wir haben " count($empty) . " leere Werte:\n";
    print 
"Alle Werte:\n"var_dump($post);
    print 
"Leer:\n";  var_dump($empty);
    exit;
}
?>

Ich möchte alle einfachen Anführungszeichen (') in einen Backslash gefolgt von einem einfachen Anführungszeichen (\') ersetzen lassen. Wie kann ich das mit einem regulären Ausdruck machen? Ich möchte außerdem " zu \" und \ zu \\ konvertieren.

Falls Sie dies für eine Datenbank tun möchten, sollten Sie den Maskierungsmechanismus nutzen, der für diese Datenbank vorgesehen ist. Z. B. sollten Sie mysql_real_escape_string() unter MySQL und pg_escape_string() unter PostgreSQL nutzen. Es gibt außerdem die generische Funktionen addslashes() und stripslashes(), die häufig in älterem PHP-Code genutzt werden.

Wenn ich den folgenden Code ausführe, wird die Ausgabe in der falschen Reihenfolge ausgegeben:
<?php
function myfunc($argument)
{
    echo 
$argument 10;
}
$variable 10;
echo 
"myfunc($variable) = " myfunc($variable);
?>
Woran liegt das?

Um das Ergebnis Ihrer Funktion in einem Ausdruck verwenden zu können (um es z. B. wie im obigen Beispiel mit dem anderen String zu verbinden), müssen Sie den Wert mit return zurückgeben und ihn nicht mit echo ausgeben.

Wo sind meine Zeilenumbrüche geblieben?
<pre>
<?php echo "Das soll die erste Zeile sein."?>
<?php 
echo "Das soll nach dem obigen Zeilenumbruch erscheinen."?>
</pre>

In PHP können Code-Blöcke entweder mit "?>" oder mit "?>\n" enden (\n steht für Zeilenumbruch). Im obigen Beispiel sind die ausgegebenen Zeilen daher in einer Zeile, denn PHP lässt die Zeilenumbrüche nach den Block-Ende-Zeichen weg. Wenn Sie möchten, dass PHP einen Zeilenumbruch ausgibt, müssen Sie nach jedem Code-Block einen zusätzlichen Zeilenumbruch einfügen.

Warum macht PHP das so? Wenn Sie normales HTML formatieren, erleichert PHP Ihnen die Arbeit, da Sie meist diesen Zeilenumbruch gar nicht haben möchten. Würde PHP diesen Zeilenumbruch ausgeben, müssten Sie sehr lange Zeilen schreiben und Ihren Code damit unlesbar machen.

Ich bekomme die Meldung 'Warning: Cannot send session cookie - headers already sent...' oder 'Cannot add header information - headers already sent...'.

Die Funktionen header(), setcookie() und die Session-Funktionen müssen dem Output-Stream Header hinzufügen. Header können aber nur gesendet werden, wenn Sie vor allen anderen Daten gesendet werden. Vor dem Aufruf dieser Funktionen darf also keine Ausgabe (wie z. B. HTML-Code) stattfinden. Die Funktion headers_sent() prüft, ob Ihr Skript bereits Header gesendet hat. Nützlich sind in diesem Zusammenhang auch die Funktionen zur Ausgabesteuerung.

Wie kann ich auf Informationen aus dem Request-Header zugreifen?

Wenn Sie PHP als Apache-Modul laufen lassen, liefert Ihnen die Funktion getallheaders() die gewünschten Informationen. Der folgende Code gibt alle Request-Header aus:

<?php
$headers 
getallheaders();
foreach (
$headers as $name => $content) {
    echo 
"headers[$name] = $content<br />\n";
}
?>

Siehe auch apache_lookup_uri(), apache_response_headers() und fsockopen().

Wenn ich versuche, Authentifizierung mit IIS zu nutzen, bekomme ich die Meldung 'No Input file specified'.

Das Sicherheitsmodell des IIS ist hier fehlerhaft. Dies ist ein Problem, das bei allen CGI-Programmen auftritt, die unter dem IIS laufen. Als Workaround können Sie eine leere HTML-Datei, die nicht von PHP geparst wird, als Eingangsseite in ein per Authentifizierung geschütztes Verzeichnis legen. Anschließend leiten Sie den Browser durch ein META-Tag auf die PHP-Seite weiter oder sie setzen einen Link auf die PHP-Seite. PHP erkennt dann die Authentifizierung korrekt. Auch auf anderen NT-Web-Servern sollte dieses Problem nicht auftauchen. Weitere Informationen finden Sie auch hier: » http://support.microsoft.com/kb/q160422/. Lesen Sie auch den Manual-Abschnitt zur HTTP-Authentifizierung mit PHP.

Windows: Ich kann keine auf einem anderen Rechner freigegebenen Dateien aufrufen, wenn ich den IIS verwende.

Sie müssen die Go to Internet Information Services ändern. Suchen Sie Ihre PHP-Datei und rufen Sie deren Eigenschaften auf. Wechseln Sie auf das Register File Security, klicken Sie dort auf Edit -< Anonymous access and authentication control.

Sie können das Problem beheben, indem Sie entweder den Haken bei Anonymous Access entfernen und ihn bei Integrated Window Authentication belassen, oder indem Sie Anonymous Access ankreuzen und dann die Berechtigungen der Benutzer, die keinen Zugriff bekommen sollen, anpassen.

Wie kann ich XML und PHP mischen? PHP beschwert sich über meine <?xml-Tags!

Um <?xml in Ihren PHP-Code einzufügen müssen Sie die Kurzform der öffnenden PHP-Tags abschalten, indem Sie in Ihrer php.ini short_tags auf 0 setzen. Sie können diese Direktive nicht mit der Funktion ini_set() setzen. Sie können unabhängig davon, ob short_open_tags aktiviert oder deaktiviert ist, z. B. <?php echo '<?xml'; ?> verwenden. Der Standardwert für diese Direktive ist On.

Wo kann ich eine komplette Liste der mir zur Verfügung stehenden Variablen finden?

Lesen Sie die Manual-Seite zu vordefinierten Variablen, die eine (unvollständige) Liste der vordefinierten Variablen enthält, die Ihren Skripten zur Verfügung stehen. Eine komplette Liste der verfügbaren Variablen (und viele weitere Informationen) können Sie sehen, wenn Sie die Funktion phpinfo() aufrufen. Beachten Sie auch den Abschnitt zu Variablen außerhalb von PHP, der verschiedene Szenarien für externen Variablen wie HTML-Formulare, Cookies oder den URL beschreibt.

Wie kann ich PDF-Dateien generieren, ohne die nicht-freie und kommerzielle Bibliothek PDFLib zu verwenden? Ich suche etwas, das frei ist und keine externen PDF-Bibliotheken benötigt.

Es gibt einige in PHP geschriebene Alternativen wie » FPDF und » TCPDF.

Einige PHP-Direktiven akzeptieren nicht nur Integer-Byte-Werte, sondern auch abgekürzte Byte-Werte. Welche Abkürzungen gibt es?

Die verfügbaren Abkürzungen sind K (für Kilobytes), M (für Megabytes) und G (für Gigabytes), Groß-/Kleinschreibung spielt dabei keine Rolle. Alle anderen Werte werden als Byte-Werte erkannt. 1M entspricht z. B. einem Megabyte oder 1048576 Bytes. 1K entspricht einem Kilobyte oder 1024 Bytes. Diese abgekürzte Schreibweise kann in der php.ini und in der Funktion ini_get() verwendet werden. Es ist zu beachten, dass der numerische Wert nach int umgewandelt wird; beispielsweise wird 0.5M als 0 interpretiert.

Hinweis: Kilobyte versus Kibibyte

Die PHP-Notation beschreibt ein Kilobyte als Entsprechung von 1024 Bytes, während der IEC-Standard dies als Kibibyte bezeichnet. Zusammenfassung: k und K = 1024 Bytes.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

How to overcome Safari's iframe cookie block?

To overcome Safari's iframe cookie block, you can use the SameSite=None; Secure cookie attribute in conjunction with a third-party domain that sup ...

Geschrieben von Joniemartinez am 21.12.2024 13:28:24
Forum: HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS
Probleme mit speichern in Datenbank in französisch

Les erreurs fréquentes lors de l'enregistrement de données dans une base de données incluent des problèmes de connexion, des erreurs de syntax ...

Geschrieben von Alice12 am 18.12.2024 05:07:21
Forum: PHP Developer Forum
Gibt es eine API zum Abrufen von PHP-Code-Referenzen?

PHP.net bietet eine umfassende Online-Dokumentation für PHP. Es gibt keine offizielle API zum Abrufen von PHP-Dokumentationen direkt, aber du kan ...

Geschrieben von Alice12 am 18.12.2024 05:03:27
Forum: PHP Developer Forum
Ein data POST via Curl funktioniert nicht.

It looks like your PHP cURL request isn't working because you're not properly setting the CURLOPT_CUSTOMREQUEST option; it should be a string, so ...

Geschrieben von noah1600 am 16.12.2024 04:16:13
Forum: PHP Developer Forum