PHP-Chinesisch-Handbuch 2

WBOY
Freigeben: 2016-07-30 13:31:54
Original
1038 Leute haben es durchsucht

<code><code>

11. Ausnahmebehandlung

<code><code>

Benutzer können Define verwenden Ausnahmebehandlungsklassen zur Erweiterung der in PHP integrierten Ausnahmebehandlungsklassen. Der folgende Code veranschaulicht, welche Eigenschaften und Methoden in der integrierten Ausnahmebehandlungsklasse in Unterklassen zugänglich und vererbbar sind. Anmerkung des Übersetzers: Der folgende Code dient nur zur Veranschaulichung der Struktur der integrierten Ausnahmebehandlungsklasse. Es handelt sich nicht um einen verwendbaren Code mit praktischer Bedeutung.

<code>class Exception{
protected $ message = 'Unbekannte Ausnahme'; //Ausnahmeinformationen
protected $code = 0; //Benutzerdefinierter Ausnahmecode
protected $file; //Der Dateiname, in dem die Ausnahme aufgetreten ist
protected $line ; // Die Codezeilennummer, in der die Ausnahme aufgetreten ist
function __construct($message = null, $code = 0);
final function getMessage(); >final function getCode( ); // Gibt den Ausnahmecode zurück
final function getFile(); // Gibt den Dateinamen zurück, in dem die Ausnahme aufgetreten ist
final function getLine(); wo die Ausnahme aufgetreten ist
final function getTrace(); // backtrace() array
final function getTraceAsString(); // getTrace()-Informationen in einen String formatiert
/* Überladbare Methode*/
function __toString(); // Ausgebbarer String
}
?><code>class Exception{
protected $message = 'Unknown exception'; // 异常信息
protected $code = 0; // 用户自定义异常代码
protected $file; // 发生异常的文件名
protected $line; // 发生异常的代码行号
function __construct($message = null, $code = 0);
final function getMessage(); // 返回异常信息
final function getCode(); // 返回异常代码
final function getFile(); // 返回发生异常的文件名
final function getLine(); // 返回发生异常的代码行号
final function getTrace(); // backtrace() 数组
final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息
/* 可重载的方法 */
function __toString(); // 可输出的字符串
}
?>

Wenn Sie eine benutzerdefinierte Klasse verwenden, um die integrierte Ausnahmebehandlungsklasse zu erweitern und den Konstruktor neu zu definieren, wird empfohlen, gleichzeitig parent::__construct() aufzurufen, um zu überprüfen, ob alle Variablen vorhanden sind zugewiesene Werte. Wenn das Objekt eine Zeichenfolge ausgeben möchte, können Sie __toString() überladen und den Ausgabestil anpassen.

Erweiterte in PHP integrierte Ausnahmebehandlungsklasse

<code>// Passen Sie eine Ausnahmebehandlungsklasse an
class MyException erweitert Exception{ // Definieren Sie das Konstrukt neu Der Konverter macht Nachricht zu einer Eigenschaft, die angegeben werden muss
öffentliche Funktion __construct($message, $code = 0) {
// Angepasster Code // Stellen Sie sicher, dass alle Variablen korrekt zugewiesen sind
parent:: __construct($message, $code);
}
// Passen Sie den Stil der String-Ausgabe an
public function __toString() {
return __CLASS__ ": [ {$this-. >code}]: {$this->message}n";
}
public function customFunction() {
echo "Eine benutzerdefinierte Funktion für diese Art von Ausnahmen ";
}
}
<code>// 自定义一个异常处理类
class MyException extends Exception{ // 重定义构造器使 message 变为必须被指定的属性
public function __construct($message, $code = 0) {
// 自定义的代码 // 确保所有变量都被正确赋值
parent::__construct($message, $code);
}
// 自定义字符串输出的样式
public function __toString() {
return __CLASS__ . ": [{$this->code}]: {$this->message}n";
}
public function customFunction() {
    echo "A Custom function for this type of exceptionn";
    }
}
//创建一个用于测试异常处理机制的类
class TestException{
public $var;
const THROW_NONE = 0;
const THROW_CUSTOM = 1;
const THROW_DEFAULT = 2;
function __construct($avalue = self::THROW_NONE) {
switch ($avalue) {
case self::THROW_CUSTOM:
// 抛出自定义异常
throw new MyException('1 is an invalid parameter', 5);
break;
case self::THROW_DEFAULT:
// 抛出默认的异常
throw new Exception('2 isnt allowed as a parameter', 6);
break;
default:
// 没有异常的情况下,创建一个对象
$this->var = $avalue;
break;
}
}
}
// 例子 1
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (MyException $e) { // 捕获异常
echo "Caught my exceptionn", $e;
$e->customFunction();
} catch (Exception $e) { // 被忽略
echo "Caught Default Exceptionn", $e;
}
// 执行后续代码
var_dump($o);
echo "nn";
// 例子 2
try {
$o = new TestException(TestException::THROW_DEFAULT);
} catch (MyException $e) { // 不能匹配异常的种类,被忽略
echo "Caught my exceptionn", $e;
$e->customFunction();
} catch (Exception $e) { // 捕获异常
echo "Caught Default Exceptionn", $e;
}
// 执行后续代码
var_dump($o);
echo "nn";
// 例子 3
try {
$o = new TestException(TestException::THROW_CUSTOM);
} catch (Exception $e) { // 捕获异常
echo "Default Exception caughtn", $e;
}
// 执行后续代码
var_dump($o);
echo "nn";
// 例子 4
try {
$o = new TestException();
} catch (Exception $e) { // 没有异常,被忽略
echo "Default Exception caughtn", $e;
}
// 执行后续代码
var_dump($o);
echo "nn";
?>//

Erstellen Sie eine Klasse zum Testen des Ausnahmebehandlungsmechanismus
class TestException{
public $var;const THROW_NONE = 0;
const THROW_CUSTOM = 1;
const THROW_DEFAULT = 2;
function __construct($avalue = self::THROW_NONE) {
switch ($avalue) {
case self::THROW_CUSTOM:
// Eine benutzerdefinierte Ausnahme auslösen
throw new MyException('1 ist ein ungültiger Parameter', 5);
break;
case self:: THROW_DEFAULT:
//Die Standardausnahme auslösen
throw new Exception('2 ist nicht als Parameter zulässig', 6);
break;
default :
// Erstellen Sie ein Objekt, wenn keine Ausnahme vorliegt
$this->var = $avalue;
break;
}
}
}
// Beispiel 1
try {
$o = new TestException(TestException::THROW_CUSTOM);
} Catch (MyException $e) { // Ausnahme abfangen
echo „Habe meine Ausnahme abgefangen“, $e;
$e->customFunction();
} Catch (Exception $e) { // Ignoriert
echo "Caught Default Exceptionn" , $e;
}
// Nachfolgenden Code ausführen
var_dump($o);
echo "nn";
// Beispiel 2
try {
$o = new TestException(TestException::THROW_DEFAULT);
} Catch (MyException $e) { // Der Ausnahmetyp konnte nicht abgeglichen werden, ignoriert
echo „Meine Ausnahme wurde abgefangen“, $e;
$e ->customFunction();
} Catch (Exception $e) { // Ausnahme abfangen
echo „Standardausnahme abgefangen“, $e;
}
//Nachfolgend ausführen code
var_dump($o);
echo "nn";
// Beispiel 3
try {
$o = new TestException(TestException::THROW_CUSTOM);
} Catch (Exception $e) { // Ausnahme abfangen
echo „Standardausnahme gefangenn“, $e;
}
// Nachfolgenden Code ausführen
var_dump( $o);
echo "nn";
// Beispiel 4
try {
$o = new TestException();
} Catch (Exception $e) { // Keine Ausnahme, ignoriert
echo „Standardausnahme gefangen“, $e;
}
// Nachfolgenden Code ausführen
var_dump ($o);
echo "nn";
?>12. Generator<code><code>

Mit Generatoren können Sie Code in einen foreach-Block schreiben, um einen Datensatz zu durchlaufen, ohne ein Array im Speicher zu erstellen, was Sie tun würden Ihr Speicherlimit ist erreicht oder die Verarbeitung nimmt viel Zeit in Anspruch. Stattdessen können Sie eine Generatorfunktion schreiben, genau wie eine normale benutzerdefinierte Funktion, und statt einer normalen Funktion, die nur einmal zurückgibt, kann der Generator so oft wie nötig nachgeben, um Werte zu generieren, über die iteriert werden muss.

<code>function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
            throw new LogicException('Step must be ve');
}
for ($i = $start; $i <= $limit; $i = $step) {
                                                                                          else {
if ($ Step & GT; = 0) {
Throw New LogiceXception ('Step Must be -ve');
}
for ($ i = $ start; $i > und xrange() führen zum selben
* Ausgabe unten. */
echo 'Einstellige ungerade Zahlen aus range(): ';
foreach (range(1, 9, 2) as $number) {
echo " $number ";
}
echo "n";
echo 'Einstellige ungerade Zahlen aus xrange(): ';
foreach (xrange(1, 9, 2) as $number) {
echo "$number ";
}
?><code>function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step must be ve');
}
for ($i = $start; $i <= $limit; $i = $step) {
yield $i;
}
} else {
if ($step >= 0) {
            throw new LogicException('Step must be -ve');
        }
        for ($i = $start; $i >= $limit; $i  = $step) {
            yield $i;
        }
    }
}
/* Note that both range() and xrange() result in the same
* output below. */
echo 'Single digit odd numbers from range(): ';
foreach (range(1, 9, 2) as $number) {
    echo "$number ";
}
echo "n";
echo 'Single digit odd numbers from xrange(): ';
foreach (xrange(1, 9, 2) as $number) {
    echo "$number ";
}
?>

Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9 
Nach dem Login kopieren

Vergleich von Generatoren mit Iterator-Objekten

Der Hauptvorteil von Generatoren ist, dass im Vergleich zur Implementierung einer Iterator-Klasse viel weniger Boilerplate-Code geschrieben werden muss. und der Code ist im Allgemeinen viel besser lesbar. Beispielsweise sind die folgenden Funktionen und Klassen gleichwertig:

<code>function getLinesFromFile($fileName) {
if (!$fileHandle = fopen($fileName, 'r')) {< br /> return;
while (false! == $ line = Fixeds ($ filehandle)) {
yield $ line;

fclose ($ fileHandle);
}
// versus...
class LineIterator implementiert Iterator {
protected $fileHandle;
protected $line;
protected $i ;
public function __construct($fileName ) {
if (!$this->fileHandle = fopen($fileName, 'r')) {
throw new RuntimeException('Datei konnte nicht geöffnet werden "' . $fileName . '"' );
                                                                                                                                                                        Datei öffnen "' . br /> $this->line = fgets($this->fileHandle);
$this->i = 0;
} öffentliche Funktion valid() {
// return false !== $this->line;
}
public function current() {
return $this- >line;
}
public function key() {                                                                          ‐ out'''''''''''- out out out out out's's direkt raus ‑‑        out out of  (false ! {
$this->line = fgets($this->fileHandle);
$this->i ;
}
}
öffentliche Funktion __destruct () {
                                                                                                                                               🎜>

<code>function getLinesFromFile($fileName) {
if (!$fileHandle = fopen($fileName, 'r')) {
return;
}
while (false !== $line = fgets($fileHandle)) {
yield $line;
}
fclose($fileHandle);
}
// versus...
class LineIterator implements Iterator {
protected $fileHandle;
protected $line;
protected $i;
public function __construct($fileName) {
if (!$this->fileHandle = fopen($fileName, 'r')) {
            throw new RuntimeException('Couldn't open file "' . $fileName . '"');
        }
    }
    public function rewind() {
        fseek($this->fileHandle, 0);
        $this->line = fgets($this->fileHandle);
        $this->i = 0;
    }
    public function valid() {
        return false !== $this->line;
    }
    public function current() {
        return $this->line;
    }
    public function key() {
        return $this->i;
    }
    public function next() {
        if (false !== $this->line) {
        $this->line = fgets($this->fileHandle);
        $this->i ;
        }
    }
    public function __destruct() {
        fclose($this->fileHandle);
        }
    }
?>13. Zitat

<code><code>

<code>$a =& $b; //Das bedeutet <code>$a =& $b; //这意味着 $a$b 指向了同一个变量。$a$b 在这里是完全相同的,这并不是 $a 指向了 $b 或者· //相反,而是 $a$b 指向了同一个地方。
?>

$a und $b zeigen auf dieselbe Variable. <code>$a

und $b

sind hier genau gleich, was bei $a

zeigt auf

$b

oder ·                           // Stattdessen zeigt es auf 

$a

und 

$b

zeigt auf die gleiche Stelle.
?>

<code>

wenn Arrays mit Referenzen werden kopiert und ihre Werte werden nicht dereferenziert. Das Gleiche gilt für die Übergabe von Array-Werten an Funktionen. Wenn eine undefinierte Variable per Referenz zugewiesen, per Referenz übergeben oder per Referenz zurückgegeben wird, wird die Variable automatisch erstellt.

function foo(&$var) { }

foo ($a); // $a wird „erstellt“ und null zugewiesen

$b = array();

foo( $b['b']);

var_dump(array_key_exists('b', $b)); // bool(true)

$c = new StdClass;

<code>$bar =& new fooclass();
$foo =& find_var($bar);
?>

foo($c->d);var_dump(property_exists($c, ' d')); // bool(true)

?>

Gleiche Syntax Kann kann in Funktionen verwendet werden, die Referenzen zurückgeben, und im new-Operator (PHP 4.0.4 und höher):

<code>

$bar =& new fooclass();
$foo =& find_var($ bar);< br />?><code>$var1 = "Example variable";
$var2 = "";
function global_references($use_globals){
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // visible only inside the function
} else {
$GLOBALS["var2"] =& $var1; // visible also in global context
}
}
global_references(false);
echo "var2 is set to '$var2'n"; // var2 is set to ''
global_references(true);
echo "var2 is set to '$var2'n"; // var2 is set to 'Example variable'
?>

Wenn a Wird eine Referenz einer als global deklarierten Variablen innerhalb einer Funktion zugewiesen, ist die Referenz nur innerhalb der Funktion sichtbar. Dies kann durch die Verwendung des Arrays $GLOBALS vermieden werden. Referenzieren Sie globale Variablen innerhalb einer Funktion:

<code>

$var1 = "Beispielvariable";
$var2 = "";
function global_references($use_globals){
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // nur innerhalb der Funktion sichtbar
} else {
$GLOBALS["var2"] =& $ var1; // auch im globalen Kontext sichtbar

echo "var2 ist auf '$var2'n" gesetzt; // var2 ist gesetzt to ''
global_references(true);
echo "var2 is set to '$var2'n"; // var2 is set to 'Example variable'
?>

global $var;

behandeln als Es ist die Abkürzung von $var =& $GLOBALS['var']; . Das Zuweisen anderer Referenzen zu

$var

ändert also nur die Referenz der lokalen Variablen.

Wenn einer Variablen mit einer Referenz in der foreach-Anweisung ein Wert zugewiesen wird , es ist Das referenzierte Objekt wird ebenfalls geändert.

$ref = 0;

$row =& $ ref;<code>function foo(&$var){
$var ;
}
$a=5;
foo($a);
?>foreach (array(1, 2, 3) as $row) {// etwas tun}

echo $ref; // 3 – letztes Element des iterierten Arrays

?>Die zweite Sache, die Referenzen bewirken, ist die Übergabe von Variablen als Referenz. Dies wird erreicht, indem eine lokale Variable innerhalb der Funktion erstellt wird und diese Variable auf denselben Inhalt im aufrufenden Bereich verweist. Zum Beispiel:

<code>

Funktion foo(&$var){
$var ;
}
$a=5;
foo($a);
?>

ergibt aus

$a

<code>function foo(&$var){
$var ;
}
$a=5;
foo($a);// $a is 6 here
?>
6 . Dies liegt daran, dass die Variable

$var in der Funktion foo

auf und

$a verweist auf den gleichen Inhalt. Eine ausführlichere Erklärung finden Sie unter „Übergabe als Referenz“.

Die dritte Sache, die eine Referenz bewirkt, ist die Referenzrückgabe. Referenzen sind keine Hinweise.

Sie können eine Variable als Referenz an eine Funktion übergeben, sodass die Funktion den Wert ihres Arguments ändern kann. <code>function foo( &$var){
$var ;
}
$a=5;
foo($a);// $a ist hier 6
?> Beachten Sie, dass es im Funktionsaufruf keine Referenzsymbole gibt – nur in die Funktionsdefinition haben. Die Funktionsdefinition allein reicht aus, damit Parameter korrekt per Referenz übergeben werden Folgendes kann per Referenz übergeben werden:

Variablen wie foo($a); Neue Anweisungen wie foo(new foobar()); Von Funktionen zurückgegebene Referenzen

Jeder andere Ausdruck kann nicht als Referenz übergeben werden und das Ergebnis ist undefiniert.

<code><code>function bar(){ // Note the missing &
$a = 5;
return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>
Funktionsleiste( ){ // Beachten Sie das fehlende &
$a = 5;
return $a;
}
foo(bar()); // Verursacht seit PHP 5.0.5 Fatal Fehler
foo($a = 5) // Ausdruck, keine Variable
foo(5) // Verursacht schwerwiegenden Fehler
?>

Referenzrückgabe wird verwendet, wenn Sie eine Funktion verwenden möchten, um herauszufinden, an welche Variable die Referenz gebunden werden soll. . Verwenden Sie keine Return-Referenzen, um die Leistung zu steigern. Die Engine ist intelligent genug, um sie selbst zu optimieren. Geben Sie Referenzen nur zurück, wenn ein triftiger technischer Grund vorliegt! Um eine Referenz zurückzugeben, verwenden Sie diese Syntax:

<code><code>class foo {
public $value = 42;
public function &getValue() {
return $this->value;
    }
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue; // prints the new value of $obj->value, i.e. 2.
?>
< ? php
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue ist eine Referenz auf $obj->value, der 42 ist.
$obj->value = 2;
echo $myValue; // gibt den neuen Wert von $obj->value aus, d. h. 2.
?>

In diesem Beispiel gibt die Funktion getValue den zurück Objekteigenschaften werden zugewiesen und nicht kopiert, als ob keine Referenzsyntax verwendet worden wäre. Anders als bei der Parameterübergabe muss hier das kaufmännische Und-Zeichen an beiden Stellen verwendet werden – es zeigt an, dass eine Referenz zurückgegeben wird, keine übliche Kopie, und zeigt auch an, dass $myValue als Referenz und nicht als übliche Zuweisung gebunden ist. Wenn Sie eine Referenz aufheben, brechen Sie lediglich die Bindung zwischen dem Variablennamen und dem Inhalt der Variablen auf. Dies bedeutet nicht, dass die Variableninhalte zerstört werden.

<code><span><?php<br />$a = 1;<br />$b =& $a;<br />unset($a);<br />?></span><code>

$a = 1;
$b =& $a;
unset($a);
?>

wird nicht deaktiviert $b, nur $a

. Referenzpositionierung:

globale Referenz: Bei der Deklaration einer Variablen mit globaler $var wird tatsächlich eine Referenz auf die globale Variable hergestellt. Mit anderen Worten, es ist dasselbe wie:

<code><span><?php<br />$var =& $GLOBALS["var"]; //这意味着,例如,unset <var><var>$var</var></var> 不会 unset 全局变量。<br />?></span>

<code><?php<br />$ var =& $GLOBALS["var"]; //Das bedeutet, dass zum Beispiel durch unset </p></p>$var</p></p> keine globalen Variablen gelöscht werden. <br />?>

$this: In einer Methode eines Objekts,

$this

ist immer eine Referenz auf das Objekt, das es aufruft.

14. Vordefinierte Variablen

Superglobale Variablen sind in allen Bereichen integriert. in Variablen, die in PHP immer verfügbar sind Viele vordefinierte Variablen in PHP sind „superglobal“, was bedeutet, dass sie im gesamten Umfang eines Skripts verfügbar sind. Auf sie kann innerhalb einer Funktion oder Methode zugegriffen werden, ohne dass die globale Variable $variable ausgeführt werden muss. Diese superglobalen Variablen sind:

$GLOBALS; $_GET; $_COOKIE;$_SESSION;$_REQUEST;$_ENV

Standardmäßig sind alle superglobalen Variablen verfügbar. Allerdings gibt es einige Richtlinien, die diese Verfügbarkeit beeinflussen.

$GLOBALS – bezieht sich auf alle im globalen Bereich verfügbaren Variablen, ein globales kombiniertes Array, das alle Variablen enthält. Der Name der Variablen ist der Schlüssel des Arrays.

<code><span><?php<br />function test() {<br />$foo = "local variable";<br />echo '$foo in global scope: ' . $GLOBALS["foo"] . "n";//$foo in global scope: Example content<br />echo '$foo in current scope: ' . $foo . "n";//$foo in current scope: local variable<br />}<br />$foo = "Example content";<br />test();<br />?></span>

<code><?php< br />function test() {<br />$foo = "local variable";<br />echo '$foo im globalen Gültigkeitsbereich: ' im globalen Bereich: Beispielinhalt<br />echo '$foo im aktuellen Bereich: ' .//$foo im aktuellen Bereich: lokale Variable<br />}<br />$foo = " Beispielinhalt";<br />test();<br />?>

„Superglobal“ wird auch als automatisierte globale Variable bezeichnet. Dies bedeutet, dass es in allen Bereichen des Skripts verfügbar ist. Es ist nicht erforderlich, die globale Variable $ in einer Funktion oder Methode zu verwenden, um darauf zuzugreifen. Im Gegensatz zu allen anderen superglobalen Variablen ist

$GLOBALS in PHP immer verfügbar.

$_SERVER Ist ein Array, das Informationen wie Header-Informationen (Header), Pfad (Pfad) und Skriptspeicherorte (Skriptspeicherorte) enthält. Die Elemente in diesem Array werden durch dargestellt

Erstellung eines Webservers. Möglicherweise können Sie die folgenden Elemente in $_SERVER finden oder auch nicht. Aufzählung:

'PHP_SELF': die Datei des aktuellen Name des ausführenden Skripts, bezogen auf das Stammverzeichnis des Dokuments. Verwenden Sie beispielsweise

$_SERVER['PHP_SELF'] erhält /test.php/foo.bar.

'SERVER_ADDR': wo die aktuell läuft Das Skript befindet sich in der IP-Adresse des Servers.

'SERVER_NAME': wo der aktuell läuft Das Skript befindet sich Der Hostname des Servers. Wenn das Skript auf einem virtuellen Host ausgeführt wird, wird der Name durch den für diesen virtuellen Host festgelegten Wert bestimmt.

'SERVER_PROTOCOL': Kommunizieren Sie, wenn Sie eine anfordern Seite Der Name und die Version des Protokolls. Beispiel: „HTTP/1.0“.

'REQUEST_METHOD': wird für den Zugriff auf verwendet Seitenanforderungsmethode, zum Beispiel „GET“, „HEAD“, „POST“, „PUT“.

'REQUEST_TIME': Anfrage Der Zeitstempel, als es gestartet wurde. Verfügbar seit PHP 5.1.0.

'QUERY_STRING': Abfragezeichenfolge (String) , falls vorhanden, über welche Seite der Zugriff erfolgt.

'HTTP_HOST': in der aktuellen Anfrage Header Host: Der Inhalt des Elements, falls vorhanden.

'HTTP_REFERER': leitet den Benutzeragenten an die Adresse der vorherigen Seite der aktuellen Seite (falls vorhanden). Wird durch die Benutzeragenteneinstellungen bestimmt. Nicht alle Benutzeragenten legen dieses Element fest, und einige bieten auch die Funktion zum Ändern von HTTP_REFERER. Kurz gesagt, der Wert ist nicht vertrauenswürdig.

'HTTP_USER_AGENT': in der aktuellen Anfrage Header User-Agent: Der Inhalt des Elements, falls vorhanden. Diese Zeichenfolge gibt Informationen über den Benutzeragenten an, der auf diese Seite zugreift.

'REMOTE_ADDR': Durchsuchen Sie die aktuelle Seite Die IP-Adresse des Benutzers.

'REMOTE_HOST': Der Hostname des Benutzers, der die aktuelle Seite durchsucht. Die umgekehrte DNS-Auflösung hängt nicht von der REMOTE_ADDR des Benutzers ab.

'SERVER_PORT': Wird vom Web verwendet Server-Port. Der Standardwert ist „80“. Bei Verwendung einer sicheren SSL-Verbindung ist dieser Wert der vom Benutzer festgelegte HTTP-Port.

$_GET: Array von Variablen, die über URL-Parameter an das aktuelle Skript übergeben werden. GET wird über urldecode() übergeben.

$_POST: Variablen, die über die HTTP-POST-Methode an das aktuelle Skript übergeben werden Array. $_FILES: Ein Array von Elementen, die über HTTP POST in das aktuelle Skript hochgeladen wurden.

$_REQUEST – HTTP-Anforderungsvariable, wenn sie im Befehlszeilenmodus ausgeführt wird, Enthält

keine argv- und argc-Informationen; sie sind im Array

$_SERVER

vorhanden.

Da die Variablen in $_REQUEST über die Eingabemechanismen GET, POST und COOKIE an die Skriptdatei übergeben werden, können sie von Remote-Benutzern manipuliert werden und sind nicht vertrauenswürdig . Die Elemente dieses Arrays und ihre Reihenfolge hängen von der Konfiguration der Variables_order-Direktive von PHP ab.

$_SESSION: Array von SESSION-Variablen, die im aktuellen Skript verfügbar sind.

move_uploaded_file() – Verschieben Sie die hochgeladene Datei an einen neuen Speicherort; import_request_variables() – GET/POST/Cookie-Variablen in den globalen Bereich importieren; session_start() – eine neue Sitzung starten oder eine vorhandene Sitzung wiederverwenden;

$_ENV: Ein Array von Variablen, die über die Umgebung an das aktuelle Skript übergeben werden. Diese Variablen werden aus der Laufzeitumgebung des PHP-Parsers in den globalen Namespace von PHP importiert. Viele werden von Shells bereitgestellt, die die Ausführung von PHP unterstützen, und auf verschiedenen Systemen werden wahrscheinlich unterschiedliche Arten von Shells ausgeführt, sodass eine definitive Liste nicht möglich ist. Bitte überprüfen Sie Ihre Shell-Dokumentation auf eine Liste der definierten Umgebungsvariablen. Andere Umgebungsvariablen umfassen CGI-Variablen, unabhängig davon, ob PHP als Servermodul oder als CGI-Prozessor ausgeführt wird.

$_COOKIE: Variable, die über das HTTP-Cookies-Array an das aktuelle Skript übergeben wird. setcookie() – Sende ein Cookie

$php_errormsg – die vorherige Fehlermeldung; die Variable $php_errormsg enthält die neueste von PHP generierte Fehlermeldung . Diese Variable ist nur in dem Bereich verfügbar, in dem der Fehler aufgetreten ist, und erfordert die Aktivierung des Konfigurationselements track_errors (standardmäßig ist es deaktiviert). Wenn der Benutzer einen Fehlerhandler definiert (set_error_handler()) und <code>FALSE zurückgibt, wird $php_errormsg gesetzt.

<code><code>@strpos();
echo $php_errormsg; //Wrong parameter count for strpos()
?>
@strpos();
echo $php_errormsg; //Falsche Parameteranzahl für strpos()
?>

$HTTP_RAW_POST_DATA – Native POST-Daten. $HTTP_RAW_POST_DATA Enthält die von POST übermittelten Rohdaten. Siehe Always_populate_raw_post_data. Im Allgemeinen verwenden Sie php://input anstelle von $HTTP_RAW_POST_DATA.

$http_response_header – HTTP-Antwortheader: $ Das Array http_response_header ähnelt der Funktion get_headers(). Bei Verwendung eines HTTP-Wrappers wird $http_response_header mit HTTP-Antwortheadern gefüllt. $http_response_header wird im lokalen Bereich erstellt.

<code><span><?php<br />function get_contents() {<br /> file_get_contents("http://example.com");<br /> var_dump($http_response_header);<br />}<br />get_contents();<br />var_dump($http_response_header);<br />?></span><code>

function get_contents() {
file_get_contents("http://example.com");
var_dump($http_response_header);
}
get_contents();
/>var_dump($http_response_header);
?>

$argc – Anzahl der an das Skript übergebenen Argumente: Enthält die Anzahl der an das aktuelle Skript übergebenen Argumente, wenn es über die Befehlszeile ausgeführt wird. Der Dateiname des Skripts wird immer als Argument an das aktuelle Skript übergeben, daher ist der Mindestwert von $argc 1

. Diese Variable ist nur verfügbar, wenn register_argc_argv aktiviert ist.

$argv – Array von Argumenten, die an das Skript übergeben werden: Ein Array mit den Argumenten, die an das aktuelle Skript übergeben werden, wenn es über die Befehlszeile ausgeführt wird. Der erste Parameter ist immer der Dateiname des aktuellen Skripts, also ist $argv[0]

der Name der Skriptdatei. Diese Variable ist nur verfügbar, wenn register_argc_argv aktiviert ist.

  • getopt() – Aus der Befehlszeilenargumentliste abrufen Optionen

15. Vordefinierte Ausnahmen

Exception ist die Basisklasse für alle Ausnahmen. Klassenzusammenfassung:

Ausnahme {

/* Attributes*/

protectedstring$message

;

protectedint$code

;

protectedstring$file

;

protectedint$line

;

/* method*/

<code>$message<code>$code public__construct ([ string<code>$previous = "" [, int<code>NULL = 0 [, Exception =

]]] )

finalpublicstringgetMessage (void)

finalpublicExceptiongetPrevious (void)

finalpublicintgetCode (void)

finalpublicstringgetFile ( void )

finalpublicintgetLine ( void )

finalpublicarraygetTrace ( void )

finalpublic stringgetTraceAsString ( void )

publicstring__toString ( void )

finalprivatevoid__clone ( void )} Attribute: Nachricht: Ausnahmemeldungscode: Ausnahmedatei: Dateiname, in der die Ausnahme ausgelöst wird; die Zeilennummer der Datei

Exception::__construct – Ausnahmekonstruktor Parameter: message: Der Inhalt der ausgelösten Ausnahmemeldung. Code: Ausnahmecode. previous: Die vorherige Ausnahme in der Ausnahmekette.

Exception::getMessage – Inhalt der Ausnahmemeldung abrufen Parameter: Diese Funktion hat keine Parameter.

Exception::getPrevious – Gibt die vorherige Ausnahme in der Ausnahmekette zurück 参数:Exception::getPrevious — 返回异常链中的前一个异常。追踪异常,并循环打印。

<code><span><?php<br />class MyCustomException extends Exception {}<br />function doStuff() {<br /> try {<br /> throw new InvalidArgumentException("You are doing it wrong!", 112);<br /> } catch(Exception $e) {<br /> throw new MyCustomException("Something happend", 911, $e);<br /> }<br />}<br />try {<br /> doStuff();<br /> } catch(Exception $e) {<br /> do {<br /> printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e-                    >getCode(), get_class($e));<br>        } while($e = $e->getPrevious());<br>    }<br>?></span>

以上例程的输出类似于:

<span>/home/bjori/ex.php:8 Something happend (911) [MyCustomException]
/home/bjori/ex.php:6 You are doing it wrong! (112) [InvalidArgumentException]
</span>
Nach dem Login kopieren

Exception::getCode — 获取异常代码

参数:此函数没有参数。

Exception::getFile — 获取发生异常的程序文件名称

参数:此函数没有参数。

Exception::getLine — 获取发生异常的代码在文件中的行号

参数:此函数没有参数。

Exception::getTrace — 获取异常追踪信息

参数:此函数没有参数。

Exception::getTraceAsString — 获取字符串类型的异常追踪信息

参数:此函数没有参数。

Exception::__toString — 将异常对象转换为字符串

参数:此函数没有参数。

Exception::__clone — 异常克隆

参数:此函数没有参数。没有返回值,异常被不允许克隆。

ErrorException::__construct — 异常构造函数

参数:message:抛出的异常消息内容。code:异常代码。severity:异常的严重级别。filename:抛出异常所在的文件名。lineno:抛出异常所在的行号。previous:异常链中的前一个异常。

ErrorException::getSeverity — 获取异常的严重程度

参数:此函数没有参数。

<code><span><?php<br />try {<br /> throw new ErrorException("Exception message", 0, 75);<br />} catch(ErrorException $e) {<br /> echo "This exception severity is: " . $e->getSeverity();<br>}<br>?></span>

16.预定义接口

Traversable(遍历)接口:

检测一个类是否可以使用 foreach 进行遍历的接口。无法被单独实现的基本抽象接口。相反它必须由 IteratorAggregate 或 Iterator 接口实现。实现此接口的内建类可以使用 foreach 进行遍历而无需实现 IteratorAggregate 或 Iterator 接口。这是一个无法在 PHP 脚本中实现的内部引擎接口。IteratorAggregate 或 Iterator 接口可以用来代替它。

Traversable { }    这个接口没有任何方法,它的作用仅仅是作为所有可遍历类的基本接口。

Iterator(迭代器)接口:

可在内部迭代自己的外部迭代器或类的接口。

IteratorextendsTraversable {

    /* 方法 */

    abstractpublicmixedcurrent ( void )

    abstractpublicscalarkey ( void )

    abstractpublicvoidnext ( void )

    abstractpublicvoidrewind ( void )

    abstractpublicbooleanvalid ( void )

}

Iterator::current — 返回当前元素:没有参数,可返回任何类型。

Iterator::key — 返回当前元素的键:没有参数,成功返回标量,失败则返回null。

Iterator::next — 向前移动到下一个元素:没有参数,任何返回都将被忽略。此方法在 foreach 循环之后被调用。

Iterator::rewind — 返回到迭代器的第一个元素:当开始一个 foreach 循环时,这是第一个被调用的方法。它将会在 foreach 循环之后被调用。没有参数,任何返回都将被忽略。

Iterator::valid — 检查当前位置是否有效:此方法在 Iterator::rewind() 和 Iterator::next() 方法之后被调用以此用来检查当前位置是否有效。没有参数,返回将被转换为布尔型。成功时返回 <code>TRUE, 或者在失败时返回 <code>FALSE。

IteratorAggregate::getIterator — 获取一个外部迭代器:没有参数,实现了 Iterator 或 Traversable 接口的类的一个实例。

ArrayAccess(数组式访问)接口:

提供像访问数组一样访问对象的能力的接口。

ArrayAccess {

    /* 方法 */

    abstractpublicbooleanoffsetExists ( mixed<code>$offset )

    abstractpublicmixedoffsetGet ( mixed<code>$offset )

    abstractpublicvoidoffsetSet ( mixed<code>$offset , mixed<code>$value )

    abstractpublicvoidoffsetUnset ( mixed<code>$offset )

}

ArrayAccess::offsetExists — 检查一个偏移位置是否存在:对一个实现了 ArrayAccess 接口的对象使用 isset() 或 empty() 时,此方法将执行。当使用 empty() 并且仅当 ArrayAccess::offsetExists() 返回 <code>TRUE 时,ArrayAccess::offsetGet() 将被调用以检查是为否空。参数:offset 需要检查的偏移位置。成功时返回 <code>TRUE, 或者在失败时返回 <code>FALSE。如果一个非布尔型返回值被返回,将被转换为布尔型。

<code><span><?php<br />class obj implements arrayaccess {<br /> public function offsetSet($offset, $value) {<br /> var_dump(__METHOD__);<br />}<br />public function offsetExists($var) {<br /> var_dump(__METHOD__);<br /> if ($var == "foobar") {<br /> return true;<br /> }<br /> return false;<br />}<br />public function offsetUnset($var) {<br /> var_dump(__METHOD__);<br /> }<br />public function offsetGet($var) {<br /> var_dump(__METHOD__);<br /> return "value";<br /> }<br />}<br />$obj = new obj;<br />echo "Runs obj::offsetExists()\n";<br />var_dump(isset($obj["foobar"]));<br />echo "\nRuns obj::offsetExists() and obj::offsetGet()\n";<br />var_dump(empty($obj["foobar"]));<br />echo "\nRuns obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get\n";<br />var_dump(empty($obj["foobaz"]));<br />?></span>

以上例程的输出类似于:

<span>Runs obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Runs obj::offsetExists() and obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Runs obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get
string(17) "obj::offsetExists"
bool(true)
</span>
Nach dem Login kopieren

ArrayAccess::offsetGet — 获取一个偏移位置的值:当检查一个偏移位置是否为 empty() 时,此方法被执行。

Parameter: Offset Die zu erhaltende Offset-Position. Rückgabewert: Jeder Typ kann zurückgegeben werden.

ArrayAccess::offsetSet – Legen Sie den Wert einer Offset-Position fest: Parameter: offset Die festzulegende Offset-Position. Wert Der Wert, der festgelegt werden muss. Kein Rückgabewert.

Wenn kein anderer Wert verfügbar ist, wird der Parameter <code>offset auf <code>NULL。

gesetzt

ArrayAccess::offsetUnset – Setzt den Wert einer Offset-Position zurück: Diese Methode wird nicht aufgerufen, wenn (unset) für die Typkonvertierung verwendet wird.

<code>参数:offset Offset-Position, die zurückgesetzt werden soll. Kein Rückgabewert.

Serialisierungsschnittstelle:

Serializable::serialize – String-Darstellung des Objekts. Diese Methode fungiert als Objektdestruktor. Nach dieser Methode wird die Methode __destruct() nicht aufgerufen. Diese Funktion hat keine Parameter und gibt eine Zeichenfolgendarstellung des Objekts oder <code>NULL zurück.

Serializable::unserialize – Objekt erstellen. Diese Methode übernimmt die Rolle des Objektkonstruktors. Nach dieser Methode wird __construct() nicht aufgerufen. Parameter: String-Darstellung des serialisierten Objekts.

Closure::__construct – Konstruktor, der verwendet wird, um die Instanziierung zu verhindern. Diese Methode wird nur verwendet, um die Instanziierung eines Objekts der Closure-Klasse zu deaktivieren. Die Erstellungsmethode von Objekten dieser Klasse ist auf der Seite „Anonyme Funktionen“ beschrieben. Diese Funktion hat keine Parameter und keinen Rückgabewert.

Closure::bind – Kopieren Sie einen Abschluss und binden Sie das angegebene $this-Objekt an den Klassenbereich. Diese Methode ist eine statische Version von Closure::bindTo().

Parameter: Schließung muss gebunden sein Eine bestimmte anonyme Funktion. newthis erfordert ein Objekt, das an eine anonyme Funktion gebunden ist, oder <code>NULL erstellt einen ungebundenen Abschluss. newscope der Klassenbereich, den Sie an den Abschluss binden möchten, oder „statisch“, was unverändert bedeutet. Wenn ein Objekt übergeben wird, wird der Typname des Objekts verwendet. Der Klassenbereich wird verwendet, um die Sichtbarkeit privater, geschützter Methoden des $this-Objekts innerhalb des Abschlusses zu bestimmen. Gibt ein neues Abschlussobjekt oder bei einem Fehler die Klasse <code>FALSE

<code><code>class A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A::$sfoo;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "n";    //1
echo $bcl2(), "n";    //2
?>
zurück A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A: :$sfoo ;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = Closure::bind ($cl1 , null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "n" //1
echo $bcl2(), "n"; //2
?>

Closure::bindTo – Kopieren Sie das aktuelle Abschlussobjekt und binden Sie das angegebene $this-Objekt und den angegebenen Klassenbereich. Erstellen Sie eine anonyme Funktion und geben Sie sie zurück, die denselben Funktionskörper wie das aktuelle Objekt hat und dieselben Variablen bindet, aber verschiedene Objekte oder einen neuen Klassenbereich binden kann. Das „gebundene Objekt“ bestimmt den Wert von $this<code>newscope im Funktionskörper, und der „Klassenbereich“ stellt einen Typ dar und bestimmt, welche privaten und geschützten Methoden in dieser anonymen Funktion aufgerufen werden können. Mit anderen Worten, die Methoden, die $this zu diesem Zeitpunkt aufrufen kann, sind dieselben wie die Mitgliedsfunktionen der Klasse <code>newthis. Statische Abschlüsse können keine gebundenen Objekte haben (der Wert des Parameters <code>NULL sollte auf gesetzt sein), aber ihr Klassenbereich kann dennoch mit der Methode bubdTo geändert werden. Wenn Sie nur eine anonyme Funktion kopieren möchten, können Sie stattdessen das Klonen verwenden.

Parameter: newthis ist ein Objekt, das an die anonyme Funktion gebunden ist, oder <code>NULL zum Aufheben der Bindung. newscope ordnet sich dem Klassenbereich der anonymen Funktion zu, oder „static“ behält den aktuellen Status bei. Handelt es sich um ein Objekt, wird der Typ dieses Objekts im Rahmen der Experience-Klasse verwendet. Dies bestimmt die Sichtbarkeit geschützter, privater Mitgliedsmethoden des gebundenen Objekts. Rückgabewert: Gibt das neu erstellte Abschlussobjekt zurück oder bei Fehler <code>FALSE

<code><code>class A {
function __construct($val) {
$this->val = $val;
    }
    function getClosure() {
        //returns closure bound to this object and scope
        return function() { return $this->val; };
    }
}
$ob1 = new A(1);
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "n";    //1
$cl = $cl->bindTo($ob2);
echo $cl(), "n";    //2
?>
Klasse A {
Funktion __construct($val) {
$this->val = $val;
}
Funktion getClosure() {
/ /gibt den an dieses Objekt und Umfang gebundenen Abschluss zurück
return function() { return $this->val };
}
}
$ob1 = new A( 1) ;
$ob2 = new A(2);
$cl = $ob1->getClosure();
echo $cl(), "n" //1$cl = $cl->bindTo($ob2);
echo $cl(), "n" //2
?>

17. Kontextoptionen und Parameter

Setzen Sie den Socket Die Kontextoption ist für alle Wrapper-Protokolle verfügbar, die auf Sockets funktionieren, wie tcp, http und ftp.

<code><span><?php<br />// connect to the internet using the '192.168.0.100' IP<br />$opts = array(<br /> 'socket' => array(<br>    'bindto' => '192.168.0.100:0',<br>    ),<br>);<br>// connect to the internet using the '192.168.0.100' IP and port '7000'<br>$opts = array(<br>    'socket' => array(<br>    'bindto' => '192.168.0.100:7000',<br>    ),<br>);<br>// connect to the internet using port '7000'<br>$opts = array(<br>    'socket' => array(<br>    'bindto' => '0:7000',<br>    ),<br>);<br>// create the context...<br>$context = stream_context_create($opts);<br>// ...and use it to fetch the data<br>echo file_get_contents('http://www.example.com', false, $context);<br>?></span><code>

// Stellen Sie mit dem ' eine Verbindung zum Internet her. 192.168.0.100' IP
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);
// Stellen Sie über die IP „192.168.0.100“ und den Port „7000“ eine Verbindung zum Internet her
$opts = array(
'socket' = > array(
'bindto' => '192.168.0.100:7000',
),
);
// Stellen Sie über Port '7000' eine Verbindung zum Internet her$ opts = array(
'socket' => array(
'bindto' => '0:7000',
),
);
// Erstellen Sie den Kontext...
$context = stream_context_create($opts);
// ...und verwenden Sie ihn, um die Daten abzurufen
echo file_get_contents('http:/ /www.example .com', false, $context);
?>

HTTP-Kontextoptionen – Eine Liste von Optionen für den HTTP-Kontext. Kontextoptionen für die Transportprotokolle http:// und https://

. Transporte. Optionale Optionen:

<code>methodZeichenfolge <code>GET, <code>POST oder eine andere vom Remote-Server unterstützte HTTP-Methode. Der Standardwert ist <code>GET.
<code>headerstring Zusätzlicher Header, der während der Anfrage gesendet wird. Der Wert in dieser Option überschreibt andere Werte (z. B. User-agent:, Host: und Authentication:).
<code>user_agentstring Der Wert des Headers User-Agent:, der gesendet werden soll. Wenn in der Kontextoption header oben kein Benutzeragent angegeben ist, wird dieser Wert verwendet. Standardmäßig wird der in php.ini festgelegte user_agent verwendet.
<code>contentstring Zusätzliche Daten, die nach dem Header gesendet werden sollen. Normalerweise werden POST- oder PUT-Anfragen verwendet.
<code>proxystring URI Die Adresse des angegebenen Proxyservers. (z. B. tcp://proxy.example.com:5100).
<code>request_fulluriboolean Wenn auf <code>TRUE gesetzt, wird es beim Erstellen des verwendet request Verwenden Sie den gesamten URI. (d. h. GET http://www.example.com/path/to/file.html HTTP/1.0). Obwohl es sich hierbei um ein nicht standardmäßiges Anforderungsformat handelt, ist es für einige Proxyserver erforderlich. Der Standardwert ist <code>FALSE.
<code>follow_locationGanzzahl, gefolgt von der Umleitung des Location-Headers. Zum Deaktivieren auf 0 einstellen. Der Standardwert ist 1.
<code>max_redirectsGanzzahl Die maximale Anzahl der Weiterleitungen, denen gefolgt werden soll. Ein Wert von 1 oder weniger bedeutet, dass keine Weiterleitungen verfolgt werden. Der Standardwert ist 20.
<code>protocol_versionFloat-HTTP-Protokollversion. Der Standardwert ist 1,0. Versionen vor PHP 5.3.0 implementierten keine Chunked-Transfer-Dekodierung. Wenn dieser Wert auf 1.1 festgelegt ist, liegt die Kompatibilität mit 1.1 in Ihrer Verantwortung.
<code>timeoutFloat-Lese-Timeout, in Sekunden (s), angegeben mit Float (z. B. 10,5). Standardmäßig wird der in php.ini festgelegte default_socket_timeout verwendet.
<code>ignore_errorsboolean Erhalten Sie weiterhin den Inhalt, auch wenn ein Fehlerstatuscode vorliegt. Der Standardwert ist <code>FALSE.

FTP-Kontextoptionen – Liste der FTP-Kontextoptionen

SSL-Kontextoptionen – Liste der SSL-Kontextoptionen. ssl:// und tls:// Liste der Transportprotokoll-Kontextoptionen. Optionen: Viele.

CURL-Kontextoptionen – Liste der CURL-Kontextoptionen. CURL-Kontextoptionen sind verfügbar, wenn die CURL-Erweiterung kompiliert wird (über die Konfigurationsoption --with-curlwrappers). Optional:

<code>methodZeichenfolge <code>GET, <code>POST oder andere vom Remote-Server unterstützte HTTP-Methoden . Der Standardwert ist <code>GET.
<code>headerstring Zusätzliche Anforderungsheader. Dieser Wert überschreibt den durch andere Optionen festgelegten Wert (z. B.: User-agent:, Host:, , Authentication:).
<code>user_agentstring Legt den Wert des User-Agent-Headers in der Anfrage fest. Die Standardeinstellung ist die user_agent-Einstellung in php.ini.
<code>contentstring Zusätzliche Daten, die nach dem Header gesendet werden. Diese Option wird in <code>GET- und <code>HEAD-Anfragen nicht verwendet.
<code>proxyString-URI, der zur Angabe der Adresse des Proxyservers verwendet wird (zum Beispiel tcp://proxy.example.com:5100).
<code>max_redirectsGanzzahl Die maximale Anzahl von Weiterleitungen. 1 oder kleiner bedeutet, dass der Weiterleitung nicht gefolgt wird. Der Standardwert ist 20.
<code>curl_verify_ssl_hostBoolescher Verifizierungsserver. Standardmäßig <code>FALSE。Diese Option ist sowohl im HTTP- als auch im FTP-Protokoll verfügbar.
<code>curl_verify_ssl_peerboolean Erfordert eine Überprüfung des verwendeten SSL-Zertifikats. Standardmäßig <code>FALSE。Diese Option ist sowohl im HTTP- als auch im FTP-Protokoll verfügbar. Holen Sie sich eine Seite und senden Sie Daten als POST:

<code><span><?php<br />$postdata = http_build_query(<br /> array(<br /> 'var1' => 'some content',<br>        'var2' => 'doh'<br>        )<br>);<br>$opts = array('http' =><br>    array(<br>        'method' => 'POST',<br>        'header' => 'Content-type: application/x-www-form-urlencoded',<br>        'content' => $postdata<br>        )<br>);<br>$context = stream_context_create($opts);<br>$result = file_get_contents('http://example.com/submit.php', false, $context);<br>?></span>

Phar-Kontextoptionen – Liste der Phar-Kontextoptionen. phar:// Kontextoptionen für den Wrapper. Optional: <code>compressint Eine der Phar-Komprimierungskonstanten. <code>metadatagemischte Phar-Metadaten. Siehe Phar::setMetadata().

Kontextparameter – Liste der Kontextparameter. Diese Parameter (Parameter) können auf den von der Funktion stream_context_set_params() zurückgegebenen Kontext gesetzt werden. Parameter: <code>notificationcallable Wenn ein Ereignis in einem Stream auftritt, wird das Callable aufgerufen.

18. Unterstützte Protokolle und Kapselungsprotokolle

Datei :// – Greifen Sie auf das lokale Dateisystem zu. Dateisystem ist das von PHP verwendete Standard-Wrapper-Protokoll und macht das lokale Dateisystem verfügbar. Wenn ein relativer Pfad angegeben wird (ein Pfad, der nicht mit /, , \ oder einem Windows-Laufwerksbuchstaben beginnt), basiert der angegebene Pfad auf dem aktuellen Arbeitsverzeichnis. In vielen Fällen ist dies das Verzeichnis, in dem sich das Skript befindet, sofern es nicht geändert wurde. Bei Verwendung der CLI ist das Verzeichnis standardmäßig das Verzeichnis, in dem das Skript aufgerufen wird.

In bestimmten Funktionen, wie fopen() und file_get_contents(), wird optional auch nach include_path gesucht ein relativer Pfad.

tr> table>

http:// -- https:// – Greifen Sie auf die HTTP(s)-URL zu. Ermöglicht den schreibgeschützten Zugriff auf eine Datei oder Ressource über die HTTP 1.0-GET-Methode. HTTP-Anfragen werden von einem Host:-Header begleitet, um die Kompatibilität mit domänennamenbasierten virtuellen Hosts zu gewährleisten. Wenn die Zeichenfolge „user_agent“ in Ihrer php.ini-Datei oder Ihrem Byte-Stream-Kontext konfiguriert ist, wird sie auch in die Anfrage einbezogen. Der Datenstrom ermöglicht das Lesen des Körpers der Ressource, und die Header werden in der Variablen $http_response_header gespeichert.

Wenn Sie wissen möchten, von welcher URL die Dokumentressource stammt (nach der Verarbeitung aller Weiterleitungen), müssen Sie die Reihe der zurückgegebenen Antwortheader verarbeiten durch den Datenfluss (Antwort-Header).

封装协议概要
属性 支持
受 allow_url_fopen 影响 No
允许读取 Yes
允许写入 Yes
允许添加 Yes
允许同时读和写 Yes
支持 stat() Yes
支持 unlink() Yes
支持 rename() Yes
支持 mkdir() Yes
支持 rmdir() Yes
Zusammenfassung des Kapselungsprotokolls
Attribute Unterstützt
Betroffen vonallow_url_fopen Nein
Lesen zulassen Ja
Schreiben zulassen Ja
Hinzufügen zulassen Ja
Gleichzeitiges Lesen und Schreiben zulassen Ja
Support stat() Ja
Unterstützung unlink() Ja
Unterstützung rename() Ja
Unterstützt mkdir() Ja td>
Unterstützt rmdir() Ja
table>ftp:// – ftps:// – Zugriff auf FTP(s)-URLs. Ermöglicht das Lesen vorhandener Dateien per FTP sowie das Erstellen neuer Dateien. Wenn der Server den passiven FTP-Modus nicht unterstützt, schlägt die Verbindung fehl. Nach dem Öffnen einer Datei können Sie sowohl lesen als auch schreiben, jedoch nicht gleichzeitig. Wenn die Remote-Datei bereits auf dem FTP-Server vorhanden ist und Sie versuchen, die Datei zu öffnen und zu schreiben, ohne die Kontextoption überschreiben anzugeben, schlägt die Verbindung fehl. Wenn Sie eine vorhandene Datei per FTP überschreiben möchten, geben Sie die Option Überschreiben des Kontexts zum Öffnen und Schreiben an. Alternativ kann stattdessen auch eine FTP-Erweiterung verwendet werden. Wenn Sie die from-Direktive in php.ini festlegen, wird dieser Wert als Passwort für anonymes FTP verwendet.
封装协议概要
属性 支持
受 allow_url_fopen 限制 Yes
允许读取 Yes
允许写入 No
允许添加 No
允许同时读和写 N/A
支持 stat() No
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No
Zusammenfassung des Kapselungsprotokolls

Attribute

Unterstützt

Eingeschränkt durchallow_url_fopen Ja

Lesen zulassen

Ja

Schreiben zulassen Nein
Hinzufügen zulassen Nein
Gleichzeitiges Lesen und Schreiben zulassen N/A td>
Support stat() Nein

Unlink() unterstützen

Nein

封装协议概要
属性 PHP 4 PHP 5
受 allow_url_fopen 影响 Yes Yes
允许读取 Yes Yes
允许写入 Yes (仅支持新文件) Yes (新文件/启用 <code>overwrite 后已存在的文件)
允许添加 No Yes
允许同时读和写 No No
支持 stat() No 自 5.0.0 起:仅仅 filesize()、 filetype()、 file_exists()、 is_file() 和 is_dir()。 自 PHP 5.1.0 起: filemtime()。
支持 unlink() No Yes
支持 rename() No Yes
支持 mkdir() No Yes
支持 rmdir() No Yes
Umbenennen unterstützen() td> Nein
Support mkdir() Nein td>
Unterstützt rmdir() Nein
Seit 5.0.0: nur filesize(), filetype(), file_exists(), is_file() und is_dir(). Seit PHP 5.1.0: filemtime(). Ja
Zusammenfassung des Kapselungsprotokolls
Attribute PHP 4 PHP 5
Betroffen vonallow_url_fopen Ja Ja
Lesen zulassen Ja Ja
Schreiben zulassen Ja (unterstützt nur neue Dateien) Ja (neue Dateien/vorhandene Dateien nach Aktivierung von <code>überschreiben)
Hinzufügen zulassen Nein Ja
Gleichzeitiges Lesen und Schreiben zulassen Nein Nein
Support stat() Nein
Support unlink() Nein Ja
Unterstützung rename() Nein Ja
Unterstützt mkdir() Nein
Unterstützt rmdir() Nein Ja

php:// – Greifen Sie auf verschiedene Eingabe-/Ausgabeströme (E/A-Ströme) zu. PHP bietet eine Reihe verschiedener Eingabe-/Ausgabeströme (IO), die den Zugriff auf die Eingabe- und Ausgabeströme von PHP, Standard-Eingabe-, Ausgabe- und Fehlerdeskriptoren, speicherinterne, festplattengestützte temporäre Dateiströme und Filter ermöglichen, die auf andere Datenströme angewendet werden können Lese-/Schreib-Dateiressourcen.

php://stdin, php://stdout und php://stderr ermöglichen den direkten Zugriff auf die entsprechenden Eingabe- oder Ausgabeströme des PHP-Prozesses. Der Datenstrom verweist auf den kopierten Dateideskriptor. Wenn Sie also php://stdin öffnen und dann schließen, wird nur die Kopie geschlossen und das tatsächlich referenzierte <code>STDIN ist davon nicht betroffen. Beachten Sie, dass das Verhalten von PHP in diesem Bereich bis PHP 5.2.1 fehlerhaft war. Es wird empfohlen, einfach die Konstanten <code>STDIN, <code>STDOUT und <code>STDERR zu verwenden, anstatt diese Wrapper manuell zu öffnen.

php://stdin ist schreibgeschützt, php://stdout und php://stderr wird nur geschrieben.

php://input Ist ein schreibgeschützter Stream, der Zugriff auf die angeforderten Rohdaten bietet. Bei POST-Anfragen ist es besser, php://input anstelle von $HTTP_RAW_POST_DATA zu verwenden, da es nicht auf das spezifische ankommt php.ini Befehl. Darüber hinaus wird in diesem Fall $HTTP_RAW_POST_DATA standardmäßig nicht ausgefüllt, was möglicherweise weniger Speicher erfordert als die Aktivierung von Always_populate_raw_post_data. enctype="multipart/form-data" Wenn php://input ungültig ist.

php://output ist ein schreibgeschützter Datenstrom, der es Ihnen ermöglicht, auf die gleiche Weise wie Drucken und Echo in den Ausgabepuffer zu schreiben.

php://fd Ermöglicht den direkten Zugriff auf den angegebenen Dateideskriptor. Beispielsweise bezieht sich php://fd/3 auf den Dateideskriptor 3.

php://memory Und php://temp ist ein Datei-Wrapper-ähnlicher Datenstrom, der das Lesen und Schreiben temporärer Daten ermöglicht. Der einzige Unterschied zwischen den beiden besteht darin, dass php://memory Daten immer im Speicher speichert, während php://temp Daten speichert, nachdem die Speichermenge einen vordefinierten Grenzwert erreicht ( Der Standardwert ist 2 MB) und in einer temporären Datei gespeichert. Der Speicherort der temporären Datei wird auf die gleiche Weise wie bei sys_get_temp_dir() ermittelt. Das Speicherlimit von php://temp kann durch Hinzufügen von /maxmemory:NN gesteuert werden. NN ist die maximale Datenmenge, die im Speicher gespeichert wird Wird der Betrag überschritten, wird eine temporäre Datei verwendet.

php://filter ist eine Meta Wrapper zum Filtern von Anwendungen beim Öffnen eines Datenstroms. Dies ist nützlich für All-in-One-Dateifunktionen wie readfile(), file() und file_get_contents(), bei denen keine Möglichkeit besteht, zusätzliche Filter anzuwenden, bevor der Stream-Inhalt gelesen wird. Das Ziel php://filter verwendet die folgenden Parameter als Teil seines Pfads. Auf einem Pfad können zusammengesetzte Filterketten angegeben werden.

封装协议摘要(针对 php://filter,参考被筛选的封装器。)
属性 支持
首先于 allow_url_fopen No
首先于 allow_url_include 仅 php://input、 php://stdin、 php://memory 和 php://temp
允许读取 仅 php://stdin、 php://input、 php://fd、 php://memory 和 php://temp
允许写入 仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和php://temp
允许追加 仅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和php://temp(等于写入)
允许同时读写 仅 php://fd、 php://memory 和 php://temp
支持 stat() 仅 php://memory 和 php://temp
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No
仅仅支持 stream_select() php://stdin、 php://stdout、 php://stderr、 php://fd 和 php://temp

zlib:// - - bzip2:// -- zip:// – Komprimierter Stream. zlib: PHP 4.0.4 - PHP 4.2.3 (unterstützt nur Systeme mit fopencookie)

compress.zlib: / / und compress.bzip2:// PHP 4.3.0 und höher

zlib: funktioniert ähnlich wie gzopen() , Sein Datenstrom kann aber auch von fread() und anderen Dateisystemfunktionen verwendet werden. Dies ist seit PHP 4.3.0 veraltet, da es mit anderen Dateinamen mit „:“-Zeichen verwechselt wird. Bitte verwenden Sie stattdessen compress.zlib://.

compress.zlib://, compress.bzip2:// sind gleich gzopen() und bzopen(). Und kann auf Systemen verwendet werden, die Fopencookie nicht unterstützen.

ZIP-Erweiterung registriert zip: Kapselungsprotokoll. Optional

  • compress.zlib://file.gz
  • komprimieren .bzip2://file.bz2
  • zip://archive.zip#dir/file.txt

data:// – Daten (RFC 2397) . Verwendung: data://text/plain;base64,

封装协议摘要
属性 支持
受限于 allow_url_fopen No
受限于 allow_url_include Yes
允许读取 Yes
允许写入 No
允许追加 No
允许同时读写 No
支持 stat() No
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No
Zusammenfassung des Kapselungsprotokolls

Attribute

Unterstützung

Vorbehaltlichallow_url_fopen

Nein
Vorbehaltlich „allow_url_include“ Ja
Lesen zulassen

Ja

Schreiben zulassen

Nein

<code>Anhängen zulassen<span></span>
Nein
Gleichzeitiges Lesen und Schreiben zulassen Nein
Support stat() Nein
Support unlink() Nein
Support rename() Nein td>
Unterstützt mkdir() Nein
RMdir() unterstützen Nein
Den Inhalt von data:// drucken:
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage