PHP7 수정된 함수


  • parse_ini_file() 및 parse_ini_string()의 scanner_mode 매개 변수는 INI_SCANNER_TYPED 옵션을 추가합니다.
  • unserialize()는 허용되는 클래스 목록을 지정하는 데 사용할 수 있는 두 번째 매개변수를 추가합니다. RFC: https://wiki.php.net/rfc/secure_unserialize
  • proc_open()에 의해 열린 최대 제한은 이전에 16으로 하드 코딩되었습니다. 이제 이 제한은 제거되었으며 최대 수는 사용 가능한 메모리에 따라 다릅니다. PHP. Windows 버전에는 블록 단위로 강제 읽기 여부를 지정하는 데 사용할 수 있는 "blocking_pipes" 옵션이 추가되었습니다.
  • array_column(): 이 함수는 이제 2차원 배열뿐만 아니라 객체 배열도 지원합니다.
  • stream_context_create()windows는 array("pipe" => array("blocking" => <boolean> )을 수신할 수 있습니다. ) 매개변수.
  • dirname()은 디렉터리 수준을 지정하는 데 사용할 수 있는 $levels 옵션을 추가합니다. dirname(dirname($foo)) => dirname($foo, 2);
  • debug_zval_dump() 인쇄할 때 long 대신 int를 사용하고 double 대신 float를 사용하세요.


PHP 필터링 unserialize()

PHP 7에는 unserialize()에 대한 필터링을 제공할 수 있는 기능이 추가되어 불법 데이터의 코드 삽입을 방지하고 보다 안전한 역직렬화된 데이터를 제공할 수 있습니다.

Example

<?php
class MyClass1 { 
   public $obj1prop;   
}
class MyClass2 {
   public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 1;
$obj2 = new MyClass2();
$obj2->obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// 默认行为是接收所有类
// 第二个参数可以忽略
// 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
print($data->obj1prop);
print(PHP_EOL);
print($data2->obj2prop);
?>

위 프로그램 실행의 출력 결과는 다음과 같습니다.

1
2