ホームページ  >  記事  >  バックエンド開発  >  PHP中国語マニュアル2

PHP中国語マニュアル2

WBOY
WBOYオリジナル
2016-07-30 13:31:541038ブラウズ

<code><code><code><code>

11.异常处理

<code><code>

用户可以用自定义的异常处理类来扩展 PHP 内置的异常处理类。以下的代码说明了在内置的异常处理类中,哪些属性和方法在子类中是可访问和可继承的。译者注:以下这段代码只为说明内置异常处理类的结构,它并不是一段有实际意义的可用代码。

<code><?php<br />class Exception{<br />protected $message = 'Unknown exception'; // 异常信息<br />protected $code = 0; // 用户自定义异常代码<br />protected $file; // 发生异常的文件名<br />protected $line; // 发生异常的代码行号<br />function __construct($message = null, $code = 0);<br />final function getMessage(); // 返回异常信息<br />final function getCode(); // 返回异常代码<br />final function getFile(); // 返回发生异常的文件名<br />final function getLine(); // 返回发生异常的代码行号<br />final function getTrace(); // backtrace() 数组<br />final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息<br />/* 可重载的方法 */<br />function __toString(); // 可输出的字符串<br />}<br />?>

如果使用自定义的类来扩展内置异常处理类,并且要重新定义构造函数的话,建议同时调用 parent::__construct()来检查所有的变量是否已被赋值。当对象要输出字符串的时候,可以重载 __toString() 并自定义输出的样式。

扩展 PHP 内置的异常处理类

<code><?php<br />// 自定义一个异常处理类<br />class MyException extends Exception{ // 重定义构造器使 message 变为必须被指定的属性<br /> public function __construct($message, $code = 0) {<br /> // 自定义的代码 // 确保所有变量都被正确赋值<br /> parent::__construct($message, $code);<br />}<br />// 自定义字符串输出的样式<br />public function __toString() {<br /> return __CLASS__ . ": [{$this->code}]: {$this->message}n";<br>}<br>public function customFunction() {<br>    echo "A Custom function for this type of exceptionn";<br>    }<br>}<br><span>//</span>创建一个用于测试异常处理机制的类<br>class TestException{<br>public $var;<br>const THROW_NONE = 0;<br>const THROW_CUSTOM = 1;<br>const THROW_DEFAULT = 2;<br>function __construct($avalue = self::THROW_NONE) {<br>switch ($avalue) {<br>case self::THROW_CUSTOM:<br>// 抛出自定义异常<br>throw new MyException('1 is an invalid parameter', 5);<br>break;<br>case self::THROW_DEFAULT:<br>// 抛出默认的异常<br>throw new Exception('2 isnt allowed as a parameter', 6);<br>break;<br>default:<br>// 没有异常的情况下,创建一个对象<br>$this->var = $avalue;<br>break;<br>}<br>}<br>}<br>// 例子 1<br>try {<br>$o = new TestException(TestException::THROW_CUSTOM);<br>} catch (MyException $e) { // 捕获异常<br>echo "Caught my exceptionn", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 被忽略<br>echo "Caught Default Exceptionn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 2<br>try {<br>$o = new TestException(TestException::THROW_DEFAULT);<br>} catch (MyException $e) { // 不能匹配异常的种类,被忽略<br>echo "Caught my exceptionn", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 捕获异常<br>echo "Caught Default Exceptionn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 3<br>try {<br>$o = new TestException(TestException::THROW_CUSTOM);<br>} catch (Exception $e) { // 捕获异常<br>echo "Default Exception caughtn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 4<br>try {<br>$o = new TestException();<br>} catch (Exception $e) { // 没有异常,被忽略<br>echo "Default Exception caughtn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>?>

11. 例外処理<code><code>ユーザーは、カスタマイズされた例外処理クラスを使用して、 PHP の組み込み例外処理クラスを拡張します。次のコードは、組み込み例外処理クラスのどのプロパティとメソッドがサブクラスでアクセス可能で継承可能であるかを示しています。翻訳者注: 次のコードは、組み込みの例外処理クラスの構造を説明するためだけのものであり、実際的な意味を持つ使用可能なコードではありません。 🎜🎜🎜🎜🎜🎜🎜🎜🎜<code><?php<br />class Exception{<br />protected $message = '不明な例外' //例外メッセージ<br />protected $code = 0; ; //ユーザー定義の例外コード<br />protected $file; //例外が発生したファイル名<br />protected $line; //例外が発生したコードの行番号__construct($message = null , $code = 0);<br />final function getMessage() // 例外情報を返す<br />final function getCode() // 例外コードを返す<br />final function getFile (); // 例外が発生したファイル名を返します<br />final function getLine() // 例外が発生したコードの行番号を返します<br />final function getTrace() 配列<br />final function getTraceAsString(); // 文字列にフォーマットされた GetTrace() 情報<br />/* オーバーロード可能なメソッド*/<br />function __toString() // 出力可能な文字列<br /> }<br / >?>🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜カスタム クラスを使用して組み込み例外処理クラスを拡張し、コンストラクターを再定義する場合は、parent:: を呼び出すことをお勧めします。 __construct() を同時に実行して、すべての変数に値が割り当てられているかどうかを確認します。オブジェクトが文字列を出力したい場合は、__toString() をオーバーロードして出力スタイルをカスタマイズできます。 🎜🎜🎜🎜🎜🎜🎜🎜🎜PHPの組み込み例外処理クラスを拡張する🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code><?php<br />// 例外処理クラスをカスタマイズする<br /> class MyException extends Exception{ // コンストラクターを再定義して、メッセージを指定する必要があるプロパティにします<br /> public function __construct($message, $code = 0) {<br /> // カスタマイズされたコード // すべての変数が正しく割り当てられました<br />parent::__construct($message, $code);<br />}<br />// 文字列出力スタイルをカスタマイズします<br />public function __toString() { <br /> return __CLASS__ . ": [{$this->code}]: {$this->message}n";<br>}<br>public function customFunction() {<br> echo "のカスタム関数このタイプの例外n";<br> }<br>}<br>🎜//🎜例外処理メカニズムをテストするためのクラスを作成します<br>class TestException{<br>public $var;<br>const THROW_NONE = 0;<br>const THROW_CUSTOM = 1;<br>const THROW_DEFAULT = 2;<br>function __construct($avalue = self::THROW_NONE) {<br>switch ($avalue) {<br>case self::THROW_CUSTOM:<br>//カスタム例外をスローします<br>throw new MyException('1 は無効なパラメータ', 5);<br>break;<br> case self::THROW_DEFAULT:<br>//デフォルトの例外をスローします<br>throw new Exception('2 はパラメータとして許可されません', 6);<br>break ;<br>default:<br>// 例外がない場合はオブジェクトを作成します<br>$this->var = $avalue;<br>break;<br>}<br>}<br>}<br>// 例 1<br>try {<br>$o = new TestException(TestException::THROW_CUSTOM);<br>} catch (MyException $e) { // 例外をキャッチ<br>echo "キャッチ私の例外n", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 無視されました<br> echo "デフォルト例外をキャッチしました", $e;}<br>// 後続のコードを実行します<br>var_dump($o);<br>echo "nn";<br>// 例 2<br>try {<br> $o = new TestException(TestException::THROW_DEFAULT);<br>} catch (MyException $e) { // 例外の種類に一致しないため、無視されます<br>echo "例外をキャッチしました", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 例外をキャッチ<br>echo "デフォルト例外をキャッチ", $ e;<br>}<br> //後続のコードを実行します<br>var_dump($o);<br>echo "nn";<br>// 例 3<br>try {$o = new TestException(TestException: :THROW_CUSTOM);<br>} catch (Exception $e) { // 例外をキャッチ<br>echo "Default Exception catchn", $e;<br>} <br>// 後続のコードを実行<br> />var_dump($o);<br>echo "nn";<br>// 例 4<br>try {<br>$o = new TestException();<br>} catch ( Exception $e) { // 例外なし、無視<br>echo "Default Exception catchn", $e;<br>}<br>// フォローアップ実行コード<br>var_dump($o) ;<br>echo "nn";<br>?>🎜🎜🎜🎜🎜🎜🎜12.<code><code>

生成器允许你在 foreach代码块中写代码来迭代一组数据而不需要在内存中创建一个数组, 那会使你的内存达到上限,或者会占据可观的处理时间。相反,你可以写一个生成器函数,就像一个普通的自定义函数一样, 和普通函数只返回一次不同的是, 生成器可以根据需要 yield 多次,以便生成需要迭代的值。

<code><?php<br />function xrange($start, $limit, $step = 1) {<br /> if ($start < $limit) {<br /> if ($step <= 0) {<br /> throw new LogicException('Step must be +ve');<br />}<br /> for ($i = $start; $i <= $limit; $i += $step) {<br /> yield $i;<br /> }<br /> } else {<br /> if ($step >= 0) {<br>            throw new LogicException('Step must be -ve');<br>        }<br>        for ($i = $start; $i >= $limit; $i += $step) {<br>            yield $i;<br>        }<br>    }<br>}<br>/* Note that both range() and xrange() result in the same<br>* output below. */<br>echo 'Single digit odd numbers from range(): ';<br>foreach (range(1, 9, 2) as $number) {<br>    echo "$number ";<br>}<br>echo "n";<br>echo 'Single digit odd numbers from xrange(): ';<br>foreach (xrange(1, 9, 2) as $number) {<br>    echo "$number ";<br>}<br>?>

Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9 

Comparing generators with Iterator objects

The primary advantage of generators is their simplicity. Much less boilerplate code has to be written compared to implementing anIterator class, and the code is generally much more readable. For example, the following function and class are equivalent:

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

13.<code><code>

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

<code>

如果具有引用的数组被拷贝,其值不会解除引用。对于数组传值给函数也是如此。如果对一个未定义的变量进行引用赋值、引用参数传递或引用返回,则会自动创建该变量。

function foo(&$var) { }

foo($a); // $a is "created" and assigned to null

$b = array();

foo($b['b']);

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

$c = new StdClass;

foo($c->d);

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

?>

同样的语法可以用在函数中,它返回引用,以及用在 new运算符中(PHP 4.0.4 以及以后版本):

<code><span><?php<br />$bar =& new fooclass();<br />$foo =& find_var($bar);<br />?></span>

如果在一个函数内部给一个声明为 global的变量赋于一个引用,该引用只在函数内部可见。可以通过使用 $GLOBALS 数组避免这一点。在函数内引用全局变量:

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

把 global $var; 当成是 $var =& $GLOBALS['var']; 的简写。从而将其它引用赋给 $var 只改变了本地变量的引用。

如果在 foreach语句中给一个具有引用的变量赋值,被引用的对象也被改变。

$ref = 0;

$row =& $ref;

foreach (array(1, 2, 3) as $row) {// do something}

echo $ref; // 3 - last element of the iterated array

?>

引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量并且该变量在呼叫范围内引用了同一个内容来实现的。例如:

<code><span><?php<br />function foo(&$var){<br /> $var++;<br />}<br />$a=5;<br />foo($a);<br />?></span>

将使 $a 变成 6。这是因为在 foo 函数中变量 $var 指向了和 $a 指向的同一个内容。更多详细解释见引用传递。

引用做的第三件事是引用返回。引用不是指针。

可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

<code><span><?php<br />function foo(&$var){<br />$var++;<br />}<br />$a=5;<br />foo($a);// $a is 6 here<br />?></span>

関数呼び出しには参照シンボルはなく、関数定義のみにあることに注意してください。パラメーターを正しく参照渡しするには関数定義だけで十分です

以下は参照渡しできます:

変数 (foo($a); など) 新しいステートメント (例えば foobar()); 関数から返される参照

他の式は参照渡しできません。結果は未定義です。

<code>

function bar(){ // 欠落している &
$a = 5;
return $a に注意してください;
}
foo(bar()); // PHP 5.0.5 以降では致命的なエラーが発生します
foo($a = 5) // 変数ではなく式
foo( 5) // 致命的なエラーが発生します
?><code>function bar(){ // Note the missing &
$a = 5;
return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>

引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用,使用此语法:

<code><span><?php<br />class foo {<br /> public $value = 42;<br /> public function &getValue() {<br /> return $this->value;<br>    }<br>}<br>$obj = new foo;<br>$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.<br>$obj->value = 2;<br>echo $myValue; // prints the new value of $obj->value, i.e. 2.<br>?></span>

本例中 getValue 函数所返回的对象的属性将被赋值,而不是拷贝,就和没有用引用语法一样。和参数传递不同,这里必须在两个地方都用 &符号——指出返回的是一个引用,而不是通常的一个拷贝,同样也指出 $myValue是作为引用的绑定,而不是通常的赋值。当 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。

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

不会 unset $b,只是 $a。引用定位:

global引用:当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的:

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

$this:在一个对象的方法中,$this 永远是调用它的对象的引用。

14.预定义变量

超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量PHP 中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以访问它们。这些超全局变量是:

$GLOBALS;$_SERVER;$_GET;$_POST;$_FILES;$_COOKIE;$_SESSION;$_REQUEST;$_ENV

默认情况下,所有的超全局变量都是可用的。但是,有一些指令会影响这种可用性。

$GLOBALS — 引用全局作用域中可用的全部变量一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

<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 />class foo {<br /> public $value = 42;<br /> public function &getValue() {<br /> (); // $myValue は $obj->value への参照であり、42 です。<br />$obj->value = 2;<br />echo $ myValue; // $obj->value の新しい値、つまり 2 を出力します。<br>?><p></p>

この例では、オブジェクトのプロパティ

getValue 関数によって返される値は、コピーではなく代入されます。これは、参照構文を使用しないのと同じです。パラメーターの受け渡しとは異なり、ここでは両方の場所でアンパサンドを使用する必要があります。これは、通常のコピーではなく参照が返されることを示し、また $myValue が通常の代入ではなく参照としてバインドされていることを示します。参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>🎜<?php<br />$a = 1;<br />$b =& $a;<br />unset ($a);<br />?>🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜は🎜🎜$b🎜🎜の設定を解除せず、🎜🎜$a🎜🎜だけを設定します。参照の位置付け: 🎜🎜🎜🎜🎜グローバル参照: グローバル $var で変数を宣言すると、グローバル変数への参照が実際に確立されます。これは次のことと同じです: 🎜🎜🎜🎜🎜🎜🎜🎜<code>🎜<?php<br />$var =& $GLOBALS["var"] //これは、たとえば、 unset 🎜🎜 を意味します。 $var🎜🎜 はグローバル変数の設定を解除しません。 <br />?>🎜🎜🎜🎜🎜🎜🎜🎜🎜$this: オブジェクトのメソッド内の 🎜🎜$this🎜🎜 は常に、それを呼び出すオブジェクトへの参照です。 🎜🎜🎜14. 事前定義変数🎜🎜🎜🎜🎜🎜🎜🎜 スーパーグローバル変数 - PHP の多くの事前定義変数は、すべてのスコープで常に使用できる「スーパーグローバル」変数です。スクリプトのすべてのスコープ。これらは、 global $variable を実行せずに、関数またはメソッド内でアクセスできます。これらのスーパーグローバル変数は次のとおりです。 $_SERVER 🎜🎜🎜; 🎜🎜🎜デフォルトでは、すべてのスーパーグローバル変数が使用可能です。ただし、この可用性に影響を与えるディレクティブがいくつかあります。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜$GLOBALS - すべての変数を含むグローバル組み合わせ配列。変数の名前は配列のキーです。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>🎜<?php<br />function test() {<br />$foo = "ローカル変数";<br />echo '$fooグローバル スコープ内: ' . $GLOBALS["foo"] . "n";// グローバル スコープ内の $foo: コンテンツの例<br />現在のスコープ内での $foo : ' . $foo .現在のスコープ内の /$foo: ローカル変数<br />}<br />$foo = "サンプルコンテンツ";<br />test();<br />?>🎜🎜🎜🎜🎜 🎜🎜🎜🎜🎜🎜🎜🎜🎜 「スーパーグローバル」はオートメーションのグローバル変数とも呼ばれます。これは、スクリプトのすべてのスコープで使用できることを意味します。関数やメソッドでグローバル $variable を使用してアクセスする必要はありません。他のすべてのスーパーグローバル変数とは異なり、🎜🎜$GLOBALS🎜🎜 は PHP で常に使用できます。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜$_SERVER🎜🎜は、ヘッダー、パス、スクリプトの場所などの情報を含む配列です。この配列内の項目は 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 で表されます。

Webサーバーの作成。 $_SERVER で次の要素が見つかる場合と見つからない場合があります。列挙型:

'PHP_SELF': ドキュメントルートに関連する、現在実行中のスクリプトのファイル名。たとえば、http://example.com/test.php/foo.bar のスクリプトで

$_SERVER['PHP_SELF'] を使用すると、/test が取得されます。 /foo.bar.

'SERVER_ADDR': スクリプトが現在実行されているサーバーの IP アドレス。

'SERVER_NAME': スクリプトが現在実行されているサーバーのホスト名。スクリプトが仮想ホスト上で実行されている場合、名前はその仮想ホストに設定された値によって決まります。

'SERVER_PROTOCOL': ページをリクエストするときの通信プロトコルの名前とバージョン。たとえば、「HTTP/1.0」です。

'REQUEST_METHOD': ページにアクセスするために使用されるリクエスト メソッド (例: "GET"、"HEAD"、"POST"、"PUT")。

'REQUEST_TIME': リクエストが開始されたときのタイムスタンプ。 PHP 5.1.0 以降で利用可能です。

'QUERY_STRING': クエリ文字列 (クエリ文字列) がある場合、それを通じてページ アクセスが実行されます。

'HTTP_HOST': 現在のリクエストヘッダー内の Host: 項目の内容 (存在する場合)。

'HTTP_REFERER': ユーザー エージェントを現在のページの前のページのアドレス (存在する場合) に誘導します。ユーザーエージェント設定によって決定されます。すべてのユーザーエージェントがこの項目を設定するわけではなく、一部のユーザーエージェントは HTTP_REFERER を変更する機能も提供します。要するに、その値は信頼できません。

'HTTP_USER_AGENT': 現在のリクエストヘッダー内の User-Agent: 項目の内容 (存在する場合)。この文字列は、このページにアクセスするユーザー エージェントに関する情報を示します。

'REMOTE_ADDR': 現在のページを閲覧しているユーザーの IP アドレス。

'REMOTE_HOST': 現在のページを閲覧しているユーザーのホスト名。 DNS 逆引き解決は、ユーザーの REMOTE_ADDR には依存しません。

'SERVER_PORT': Web サーバーによって使用されるポート。デフォルト値は「80」です。 SSL セキュア接続を使用する場合、この値はユーザーが設定した HTTP ポートです。

$_GET: URL パラメーターを介して現在のスクリプトに渡される変数の配列。 GET は urldecode() 経由で渡されます。

$_POST: HTTP POST メソッド経由で現在のスクリプトに渡される変数の配列。

$_FILES: HTTP POST 経由で現在のスクリプトにアップロードされた項目の配列。

$_REQUEST — コマンドラインモードで実行する場合、HTTP リクエスト変数には argv および argc 情報が含まれません。これらは $_SERVER グループに存在します。

$_REQUEST の変数は GET、POST、COOKIE 入力メカニズムを介してスクリプト ファイルに渡されるため、リモートで使用できますユーザー それはできません手紙が改ざんされる。この配列の項目とその順序は、PHP の variables_order ディレクティブの構成によって異なります。

$_SESSION: 現在のスクリプトで使用できる SESSION 変数の配列。

move_uploaded_file() - アップロードされたファイルを新しい場所に移動します。 import_request_variables() - GET/POST/Cookie 変数をグローバル スコープにインポートします。既存のセッション; getenv() - 環境変数の値を取得します。

$_ENV: 環境を通じて現在のスクリプトに渡される変数の配列。これらの変数は、PHP パーサーのランタイム環境から PHP のグローバル名前空間にインポートされます。多くは PHP の実行をサポートするシェルによって提供されており、異なるシステムでは異なる種類のシェルが実行される可能性があるため、明確なリストは不可能です。定義された環境変数のリストについては、シェルのドキュメントを確認してください。他の環境変数には、PHP がサーバー モジュールとして実行されているか CGI プロセッサとして実行されているかに関係なく、CGI 変数が含まれます。

$_COOKIE: HTTP Cookie を通じて現在のスクリプトに渡される変数の配列。 setcookie() - Cookie を送信します

$php_errormsg — 以前のエラー メッセージ; $php_errormsg 変数には、PHP によって生成された最新のエラー メッセージが含まれます。この変数は、エラーが発生したスコープ内でのみ使用でき、track_errors 構成項目をオンにする必要があります (デフォルトはオフです)。ユーザーがエラー ハンドラー (set_error_handler()) を定義し、<code>FALSE を返した場合、<code>FALSE 的时候,$php_errormsg 就会被设置。

<code><span><?php<br />@strpos();<br />echo $php_errormsg; //Wrong parameter count for strpos()<br />?></span>

$HTTP_RAW_POST_DATA — 原生POST数据。$HTTP_RAW_POST_DATA 包含 POST 提交的原始数据。参见 always_populate_raw_post_data一般而言,使用 php://input代替 $HTTP_RAW_POST_DATA

$http_response_header — HTTP 响应头:$http_response_header数组与 get_headers() 函数类似。当使用HTTP 包装器时,$http_response_header 将会被 HTTP 响应头信息填充。$http_response_header 将被创建于局部作用域中。

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

$argc — 传递给脚本的参数数目:包含当运行于命令行下时传递给当前脚本的参数的数目。脚本的文件名总是作为参数传递给当前脚本,因此 $argc 的最小值为 1。这个变量仅在 register_argc_argv 打开时可用。

$argv — 传递给脚本的参数数组:包含当运行于命令行下时传递给当前脚本的参数的数组。第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名。这个变量仅在 register_argc_argv 打开时可用。

  • getopt() - 从命令行参数列表中获取选项

15.预定义异常

Exception是所有异常的基类。类摘要:

Exception {

    /* 属性 */

    protectedstring$message ;

    protectedint$code ;

    protectedstring$file ;

    protectedint$line ;

    /* 方法 */

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

が設定されます。

<code>@strpos();
echo $php_errormsg //strpos()のパラメータ数が間違っています
?>

$HTTP_RAW_POST_DATA — ネイティブ POST データ。 $HTTP_RAW_POST_DATA

POST によって送信された生データが含まれます。 always_populate_raw_post_data を参照してください。 通常、$HTTP_RAW_POST_DATA

の代わりに php://input を使用します。

$http_response_header — HTTP 応答ヘッダー:

$http_response_header

この配列は get_headers() 関数に似ています。 HTTP ラッパーを使用する場合、

$http_response_header には HTTP 応答ヘッダーが設定されます。

$http_response_headerはローカルスコープに作成されます。

<code><?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 />?>

$argc — スクリプトに渡される引数の数: コマンド ラインから実行するときに現在のスクリプトに渡される引数の数が含まれます。スクリプトのファイル名は常に引数として現在のスクリプトに渡されるため、

$argc の最小値は1です。この変数は、 register_argc_argv がオンになっている場合にのみ使用できます。 🎜🎜🎜$argv — スクリプトに渡される引数の配列: コマンド ラインから実行するときに現在のスクリプトに渡される引数を含む配列。最初のパラメータは常に現在のスクリプトのファイル名であるため、🎜🎜$argv[0]🎜🎜 がスクリプト ファイル名になります。この変数は、 register_argc_argv がオンになっている場合にのみ使用できます。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜
  • 🎜getopt() - コマンドライン引数リストからオプションを取得します🎜
🎜 🎜15. 事前定義された例外🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Exception はすべての例外の基本クラスです。クラスの概要: 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Exception {🎜🎜🎜🎜 /* 属性*/🎜🎜🎜🎜 protectedstring🎜$🎜 message🎜 🎜 ;🎜🎜🎜🎜 protectedint🎜$🎜コード🎜🎜;🎜🎜🎜🎜 protectedstring🎜$🎜file🎜🎜;🎜🎜🎜🎜 protectedint🎜$🎜line🎜🎜;🎜🎜🎜 /* メソッド*/🎜 🎜🎜🎜 public __construct ([ string<code>$message = "" [, int<code>$code = 0 [, Exception<code>$previous = <code>NULL ]]] )🎜🎜🎜🎜finalpublicstringgetMessage ( void )🎜🎜🎜🎜finalpublicExceptiongetPrevious ( void )🎜🎜🎜🎜finalpublicintgetCode ( void )🎜🎜🎜🎜finalpublicstringgetFile ( void )🎜🎜🎜🎜final publicintgetLine ( void ) 🎜🎜🎜🎜 publicarraygetTrace ( void ) 🎜🎜🎜🎜finalpublicstringgetTraceAsString ( void )🎜🎜🎜🎜 publicstring__toString (void)🎜🎜🎜🎜 Finalprivatevoid__clone (void)🎜🎜🎜}🎜🎜🎜🎜🎜🎜🎜 属性: メッセージ: 例外メッセージの内容; コード: 例外コード;例外をスローする;line: 例外がスローされたファイル内の行番号 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Exception::__construct - 例外コンストラクター 🎜🎜🎜🎜🎜🎜🎜 パラメーター: message: スローされた例外メッセージの内容。コード: 例外コード。前: 例外チェーン内の前の例外。 🎜🎜🎜🎜🎜🎜🎜🎜🎜Exception::getMessage — 例外メッセージの内容を取得します🎜🎜🎜🎜🎜🎜🎜パラメータ: この関数にはパラメータがありません。 🎜🎜🎜🎜🎜🎜🎜🎜🎜Exception::getPrevious — 例外チェーン内の前の例外を返す 🎜🎜🎜🎜🎜🎜参数: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>

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>

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

パラメータ: offset 取得するオフセット位置。戻り値: 任意の型を返すことができます。

ArrayAccess::offsetSet — オフセット位置の値を設定します。 パラメーター: offset 設定するオフセット位置。 value 設定する必要がある値。戻り値はありません。

別の値が使用できない場合、<code>offset パラメータは <code>NULL に設定されます。 <code>offset 参数将被设置为 <code>NULL。

ArrayAccess::offsetUnset — 复位一个偏移位置的值:当使用 (unset) 进行类型转换时,该方法不会被调用。

<code>参数:offset 待复位的偏移位置。没有返回值。

序列化接口:

Serializable::serialize — 对象的字符串表示。这个方法担当着对象析构器的角色。在此方法之后,__destruct() 方法将不会被调用。此函数没有参数,返回值:返回对象的字符串表示或者 <code>NULL 。

Serializable::unserialize — 构造对象。这个方法担当着对象构造器的角色。在此方法之后,__construct() 将不会被调用。参数:serialized 对象的字符串表示。

Closure::__construct — 用于禁止实例化的构造函数。这个方法仅用于禁止实例化一个 Closure 类的对象。这个类的对象的创建方法写在 匿名函数 页。此函数没有参数,没有返回值。

Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。这个方法是 Closure::bindTo() 的静态版本。

参数:closure 需要绑定的匿名函数。newthis 需要绑定到匿名函数的对象,或者 <code>NULL 创建未绑定的闭包。newscope 想要绑定给闭包的类作用域,或者 'static' 表示不改变。如果传入一个对象,则使用这个对象的类型名。 类作用域用来决定在闭包中 $this 对象的 私有、保护方法 的可见性。返回一个新的 Closure 对象 或者在失败时返回 <code>FALSE

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

Closure::bindTo — 复制当前闭包对象,绑定指定的$this对象和类作用域。创建并返回一个 匿名函数, 它与当前对象的函数体相同、绑定了同样变量,但可以绑定不同的对象,也可以绑定新的类作用域。"绑定的对象"决定了函数体中的 $this的取值,"类作用域"代表一个类型、决定在这个匿名函数中能够调用哪些 私有 和 保护 的方法。 也就是说,此时 $this 可以调用的方法,与 <code>newscope 类的成员函数是相同的。静态闭包不能有绑定的对象( <code>newthis 参数的值应该设为 <code>NULL

🎜ArrayAccess::offsetUnset — オフセット位置の値をリセットします。型変換に使用 (設定解除) する場合、このメソッドは呼び出されません。 🎜🎜🎜🎜🎜🎜🎜<code>パラメータ: offset リセットされるオフセット位置。戻り値はありません。 🎜🎜🎜シリアル化インターフェイス: 🎜🎜🎜🎜🎜🎜🎜🎜Serializable::serialize — オブジェクトの文字列表現。このメソッドはオブジェクト デストラクターの役割を果たします。このメソッドの後、 __destruct() メソッドは呼び出されません。この関数にはパラメータがなく、オブジェクトの文字列表現または <code>NULL を返します。 🎜🎜🎜🎜Serializable::unserialize — オブジェクトを構築します。このメソッドはオブジェクト コンストラクターの役割を果たします。このメソッドの後、 __construct() は呼び出されません。パラメータ: シリアル化されたオブジェクトの文字列表現。 🎜🎜🎜🎜🎜🎜🎜🎜Closure::__construct — インスタンス化を無効にするために使用されるコンストラクター。このメソッドは、Closure クラスのオブジェクトのインスタンス化を無効にするためにのみ使用されます。このクラスのオブジェクトの作成方法は匿名関数のページに書かれています。この関数にはパラメータも戻り値もありません。 🎜🎜🎜🎜🎜🎜🎜🎜Closure::bind — クロージャをコピーし、指定された $this オブジェクトをクラス スコープにバインドします。このメソッドは Closure::bindTo() の静的バージョンです。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜パラメータ:クロージャー バインドする必要がある匿名関数。 newthis は匿名関数にバインドされたオブジェクトを必要とします。そうでない場合、<code>NULL はバインドされていないクロージャを作成します。 newscope は、クロージャにバインドするクラス スコープです。または、「static」は変更されていないことを意味します。オブジェクトが渡された場合は、オブジェクトの型名が使用されます。 クラス スコープは、クロージャ内の $this オブジェクトのプライベートな保護されたメソッドの可視性を決定するために使用されます。新しい Closure オブジェクトを返すか、失敗した場合は <code>FALSE を返します🎜🎜🎜🎜🎜🎜🎜🎜<code>🎜<?php<br />class A {<br /> private static $sfoo = 1; <br /> private $ifoo = 2;<br />}<br />$cl1 = static function() {<br /> return A::$sfoo;<br />};<br / >$cl2 = function() {<br /> return $this->ifoo;<br />};<br />$bcl1 = Closure::bind($cl1, null, 'A');<br />$ bcl2 = Closure::bind($cl2, new A(), 'A');<br />echo $bcl1(), "n"; ; //2<br />?>🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜Closure::bindTo — 現在のクロージャ オブジェクトをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。匿名関数を作成して返します。この関数は、現在のオブジェクトと同じ関数本体を持ち、同じ変数をバインドしますが、異なるオブジェクトまたは新しいクラス スコープをバインドできます。 「バインドされたオブジェクト」は関数本体の $this の値を決定し、「クラス スコープ」は型を表し、この匿名関数でどのプライベート メソッドと保護されたメソッドを呼び出すことができるかを決定します。 つまり、現時点で $this が呼び出すことができるメソッドは、<code>newscope クラスのメンバー関数と同じです。静的クロージャはバインドされたオブジェクトを持つことができません (<code>newthis パラメータの値は <code>NULL に設定する必要があります) が、そのクラス スコープは bubdTo メソッドを使用して変更できます。匿名関数をコピーしたいだけの場合は、代わりにクローン作成を使用できます。 🎜🎜🎜🎜🎜🎜パラメータ: newthis は匿名関数にバインドされたオブジェクト、またはバインドを解除するには <code>NULL です。 newscope は匿名関数のクラス スコープに関連付けられます。または、「static」は現在の状態を維持します。それがオブジェクトの場合、このオブジェクトのタイプはエクスペリエンス クラスのスコープで使用されます。 これにより、バインドされたオブジェクトの保護されたプライベート メンバー メソッドの可視性が決まります。戻り値: 新しく作成された Closure オブジェクトを返すか、失敗した場合は <code>FALSE を返します。 __construct($val) {
$this->val = $val;
}
関数getCluse(){
//このオブジェクトにバインドされた閉鎖を返します
return $ this-&gt; val;
; $cl = $ob1->getClosure();
echo $cl(), //1
$cl = $cl->bindTo( $ob2);
echo $cl(), //2
?><code>NULL 来取消绑定。newscope 关联到匿名函数的类作用域,或者 'static' 保持当前状态。如果是一个对象,则使用这个对象的类型为心得类作用域。 这会决定绑定的对象的 保护、私有成员 方法的可见性。返回值:返回新创建的 Closure 对象 或者在失败时返回 <code>FALSE

<code><span><?php<br />class A {<br /> function __construct($val) {<br /> $this->val = $val;<br>    }<br>    function getClosure() {<br>        //returns closure bound to this object and scope<br>        return function() { return $this->val; };<br>    }<br>}<br>$ob1 = new A(1);<br>$ob2 = new A(2);<br>$cl = $ob1->getClosure();<br>echo $cl(), "n";    //1<br>$cl = $cl->bindTo($ob2);<br>echo $cl(), "n";    //2<br>?></span>

17.上下文选项和参数

套接字上下文选项可用于所有工作在套接字上的封装协议,像 tcphttp 和 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>

17. コンテキストのオプションとパラメータ

このオプションは、tcphttp

ftp🎜など、ソケット上で動作するすべてのカプセル化プロトコルで利用できます。 // '192.168.0.100' IP を使用してインターネットに接続します
$opts = array(
'socket' => array(
'binto' => '192.168.0.100: 0',
),
);
// IP '192.168.0.100' とポート '7000' を使用してインターネットに接続します
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);// を使用してインターネットに接続しますポート '7000'
$opts = array(
'socket' => array(
'bindto' => '0:7000' ,
),
);
// コンテキストを作成します...
$context = stream_context_create($opts);
// ...それを使用してデータをフェッチします
echo file_get_contents ('http://www.example.com', false, $context);
?>🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜🎜🎜🎜HTTP コンテキスト オプションのリストHTTP コンテキストのオプション。 🎜http://🎜 および 🎜https://🎜 トランスポート プロトコルに提供されるコンテキスト オプション。オプションのオプション: 🎜🎜

<code>methodstring リモートサーバーは、<code>GET、<code>POST、またはその他の HTTP メソッドをサポートします。デフォルト値は <code>GET です。 <code>methodstring 远程服务器支持的 <code>GET,<code>POST 或其它 HTTP 方法。默认值是 <code>GET。
<code>headerstring 请求期间发送的额外 header 。在此选项的值将覆盖其他值 (诸如 User-agent:, Host: 和 Authentication:)。
<code>user_agentstring 要发送的 header User-Agent: 的值。如果在上面的 header context 选项中没有指定 user-agent,此值将被使用。默认使用 php.ini中设置的 user_agent。
<code>contentstring 在 header 后面要发送的额外数据。通常使用POST或PUT请求。
<code>proxystring URI 指定的代理服务器的地址。(e.g. tcp://proxy.example.com:5100).
<code>request_fulluriboolean 当设置为 <code>TRUE 时,在构建请求时将使用整个 URI 。(i.e. GET http://www.example.com/path/to/file.html HTTP/1.0)。 虽然这是一个非标准的请求格式,但某些代理服务器需要它。默认值是 <code>FALSE.
<code>follow_locationinteger 跟随 Location header 的重定向。设置为 0 以禁用。默认值是 1
<code>max_redirectsinteger 跟随重定向的最大次数。值为 1 或更少则意味不跟随重定向。默认值是 20
<code>protocol_versionfloat HTTP 协议版本。默认值是 1.0。PHP 5.3.0 以前的版本没有实现分块传输解码。 如果此值设置为 1.1 ,与 1.1 的兼容将是你的责任。
<code>timeoutfloat 读取超时时间,单位为秒(s),用 float 指定(e.g. 10.5)。默认使用 php.ini 中设置的 default_socket_timeout。
<code>ignore_errorsboolean 即使是故障状态码依然获取内容。默认值为 <code>FALSE.

FTP context options — FTP context option listing

SSL 上下文选项 — SSL 上下文选项清单。ssl:// 和 tls://传输协议上下文选项清单。可选项:好多。

CURL context options — CURL 上下文选项列表。CURL 上下文选项在 CURL 扩展被编译(通过 --with-curlwrappers configure选项)时可用。可选项:

<code>methodstring <code>GET,<code>POST,或者其他远程服务器支持的 HTTP 方法。默认为 <code>GET.
<code>headerstring 额外的请求标头。这个值会覆盖通过其他选项设定的值(如: User-agent:Host:, ,Authentication:)。
<code>user_agentstring 设置请求时 User-Agent 标头的值。默认为 php.ini 中的 user_agent设定。
<code>contentstring 在头部之后发送的额外数据。这个选项在 <code>GET 和 <code>HEAD请求中不使用。
<code>proxystring URI,用于指定代理服务器的地址(例如 tcp://proxy.example.com:5100)。
<code>max_redirectsinteger 最大重定向次数。1 或者更小则代表不会跟随重定向。默认为 20.
<code>curl_verify_ssl_hostboolean校验服务器。默认为 <code>FALSE。这个选项在 HTTP 和 FTP 协议中均可使用。
<code>curl_verify_ssl_peerboolean 要求对使用的SSL证书进行校验。默认为 <code>FALSE。
<code>headerstring リクエスト中に送信される追加ヘッダー。このオプションの値は、他の値 (User-agent:Host:Authentication: など) をオーバーライドします。 <code>user_agentstring 送信されるヘッダー User-Agent: の値。上記のヘッダーコンテキスト オプションでユーザー エージェントが指定されていない場合は、この値が使用されます。デフォルトでは、php.ini で設定された user_agent が使用されます。 <code>contentstring ヘッダーの後に送信される追加データ。通常は、POST リクエストまたは PUT リクエストを使用します。 🎜🎜🎜🎜<code>proxystring URI は、プロキシ サーバーのアドレスを指定します。 (例: tcp://proxy.example.com:5100)。🎜🎜🎜🎜<code>request_fulluriboolean <code>TRUE に設定すると、ビルド時にリクエストを行う際には URI 全体が使用されます。 (つまり、GET http://www.example.com/path/to/file.html HTTP/1.0)。 これは非標準のリクエスト形式ですが、一部のプロキシ サーバーではこれが必要です。デフォルト値は <code>FALSE です。🎜🎜🎜🎜<code>follow_locationinteger Location ヘッダーのリダイレクトに従います。無効にするには 0 に設定します。デフォルト値は1です。 🎜🎜🎜🎜<code>max_redirectsinteger 従うリダイレクトの最大数。 1 以下の値は、リダイレクトが行われないことを意味します。デフォルト値は20です。 🎜🎜🎜🎜<code>protocol_versionfloat HTTP プロトコルのバージョン。デフォルト値は1.0です。 PHP 5.3.0 より前のバージョンでは、チャンク転送デコードが実装されていませんでした。 この値が 1.1 に設定されている場合、 1.1 との互換性はユーザーの責任になります。 🎜🎜🎜🎜<code>timeoutfloat 読み取りタイムアウト (秒単位)、float で指定します (例: 10.5)。デフォルトでは、php.ini で設定されたdefault_socket_timeout が使用されます。 🎜🎜🎜🎜<code>ignore_errorsboolean は、障害ステータス コードであってもコンテンツを取得します。デフォルト値は <code>FALSE です。 🎜🎜🎜🎜🎜SSL コンテキスト オプション — SSL コンテキスト オプションのリスト。 ssl:// および tls:// のトランスポート プロトコル コンテキスト オプションのリスト。オプション: 多数。 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜CURL コンテキスト オプション — CURL コンテキスト オプションのリスト。 CURL コンテキスト オプションは、CURL 拡張機能がコンパイルされるときに (--with-curlwrappers 構成オプションを介して) 使用できます。オプションのオプション: 🎜🎜🎜🎜🎜🎜🎜🎜🎜<code>methodstring <code>GET、<code>POST、またはリモートサーバーでサポートされている他の HTTP メソッド。デフォルトは <code>GET です。🎜🎜🎜🎜<code>headerstring 追加のリクエストヘッダー。この値は、他のオプション (User-agent:Host:Authentication: など) で設定された値をオーバーライドします。 🎜🎜🎜🎜<code>user_agentstring リクエストの User-Agent ヘッダーの値を設定します。デフォルトは、php.ini の user_agent 設定です。 🎜🎜🎜🎜<code>contentstring ヘッダーの後に送信される追加データ。このオプションは、<code>GET リクエストと <code>HEAD リクエストでは使用されません。 🎜🎜🎜🎜<code>proxystring URI。プロキシ サーバーのアドレスを指定するために使用されます (tcp://proxy.example.com:5100 など)。 🎜🎜🎜🎜<code>max_redirectsinteger リダイレクトの最大数。 1 以下は、リダイレクトが従わないことを意味します。デフォルトは 20 です。🎜🎜🎜🎜<code>curl_verify_ssl_host ブール型検証サーバー。デフォルトは <code>FALSE です。 このオプションは、HTTP プロトコルと FTP プロトコルの両方で使用できます。 🎜🎜🎜🎜<code>curl_verify_ssl_peerboolean では、使用される SSL 証明書の検証が必要です。デフォルトは <code>FALSE です。 このオプションは、HTTP プロトコルと FTP プロトコルの両方で使用できます。ページを取得し、データを POST として送信します: 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜

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

Phar 上下文(context)选项 — Phar 上下文(context)选项列表。phar:// 封装(wrapper)的上下文(context)选项。可选项:<code>compressint Phar compression constants 中的一个。<code>metadatamixed Phar 元数据(metadata)。查看 Phar::setMetadata()。

Context 参数 — Context 参数列表。这些参数(parameters)可以设置为由函数 stream_context_set_params() 返回的 context。参数:<code>notification$postdata = http_build_query(
array(
' 'var1' => '一部のコンテンツ',
' var2' => 'doh'
) )
);
$opts = array('http' =>
array(
'メソッド' = > 'POST',
'ヘッダー' => 'コンテンツ タイプ: application/x-www-form-urlencoded',
'コンテンツ' => $postdata
));
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
? >

Phar コンテキスト オプション — Phar コンテキスト オプションのリスト。 phar:// ラッパーのコンテキスト オプション。オプション: <code>compressint Phar 圧縮定数の 1 つ。 <code>metadata混合 Phar メタデータ (メタデータ)。 Phar::setMetadata() を参照してください。

コンテキストパラメータ — コンテキストパラメータのリスト。これらのパラメーター (parameters) は、関数 stream_context_set_params() によって返される context に設定できます。パラメータ: <code>notificationcallable ストリーム上でイベントが発生すると、callable が呼び出されます。

18. サポートされているプロトコルとカプセル化プロトコル fopen() や file_get_contents() などの特定の関数では、include_path が相対パスとしてもオプションで検索されます。 allow_url_fopen の影響を受けますいいえ
file:// — ローカル ファイル システムにアクセスします。 ファイルシステムは、PHPで使用されるデフォルトのラッパープロトコルであり、ローカルファイルシステムを公開します。 相対パス (/、、、\、または Windows ドライブ文字で始まらないパス) が指定された場合、指定されるパスは現在の作業ディレクトリに基づきます。 多くの場合、変更されていない限り、これはスクリプトが存在するディレクトリです。 CLI を使用する場合、ディレクトリはデフォルトでスクリプトが呼び出されるディレクトリになります。
パッケージングプロトコルの概要
属性 サポート
はい 同時読み取りと書き込みを許可します
はい サポートstat()
はい サポート()
はい rename()をサポート
はい mkdir()をサポート
はい rmdir()をサポート
はい🎜🎜🎜🎜🎜

http:// -- https:// -- HTTP(s) URL にアクセスします。 HTTP 1.0 GET メソッドを介したファイルまたはリソースへの読み取り専用アクセスを許可します。 HTTP リクエストには、ドメイン名ベースの仮想ホストとの互換性を確保するための Host: ヘッダーが付属します。 user_agent 文字列が php.ini ファイルまたはバイト ストリーム コンテキストで設定されている場合、それもリクエストに含まれます。データ ストリームではリソースの body を読み取ることができ、ヘッダーは $http_response_header 変数に保存されます。

ドキュメント リソースがどの URL から来たのかを知る必要がある場合 (すべてのリダイレクトを処理した後)、データ フローによって返される一連の応答ヘッダーを処理する必要があります。

パッケージングプロトコルの概要
属性 サポート
allow_url_fopen によって制限されています はい
読み取りを許可 はい
書き込みを許可 いいえ
追加を許可 いいえ
同時読み取りと書き込みを許可します 該当なし
サポート統計() いいえ
サポート解除() いいえ
名前変更()をサポート いいえ
mkdir()をサポート いいえ
rmdir()をサポート いいえ

ftp:// -- ftps: // — FTP URL にアクセスします。新しいファイルを作成するだけでなく、FTP 経由で既存のファイルを読み取ることもできます。 サーバーがパッシブ モード FTP をサポートしていない場合、接続は失敗します。

ファイルを開いた後は、読み取りと書き込みの両方が可能ですが、同時にはできません。 リモート ファイルが FTP サーバー上に既に存在する場合、コンテキスト オプション overwrite を指定せずにファイルを開いて書き込もうとすると、接続は失敗します。 FTP 経由で既存のファイルを上書きする場合は、コンテキストの overwrite オプションを指定して開いて書き込みます。 代わりに、FTP 拡張機能を使用することもできます。 php.ini で from ディレクティブを設定すると、この値は匿名 FTP のパスワードとして使用されます。

php:// — さまざまな入出力ストリーム (I/O ストリーム) にアクセスします。 PHP は、PHP の入出力ストリーム、標準入力、出力、およびエラー記述子、メモリ内、ディスクバックアップの一時ファイル ストリーム、および他のファイル ストリームで動作できるフィルタへのアクセスを可能にする、さまざまな入出力 (IO) ストリームを多数提供します。読み書き可能なファイル リソース。

php://stdinphp://stdoutphp://stderrを使用すると、PHPプロセスの対応する入力ストリームまたは出力ストリームに直接アクセスできます。 データ ストリームはコピーされたファイル記述子を参照するため、php://stdin を開いて閉じると、コピーを閉じるだけで、これらのラッパーを手動で開く代わりに、実際の <code>STDIN 并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 <code>STDIN、 <code>STDOUT 和 <code>STDERR が参照されます。

php://stdinは読み取り専用、php://stdoutphp://stderrは書き込み専用です。

php://inputは、要求された生データにアクセスできる読み取り専用ストリームです。 POST リクエストの場合、特定の php.ini ディレクティブに依存しないため、$HTTP_RAW_POST_DATA の代わりに php://input を使用することをお勧めします。 さらに、この場合 $HTTP_RAW_POST_DATA はデフォルトでは設定されないため、always_populate_raw_post_data をアクティブにするよりも必要なメモリが少なくなる可能性があります。 enctype="multipart/form-data"を使用する場合、php://inputは無効です。

php://outputは、 print や echo と同じ方法で出力バッファに書き込むことができる書き込み専用のデータ ストリームです。

php://fd 指定されたファイル記述子への直接アクセスを許可します。 たとえば、php://fd/3 はファイル記述子 3 を指します。

php://memoryphp://tempは、一時データの読み取りと書き込みを可能にするファイルラッパーのようなデータストリームです。 2 つの唯一の違いは、php://memory は常にデータをメモリに保存するのに対し、php://temp はメモリ量が事前に定義された制限 (デフォルトは 2MB) に達した後にデータを一時ファイルに保存することです。 。 一時ファイルの場所は、sys_get_temp_dir() と同じ方法で決定されます。 php://temp のメモリ制限は、/maxmemory:NN を追加することで制御できます。NN は、メモリに保持されるデータの最大量 (バイト単位) を超える場合、一時ファイルが使用されます。

php://filterは、データストリームが開かれたときにアプリケーションをフィルタリングするために設計されたメタラッパーです。 これは、ストリームのコンテンツが読み取られる前に追加のフィルターを適用する機会がない、readfile()、file()、file_get_contents() などのオールインワン ファイル関数に役立ちます。 php://filter ターゲットは、パスの一部として次のパラメータを使用します。 複合フィルター チェーンをパス上に指定できます。

パッケージングプロトコルの概要
プロパティ PHP 4 PHP 5
allow_url_fopenの影響を受ける はい はい
読み取りを許可します はい はい
書き込みを許可します はい (新しいファイルのみをサポートします) はい (<code>overwrite有効化後の新規ファイル/既存ファイル)
追加を許可 いいえ はい
同時読み取りと書き込みを許可 いいえ いいえ
stat()をサポート いいえ 5.0.0以降: filesize()、filetype()、file_exists()、is_file()、およびis_dir()のみ。 PHP 5.1.0 以降: filemtime()。
リンク解除()をサポートします いいえ はい
名前の変更をサポートします() いいえ はい
mkdir()をサポートします いいえ はい
rmdir()をサポートします いいえ はい
カプセル化プロトコルの概要 (php://filterについては、フィルターされたラッパーを参照してください。)
プロパティ のサポート
allow_url_fopenの最初 いいえ
allow_url_includeの最初 のみphp://inputphp://stdinphp://memoryphp : //温度
のみphp://stdinphp://inputphp://fdphp://memoryおよびphp:/ /の読み取りを許可します気温
のみへの書き込みを許可するphp://stdoutphp://stderrphp://outputphp://fdphp:/ /memoryphp://temp
追加を許可する のみphp://stdoutphp://stderrphp://outputphp://fdphp:// Memoryphp://temp (書き込みに等しい)
は同時読み取りと書き込みを許可します のみ php://fdphp://memory および php: / /温度
は、stat() のみphp://memoryphp://tempをサポートします。
リンク解除()をサポート いいえ
名前変更()をサポート いいえ
サポートmkdir ( ) いいえ
rmdir()をサポート いいえ
stream_select()のみをサポート php://stdinphp://stdoutphp://stderr php://fdphp://temp

zlib:// -- bzip2:// -- zip:// — 圧縮ストリーム。 zlib: PHP 4.0.4 - PHP 4.2.3 (fopencookie を使用するシステムのみをサポート)

compress.zlib:// および compress.bzip2:// PHP 4.3.0 以降

zlib: は gzopen() のような関数ですが、そのデータ ストリームは fread() や他のファイル システム関数でも使用できます。 これは、「:」文字を含む他のファイル名と混同されるため、PHP 4.3.0 以降では非推奨になりました。代わりに compress.zlib:// を使用してください。

compress.zlib://compress.bzip2://は、gzoopen()およびbzoopen()と同等です。 fopencookie をサポートしていないシステムでも使用できます。

ZIP拡張子がzip:パッケージ化プロトコルに登録されました。オプション

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

data:// — データ (RFC 2397)。使用法: data://text/plain;base64,

echo file_get_contents('data://text/plain;base64,SSBsb3Zl
カプセル化プロトコルの概要
属性 サポートされています
制限された件名allow_url_fopen いいえ
allow_url_includeの対象 はい
読み取りを許可する はい
書き込みを許可する いいえ
追加を許可する いいえ
同時読み取りと書き込みを許可する いいえ
stat()をサポート いいえ
リンク解除をサポート( ) いいえ
rename()をサポート いいえ
サポートmkdir() いいえ
rmdir()をサポートいいえ // print "PHP が大好き"
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。