<code><code>
11. 예외 처리
<code><code>사용자는 정의를 사용할 수 있습니다. PHP의 내장 예외 처리 클래스를 확장하기 위한 예외 처리 클래스. 다음 코드는 기본 제공 예외 처리 클래스의 어떤 속성과 메서드가 하위 클래스에서 액세스하고 상속 가능한지 보여줍니다. 번역자 주: 다음 코드는 내장된 예외 처리 클래스의 구조를 설명하기 위한 것일 뿐입니다. 실제적으로 의미가 있는 사용 가능한 코드는 아닙니다.
<code>class Exception{
protected $ message = '알 수 없는 예외'; //예외 정보
protected $code = 0; //사용자 정의 예외 코드
protected $file; $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() 정보
/* 오버로드 가능한 메서드*/
함수 __toString(); // 출력 가능한 문자열
}
?><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(); // 可输出的字符串
}
?>
사용자 정의 클래스를 사용하여 내장된 예외 처리 클래스를 확장하고 생성자를 재정의하는 경우 parent::__construct()를 동시에 호출하여 모든 변수가 변경되었는지 확인하는 것이 좋습니다. 할당된 값. 객체가 문자열을 출력하려는 경우 __toString()을 오버로드하고 출력 스타일을 사용자 정의할 수 있습니다.
확장 PHP 내장 예외 처리 클래스
<code>// 예외 처리 클래스 사용자 정의
class MyException extends Exception{ // 구문 재정의 생성자는 메시지를 지정해야 하는 속성으로 만듭니다.
공개 함수 __construct($message, $code = 0) {
> parent::__construct($message, $code);
}
// 문자열 출력 스타일 사용자 정의
public function __toString() {
return __CLASS__ . ": [ {$this->code}]: {$this->message}n";
}
public function customFunction() {
echo "이 유형의 예외에 대한 사용자 정의 함수 ";
}
}
<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";
?>//
생성기를 사용하면 foreach 블록에 코드를 작성하여 메모리에 배열을 만들지 않고도 데이터 집합을 반복할 수 있습니다. 메모리 한도에 도달했거나 상당한 처리 시간이 소요되고 있습니다. 대신 일반 사용자 정의 함수처럼 생성기 함수를 작성할 수 있으며, 한 번만 반환하는 일반 함수 대신 생성기는 반복해야 하는 값을 생성하기 위해 필요한 만큼 여러 번 생성할 수 있습니다.
<code>function xrange($start, $limit, $step = 1) {
if ($start < $limit) {
if ($step <= 0) {
throw new LogicException('Step must be ve');
}
($i = $start; $i <= $limit; $i = $step) {
Else {
if ($ Step & GT; = 0) {
Throw New LogicXception ('Step Must be -ve');
}
for ($ i = $ start; $i > 및 xrange() 결과는 동일합니다
* 아래 출력. */
echo 'range()의 한 자리 홀수: ';
foreach (range(1, 9, 2) as $number) {
echo " $number ";
}
echo "n";
echo '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
발전기 비교 Iterator 객체 사용
생성기의 주요 장점은 단순성입니다. Iterator 클래스를 구현하는 것에 비해 훨씬 적은 상용구 코드를 작성해야 합니다. 코드는 일반적으로 훨씬 더 읽기 쉽습니다. 예를 들어, 다음 함수와 클래스는 동일합니다.
<code>function getLinesFromFile($fileName) {
if (!$fileHandle = fopen($fileName, 'r')) {< br /> return
}
while (false! == $ line = fgets ($ filehandle)) {
Yield $ line
}
fclose ($ fileHandle);
}
// 대...
LineIterator 클래스는 Iterator를 구현합니다 {
protected $fileHandle;
protected $line;
protected $i ;
공용 함수 __construct($ fileName) {
if (!$this->fileHandle = fopen($fileName, 'r')) {
throw new RuntimeException('파일 "' . $fileName . '"을 열 수 없습니다. ');
파일 열기 "' . br /> $this->line = fgets($this->fileHandle);
$this->i = 0;
}
public function valid() {
// return false !== $this->line;
}
public function current() {
return $this ->line;
}
공개 기능 키() {
‐ out''''''''''''‐ out out out out out out's''s right out ‑‑ 중 (false ! {
$this->line = fgets($this->fileHandle);
$this->i ;
}
}
공개 함수 __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);
}
}
?>
<code>$a =& $b; 🎜><code>$a =& $b; //这意味着 $a 和 $b 指向了同一个变量。$a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者· //相反,而是 $a 和 $b 指向了同一个地方。
?>$a
및
$b
는 여기서 완전히 동일하지만$a 은
$b 또는 · // 대신
$a 및
$b는 같은 장소를 가리킵니다.
?>
<code>
if 참조가 있는 배열은 복사되고 해당 값은 역참조되지 않습니다. 배열 값을 함수에 전달할 때도 마찬가지입니다. 정의되지 않은 변수가 참조로 할당되거나, 참조로 전달되거나, 참조로 반환되면 해당 변수가 자동으로 생성됩니다.
function foo(&$var) { }
foo ($a); // $a가 "생성"되어 null
$b = array();
foo( $b['b']);
var_dump(array_key_exists('b', $b)) // bool(true)$c = 새로운 StdClass;
<code>$bar =& new fooclass();
$foo =& find_var($bar);
?>foo($c->d);
?>
동일한 구문 가능 참조를 반환하는 함수와 new 연산자(PHP 4.0.4 이상)에서 사용됩니다:
<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'
?>
만약 참조가 함수 내에서 global으로 선언된 변수에 할당된 경우 참조는 함수 내부에서만 볼 수 있습니다. $GLOBALS 배열을 사용하면 이 문제를 피할 수 있습니다. 함수 내에서 전역 변수 참조:
<code>$var1 = "예제 변수";
$var2 = "";
function global_references($use_globals){
global $var1, $var2;
if (!$use_globals) {
$var2 =& $var1; // 함수 내부에서만 볼 수 있습니다.
} else {
$GLOBALS["var2"] =& $ var1; // 전역 컨텍스트에서도 볼 수 있습니다.
}
}
global_references(false);
echo "var2가 '$var2'n으로 설정되었습니다." // var2가 설정되었습니다. to ''
global_references(true);
echo "var2가 '$var2'n으로 설정되었습니다." // var2가 '예제 변수'로 설정되었습니다.
?>
전역 $var;을 다음과 같이 처리합니다.
$var =& $GLOBALS['var'];의 약어입니다. 따라서 $var에 다른 참조를 할당하면 지역 변수의 참조만 변경됩니다.
참조가 있는 변수에 foreach 문에 값이 할당된 경우 , 참조된 객체도 변경됩니다.
$ref = 0;
$row =& $ ref;
<code>function foo(&$var){
$var ;
}
$a=5;
foo($a);
?>
?>참조가 하는 두 번째 일은 참조로 변수를 전달하는 것입니다. 이는 함수 내에서 지역 변수를 생성하여 수행되며 해당 변수는 호출 범위에서 동일한 내용을 참조합니다. 예:
<code> 함수 foo(&$var){
은
$a
를 6으로 만듭니다. . 이는
<code>function foo(&$var){
$var ;
}
$a=5;
foo($a);// $a is 6 here
?>foo
$a
같은 내용을 가리킵니다. 자세한 설명은 참조로 전달을 참조하세요.
참조가 하는 세 번째 일은 참조 반환입니다. 참조는 포인터가 아닙니다.함수가 인수 값을 수정할 수 있도록 함수를 참조하여 변수를 전달할 수 있습니다. <code>함수 foo( &$var){
foo($a);와 같은 변수 foo(new foobar())와 같은 새로운 문 함수에서 반환된 참조
다른 표현식은 참조로 전달할 수 없으며 결과는 정의되지 않습니다.
<code><code>function bar(){ // Note the missing &
$a = 5;
return $a;
}
foo(bar()); // 自 PHP 5.0.5 起导致致命错误
foo($a = 5) // 表达式,不是变量
foo(5) // 导致致命错误
?>함수 표시줄( ){ // 누락된 부분에 주목하세요 &
$a = 5;
return $a;
}
foo(bar()) // PHP 5.0.5부터 발생 Fatal error
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><code>
< ? php이 예에서 getValue
함수는 객체 속성은 참조 구문이 사용되지 않은 것처럼 복사되지 않고 할당됩니다. 매개변수 전달과 달리 앰퍼샌드는 여기서 두 위치 모두에 사용되어야 합니다. 즉, 일반적인 복사본이 아닌 참조가 반환되었음을 나타내고 $myValue가 일반적인 할당이 아닌 참조로 바인딩되었음을 나타냅니다. 참조를 설정 해제하면 변수 이름과 변수 내용 사이의 바인딩이 끊어집니다. 이는 변수 내용이 삭제된다는 의미는 아닙니다.<code><span><?php<br />$a = 1;<br />$b =& $a;<br />unset($a);<br />?></span>
<code><?php<br />$a = 1;<br />$b =& $a;<br />unset($a);<br />?>설정 해제되지 않음 $b, 그냥 $a
. 참조 위치 지정:전역 참조: 전역 $var로 변수를 선언하면 실제로 전역 변수에 대한 참조가 설정됩니다.
<code><span><?php<br />$var =& $GLOBALS["var"]; //这意味着,例如,unset <var><var>$var</var></var> 不会 unset 全局变量。<br />?></span>
<code><?php<br />$var =& $를 수행하는 것과 같습니다. GLOBALS["var"]; //예를 들어 unset </p></p>$var</p></p>은 전역 변수를 설정하지 않음을 의미합니다. <br />?><span></span>$this: 객체의 메서드에서
$this
는 항상 이를 호출하는 객체에 대한 참조입니다.
14. 사전 정의된 변수
수퍼 전역 변수는 모든 범위에 내장됨- PHP에서 항상 사용할 수 있는 변수 PHP에서 미리 정의된 많은 변수는 "수퍼글로벌"입니다. 즉, 스크립트의 전체 범위에서 사용할 수 있습니다. 전역 $variable을 실행하지 않고도 함수나 메서드 내에서 액세스할 수 있습니다. 이러한 슈퍼 전역 변수는 다음과 같습니다.
$GLOBALS; $_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>
function test() {"수퍼글로벌"은 자동화된 전역변수라고도 합니다. 이는 스크립트의 모든 범위에서 사용할 수 있음을 의미합니다. 이에 액세스하기 위해 함수나 메서드에서 전역 $variable을 사용할 필요가 없습니다. 다른 모든 초전역 변수와 달리 $GLOBALS
는 PHP에서 항상 사용할 수 있습니다.
$_SERVER 헤더 정보(header), 경로(path), 스크립트 위치(script sites) 등의 정보를 담고 있는 배열입니다. 이 배열의 항목은 으로 표시됩니다.
웹서버 생성. $_SERVER에서 다음 요소를 찾을 수도 있고 찾지 못할 수도 있습니다. 열거:
'PHP_SELF': 현재 파일 문서 루트와 관련된 스크립트 이름을 실행 중입니다. 예를 들어, http://example.com/test.php/foo.bar >의 스크립트에서
$_SERVER['PHP_SELF']는 /test.php/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': 현재 요청에 있음 헤더 호스트: 항목의 내용(있는 경우)입니다.
'HTTP_REFERER': 사용자 에이전트를 현재 페이지의 이전 페이지 주소(있는 경우)로 보냅니다. 사용자 에이전트 설정에 따라 결정됩니다. 모든 사용자 에이전트가 이 항목을 설정하는 것은 아니며, 일부 사용자 에이전트는 HTTP_REFERER를 수정하는 기능도 제공합니다. 한마디로 그 가치를 신뢰할 수 없다는 것이다.
'HTTP_USER_AGENT': 현재 요청에 있음 header User-Agent: 항목의 내용(있는 경우)입니다. 이 문자열은 이 페이지에 액세스하는 사용자 에이전트에 대한 정보를 나타냅니다.
'REMOTE_ADDR': 현재 페이지 찾아보기 사용자의 IP 주소입니다.
'REMOTE_HOST': 현재 페이지를 탐색하는 사용자의 호스트 이름입니다. DNS 역방향 확인은 사용자의 REMOTE_ADDR에 의존하지 않습니다.
'SERVER_PORT': 웹에서 사용 서버 포트. 기본값은 "80"입니다. SSL 보안 연결을 사용하는 경우 이 값은 사용자가 설정한 HTTP 포트입니다.
$_GET: URL 매개변수를 통해 현재 스크립트에 전달된 변수 배열입니다. GET은 urldecode()를 통해 전달됩니다.
$_POST: HTTP POST 메소드를 통해 현재 스크립트에 전달되는 변수 정렬. $_FILES : HTTP POST를 통해 현재 스크립트에 업로드된 항목 배열입니다.
$_REQUEST — 명령줄 모드에서 실행할 때 HTTP 요청 변수, argv 및 argc 정보는 포함되지
$_SERVER 배열에 존재합니다.
$_REQUEST의 변수는 GET, POST 및 COOKIE 입력 메커니즘을 통해 스크립트 파일에 전달되므로 원격 사용자가 변조할 수 있으며 신뢰할 수 없습니다. . 이 배열의 항목과 순서는 PHP의variable_order 지시어 구성에 따라 달라집니다.
$_SESSION: 현재 스크립트에서 사용할 수 있는 SESSION 변수 배열입니다.
move_uploaded_file() - 업로드된 파일을 새 위치로 이동합니다. import_request_variables() - GET/POST/쿠키 변수를 전역 범위로 가져옵니다. session_start() - 새 세션을 시작하거나 기존 세션을 재사용합니다. getenv() - 환경 변수 값을 가져옵니다.
$_ENV: 환경을 통해 현재 스크립트에 전달된 변수 배열입니다. 이러한 변수는 PHP 파서의 런타임 환경에서 PHP의 전역 네임스페이스로 가져옵니다. 대부분은 PHP 실행을 지원하는 쉘에 의해 제공되며, 서로 다른 시스템은 서로 다른 종류의 쉘을 실행할 가능성이 높으므로 명확한 목록은 불가능합니다. 정의된 환경 변수 목록은 쉘 문서를 확인하세요. 다른 환경 변수에는 PHP가 서버 모듈로 실행되는지, CGI 프로세서로 실행되는지에 관계없이 CGI 변수가 포함됩니다.
$_COOKIE: HTTP 쿠키 배열을 통해 현재 스크립트에 전달되는 변수입니다. setcookie() - 쿠키 보내기
$php_errormsg — 이전 오류 메시지, $php_errormsg 변수에는 PHP에서 생성된 최신 오류 메시지가 포함되어 있습니다. . 이 변수는 오류가 발생한 범위에서만 사용할 수 있으며, track_errors 구성 항목이 켜져 있어야 합니다(기본값은 꺼져 있음). 사용자가 오류 처리기(set_error_handler())를 정의하고 <code>FALSE을 반환하면 $php_errormsg가 설정됩니다.
<code><span><?php<br />@strpos();<br />echo $php_errormsg; //Wrong parameter count for strpos()<br />?></span>@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><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>
함수 get_contents() {$argc — 스크립트에 전달된 인수 수: 명령줄에서 실행할 때 현재 스크립트에 전달된 인수 수를 포함합니다. 스크립트의 파일 이름은 항상 현재 스크립트에 인수로 전달되므로 $argc의 최소값은 1
입니다. 이 변수는 Register_argc_argv가 켜져 있는 경우에만 사용할 수 있습니다.$argv — 스크립트에 전달된 인수 배열: 명령줄에서 실행할 때 현재 스크립트에 전달된 인수가 포함된 배열입니다. 첫 번째 매개변수는 항상 현재 스크립트의 파일 이름이므로 $argv[0]
가 스크립트 파일 이름입니다. 이 변수는 Register_argc_argv가 켜져 있는 경우에만 사용할 수 있습니다.15. 사전 정의된 예외
Exception은 모든 예외의 기본 클래스입니다. 수업 요약:
예외 {
/* 속성*/
protectedstring$message ;
protectedint$코드 ;
protectedstring$파일 ;
protectedint$line ;
/* 방법*/
<code>$message public__construct ([ string<code>$code = "" [, int<code>$previous = 0 [, Exception<code>NULL = ]]] )
finalpublicstringgetMessage(무효)
finalpublicExceptiongetPrevious(무효)
finalpublicintgetCode(무효)
finalpublicstringgetFile( void )
finalpublicintgetLine( void )
finalpublicarraygetTrace( void )
finalpublic stringgetTraceAsString ( 무효 )
publicstring__toString ( 무효 )
finalprivatevoid__clone ( 무효 )
} 속성: 메시지: 예외 메시지 내용, 코드: 예외 코드, 파일: 발생한 예외의 위치; 파일 줄 번호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。
으로 설정됩니다.
ArrayAccess::offsetUnset — 오프셋 위치 값을 재설정합니다. 유형 변환에 (unset)을 사용할 때는 이 메서드가 호출되지 않습니다.
<code>参数:offset 오프셋 위치를 재설정합니다. 반환 값이 없습니다.직렬화 인터페이스:
Serialized::serialize — 객체의 문자열 표현입니다. 이 메소드는 객체 소멸자 역할을 합니다. 이 메소드 이후에는 __destruct() 메소드가 호출되지 않습니다. 이 함수에는 매개변수가 없으며 객체 또는 <code>NULL의 문자열 표현을 반환합니다.
Serialized::unserialize — 객체를 생성합니다. 이 메소드는 객체 생성자의 역할을 합니다. 이 메서드 이후에는 __construct()가 호출되지 않습니다. 매개변수: 직렬화된 객체의 문자열 표현.
Closure::__construct — 인스턴스화를 금지하는 데 사용되는 생성자입니다. 이 메소드는 Closure 클래스 객체의 인스턴스화를 비활성화하는 데에만 사용됩니다. 이 클래스의 객체 생성 방법은 익명 함수 페이지에 기록되어 있습니다. 이 함수에는 매개변수나 반환 값이 없습니다.
Closure::bind — 클로저를 복사하고 지정된 $this 객체를 클래스 범위에 바인딩합니다. 이 메소드는 Closure::bindTo()의 정적 버전입니다.
매개변수: 클로저 필요 특정 익명 함수에 바인딩됩니다. newthis에는 익명 함수에 바인딩된 개체가 필요합니다. 그렇지 않으면 <code>NULL는 바인딩되지 않은 클로저를 만듭니다. newscope 클로저에 바인딩하려는 클래스 범위 또는 '정적'은 변경되지 않음을 의미합니다. 객체가 전달되면 객체의 유형 이름이 사용됩니다. 클래스 범위는 클로저 내 $this 객체의 비공개 보호 메서드의 가시성을 결정하는 데 사용됩니다. 새로운 Closure 객체를 반환하거나 실패 시 <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
?>class를 반환합니다. A {
private static $sfoo = 1;
private $ifoo = 2;
}
$cl1 = static function() {
return A: :$sfoo ;
};
$cl2 = function() {
return $this->ifoo;
};
$bcl1 = 클로저::bind($cl1 , null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "n" //1
echo $bcl2(), "n"; //2
?>
Closure::bindTo — 현재 클로저 객체를 복사하고 지정된 $this 객체와 클래스 범위를 바인딩합니다. 현재 개체와 동일한 함수 본문을 갖고 동일한 변수를 바인딩하지만 다른 개체 또는 새 클래스 범위를 바인딩할 수 있는 익명 함수를 만들고 반환합니다. "바운드 객체"는 함수 본문의 $this<code>newscope 값을 결정하고, "클래스 범위"는 유형을 나타내며 이 익명 함수에서 호출할 수 있는 비공개 및 보호 메서드를 결정합니다. 즉, 이때 $this가 호출할 수 있는 메소드는 <code>newthis 클래스의 멤버 함수와 동일합니다. 정적 클로저는 바인딩된 개체를 가질 수 없지만(<code>NULL 매개 변수의 값은 로 설정되어야 함) 클래스 범위는 bubdTo 메서드를 사용하여 계속 변경할 수 있습니다. 익명 함수만 복사하려면 복제를 대신 사용할 수 있습니다.
매개변수: newthis는 익명 함수에 바인딩된 개체이거나 바인딩을 해제하려면 <code>NULL입니다. newscope는 익명 함수의 클래스 범위에 연결되거나 'static'은 현재 상태를 유지합니다. 객체인 경우 이 객체의 유형이 경험 클래스의 범위에서 사용됩니다. 이는 바인딩된 개체의 보호된 전용 멤버 메서드의 가시성을 결정합니다. 반환 값: 새로 생성된 Closure 개체를 반환하거나 실패 시 <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
?> br />클래스 A {
함수 __construct($val) {
$this->val = $val;
}
함수 getClosure() {
/ /이 객체와 범위에 바인딩된 클로저를 반환합니다.
return function() { return $this->val };
}
}
$ob1 = new A( 1) ;
$ob2 = 새로운 A(2);
$cl = $ob1->getClosure();
echo $cl(), "n" //1$cl = $cl->bindTo($ob2);
echo $cl(), "n" //2
?>
소켓 설정 컨텍스트 옵션은 tcp, http 및 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>
// '를 사용하여 인터넷에 연결합니다. 192.168.0.100' IPHTTP 컨텍스트 옵션 — HTTP 컨텍스트에 대한 옵션 목록입니다. http:// 및 https://
전송 프로토콜에 대해 제공되는 컨텍스트 옵션입니다. 선택 옵션:입니다.
FTP 컨텍스트 옵션 - FTP 컨텍스트 옵션 목록
SSL 컨텍스트 옵션 - SSL 컨텍스트 옵션 목록입니다. ssl:// 및 tls:// 전송 프로토콜 컨텍스트 옵션 목록입니다. 옵션: 많음.
CURL 컨텍스트 옵션 — CURL 컨텍스트 옵션 목록입니다. CURL 컨텍스트 옵션은 CURL 확장이 컴파일될 때 사용할 수 있습니다(--with-curlwrappers 구성 옵션을 통해). 선택 사항:
<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 컨텍스트 옵션 — Phar 컨텍스트 옵션 목록입니다. phar:// 래퍼에 대한 컨텍스트 옵션입니다. 선택 사항: <code>compressint Phar 압축 상수 중 하나입니다. <code>metadata혼합된 Phar 메타데이터. Phar::setMetadata()를 참조하세요.
컨텍스트 매개변수 — 컨텍스트 매개변수 목록. 이러한 매개변수(매개변수)는 stream_context_set_params() 함수가 반환하는 context로 설정할 수 있습니다. 매개변수: <code>notificationcallable 스트림에서 이벤트가 발생하면 호출 가능 항목이 호출됩니다.
18. 지원 프로토콜 및 캡슐화 프로토콜파일 :// — 로컬 파일 시스템에 액세스합니다. 파일 시스템은 PHP에서 사용하는 기본 캡슐화 프로토콜이며 로컬 파일 시스템을 노출합니다. 상대 경로(/, , \로 시작하지 않는 경로 또는 Windows 드라이브 문자)가 지정된 경우 제공된 경로는 현재 작업 디렉터리를 기반으로 합니다. 대부분의 경우 이는 수정되지 않은 한 스크립트가 상주하는 디렉토리입니다. CLI를 사용하는 경우 디렉터리는 기본적으로 스크립트가 호출되는 디렉터리로 설정됩니다.
fopen() 및 file_get_contents()와 같은 특정 함수에서는 include_path도 선택적으로 검색됩니다. 상대 경로.
属性 | 支持 |
---|---|
受 allow_url_fopen 影响 | No |
允许读取 | Yes |
允许写入 | Yes |
允许添加 | Yes |
允许同时读和写 | Yes |
支持 stat() | Yes |
支持 unlink() | Yes |
支持 rename() | Yes |
支持 mkdir() | Yes |
支持 rmdir() | Yes |
http:// -- https:// — HTTP(s) URL에 액세스합니다. HTTP 1.0 GET 메서드를 통해 파일이나 리소스에 대한 읽기 전용 액세스를 허용합니다. HTTP 요청에는 도메인 이름 기반 가상 호스트와의 호환성을 위해 Host: 헤더가 함께 제공됩니다. user_agent 문자열이 php.ini 파일이나 바이트 스트림 컨텍스트에 구성된 경우 요청에도 포함됩니다. 데이터 스트림을 사용하면 리소스의 본문을 읽을 수 있으며 헤더는 $http_response_header 변수에 저장됩니다.
문서 리소스가 어느 URL에서 왔는지 알아야 하는 경우(모든 리디렉션을 처리한 후) 반환된 일련의 응답 헤더를 처리해야 합니다. 데이터 흐름(응답 헤더)별.
属性 | 支持 |
---|---|
受 allow_url_fopen 限制 | Yes |
允许读取 | Yes |
允许写入 | No |
允许添加 | No |
允许同时读和写 | N/A |
支持 stat() | No |
支持 unlink() | No |
支持 rename() | No |
支持 mkdir() | No |
支持 rmdir() | No |
속성
지원됨
읽기 허용
예
연결 해제() 지원
아니요
属性 | 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 |
속성 | PHP 4 | PHP 5 |
---|---|---|
allow_url_fopen의 영향을 받음 | 예 | 예 |
읽기 허용 | 예 | 예 |
쓰기 허용 | 예(새 파일만 지원) | 예(<code>덮어쓰기 활성화 후 새 파일/기존 파일) |
추가 허용 | 아니요 | 예 |
동시 읽기 및 쓰기 허용 | 아니요 | 아니요 |
stat() 지원 | 아니요 | 5.0.0부터: filesize(), filetype(), file_exists(), is_file() 및 is_dir()만. PHP 5.1.0부터: filemtime().|
연결 해제() 지원 | 아니요 | 예 |
이름 바꾸기() 지원 | 아니요 | 예 |
mkdir() 지원 | 아니요 | 예|
rmdir() 지원 | 아니요 | 예 |
php:// — 다양한 입력/출력 스트림(I/O 스트림)에 액세스합니다. PHP는 PHP의 입력 및 출력 스트림, 표준 입력, 출력 및 오류 설명자, 메모리 내, 디스크 지원 임시 파일 스트림 및 다른 시스템에서 작동할 수 있는 필터에 대한 액세스를 허용하는 다양한 기타 입출력(IO) 스트림을 제공합니다. 읽기-쓰기 파일 리소스.
php://stdin, php://stdout 및 php://stderr을 사용하면 PHP 프로세스의 해당 입력 또는 출력 스트림에 직접 액세스할 수 있습니다. 데이터 스트림은 복사된 파일 설명자를 참조하므로 php://stdin을 연 다음 닫으면 복사본만 닫히고 실제 참조되는 <code>STDIN은 영향을 받지 않습니다. 이 영역에서 PHP의 동작은 PHP 5.2.1까지 버그가 있었습니다. 이러한 래퍼를 수동으로 여는 대신 상수 <code>STDIN, <code>STDOUT 및 <code>STDERR를 사용하는 것이 좋습니다.
php://stdin은 읽기 전용, php://stdout 및 php://stderr만 씁니다.
php://input 요청된 원시 데이터에 대한 액세스를 제공하는 읽기 전용 스트림입니다. POST 요청의 경우 $HTTP_RAW_POST_DATA 대신 php://input을 사용하는 것이 더 좋습니다. php.ini 명령. 또한 이 경우 $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://memory php://temp는 임시 데이터를 읽고 쓸 수 있는 파일 래퍼와 유사한 데이터 스트림입니다. 둘 사이의 유일한 차이점은 php://memory는 항상 메모리에 데이터를 저장하는 반면, php://temp는 메모리 양이 미리 정의된 제한에 도달한 후에 데이터를 저장한다는 것입니다( 기본값은 2MB) 임시 파일에 저장됩니다. 임시 파일 위치는 sys_get_temp_dir()과 동일한 방식으로 결정됩니다. php://temp의 메모리 제한은 /maxmemory:NN을 추가하여 제어할 수 있습니다. NN은 메모리에 유지되는 최대 데이터(바이트)입니다. 용량을 초과하면 임시 파일이 사용됩니다.
php://filter는 메타입니다 데이터 스트림이 열릴 때 애플리케이션을 필터링하도록 설계된 래퍼입니다. 이는 스트림 내용을 읽기 전에 추가 필터를 적용할 기회가 없는 readfile(), file() 및 file_get_contents()와 같은 일체형 파일 함수에 유용합니다. 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:// — 압축된 스트림. 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://는 gzopen() 및 bzopen()과 동일합니다. fopencookie를 지원하지 않는 시스템에서도 사용할 수 있습니다.
ZIP 확장자가 zip: 캡슐화 프로토콜로 등록되었습니다. 선택 사항
data:// — 데이터(RFC 2397 ) . 사용법: 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 |
속성
지원
allow_url_fopen에서 지원
예
쓰기 허용
아니요