>백엔드 개발 >PHP 튜토리얼 >PHP의 Assert 및 eval에 대한 자세한 소개(코드 예)

PHP의 Assert 및 eval에 대한 자세한 소개(코드 예)

不言
不言앞으로
2019-03-16 11:54:464725검색

이 기사는 PHP의 Assert 및 eval에 대한 자세한 소개(코드 예제)를 제공합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.

assert 식이 참인지 확인합니다. true 또는 false를 반환합니다.

<?php
$s = 123;
assert("is_int($s)");
?>

이 예에서 eval()과 유사한 문자열 매개 변수가 실행되는 것을 볼 수 있습니다.

하지만 eval($code_str)은 PHP 코딩 사양을 준수하는 $code_str만 실행합니다.

eval(): 이 함수는 나중에 계산하기 위해 데이터베이스 텍스트 필드에 코드를 저장하는 데 유용합니다. (프로덕션에서는 less를 사용하는 것이 좋습니다)
참고: 1. eval()은 문자열이어야 합니다.

        2. 작은 따옴표는 변수 $str을 구문 분석할 수 없으므로 eval()의 따옴표는 큰 따옴표여야 합니다. string ;
eval 정의 및 사용법:
(1) eval() 함수는 PHP 코드에 따라 문자열을 계산합니다(계산 = 실행).
(2)문자열은 올바른 PHP 코드여야 하며 세미콜론으로 끝나야 합니다.
(3) 코드 문자열에서 return 문을 호출하지 않으면 NULL이 반환됩니다. 코드에 파싱 오류가 있으면 eval() 함수는 false를 반환합니다.

assert의 사용법이 좀 더 자세히 설명되어 있습니다.
assert_option()을 사용하여 Assert()에 일부 제약 조건과 제어를 적용할 수 있습니다.
기본값
ASSERT_ACTIVE=1 //Assert 함수 스위치
ASSERT_WARNING =1 //식이 거짓일 때 경고를 출력할지 여부 오류 메시지 , 실패한 각 어설션에 대해 PHP 경고를 발행합니다.
ASSERT_BAIL= 0 //작업을 중단할지 여부, 실패한 어설션에서 실행 종료
ASSERT_QUIET_EVAL= 0 //어설션 표현식 평가 중에 오류 메시지를 비활성화할지 여부;
ASSERT_CALLBACK= (NULL) // 콜백 함수를 시작할지 여부 사용자 함수는 실패한 어설션을 호출합니다.

php 공식 문서에서는 디버깅을 위해 Assert를 사용할 것을 권장합니다. ASSERT_ACTIVE 스위치를 사용하여 이를 제어할 수도 있습니다. 디버그가 켜져 있는지 여부입니다.
이제 질문이 생깁니다. 프로그래머가 개발 중에 코드에 많은 Assert()를 남겨두고 프로그램이 출시될 때 실행을 끄면 Assert_options(ASSERT_ACTIVE,0);을 설정하는 것이 가능할까요? 보안 문제가 있나요?

Assert의 주요 기능은 디버깅이므로 프로그램이 출시될 때 보관하지 마세요. 위에서 언급한 이유는 Assert를 사용하여 프로덕션 환경에서 비활성화될 수 있으므로 Assert를 완전히 신뢰할 수 없다는 것입니다. ; 그리고 프로덕션 환경에서 ASSERT_ACTIVE=1로 설정되면 이 표현식 문자열이 실행될 수 있으며 그 자체로 보안 위험이 있습니다. assert로 인한 코드 삽입
예를 들어

<?php
function fo(){
  $fp = fopen("c:/test.php",&#39;w&#39;);
  fwrite($fp,"123");
  fclose($fp);
  return true;
}
assert("fo()");
?>

참고: Assert는 전체 문자열 매개변수를 PHP 코드로 실행하고 eval은 적법한 PHP 코드를 실행합니다.

위 내용은 PHP의 Assert 및 eval에 대한 자세한 소개(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제