PHP에서는 php.ini 지시문으로 특정 함수와 클래스를 비활성화 할 수 있습니다.
이 지시문은 악의적인 행위자가 서버에서 코드 실행 액세스를 얻는 경우에도 잠재적으로 안전하지 않은 기능이 사용되지 않도록 하는 데 주로 사용되었습니다.
PHP 8에서 비활성화 된 함수는 함수 테이블에 포함되어 있지 않습니다. 즉, function_exists() 호출은 비활성화 된 함수에 대해 false를 반환하며, 가장 중요한 것은 비활성화 된 함수를 재정의 할 수 있다는 의미입니다.
https://php.watch/articles/php8-override-internal-functions
예
다음은 사용자 랜드 구현으로 sleep() 함수를 재정의 하는 예입니다.
1. 새로운 기능 정의 작성
함수를 비활성화 하면 테스트중인 코드의 어느 곳에서나 함수를 사용할 수 없습니다. 테스트 프레임 워크 자체에서 사용하는 특정 기능 (예 : 테스트 실행 시간을 계산하는 데 자주 사용되는 microtime())을 재정의 하는 경우 해당 기능을 중단하지 않도록 주의해야 합니다.
// test.php
function sleep() {
return;
}
\sleep(1662815);
test.php 파일에서 실제로 실행을 유지하지 않고 sleep() 함수를 즉시 반환하도록 재정의 합니다.
우리는 정규화 된 함수 이름을 어떻게 사용했는지 주목하고 작동합니다.
2. disable_functions INI 지시문으로 스크립트를 실행하십시오.
php -d disable_functions=sleep test.php
코드를 실행하면 PHP는 먼저 내부 절전 기능을 비활성화하고 PHP 8 변경으로 인해 사용자 정의 test.php 파일은 새로운 절전 기능을 정의 할 수 있습니다.
등록된 댓글이 없습니다.