>  기사  >  백엔드 개발  >  PHP 오류 처리, 자동 로딩, 스택 메모리 및 실행 모드에 대한 간략한 분석

PHP 오류 처리, 자동 로딩, 스택 메모리 및 실행 모드에 대한 간략한 분석

零到壹度
零到壹度원래의
2018-04-12 10:30:002106검색

이 기사의 내용은 PHP 오류 처리, 자동 로딩, 스택 메모리 및 작동 모드에 대한 간략한 분석을 공유하는 것입니다. 이는 특정 참조 값을 가지고 있습니다. 도움이 필요한 친구는 이를 참조할 수 있습니다

Php

오류 처리

Php

오류 수준:E_ERROR 치명적인 오류로 인해 스크립트 실행이 종료됩니다. 값은 1

E_WARN입니다. ING 경고 오류, 프롬프트 표시 , 종료되지 않습니다. 실행 값은 2

E_PARSE입니다. 컴파일 시 구문 분석 오류가 발생합니다. 구문 분석 오류는 파서에 의해서만 생성됩니다. 값은 4

E_NOTICE입니다. 스크립트에 오류가 발생할 수 있음을 나타내는 런타임 알림 오류입니다. 값은 8

E_CORE_ERROR입니다. 이 오류는 E_ERROR와 유사하지만 PHP 엔진 코어에 의해 생성됩니다. 값은 16

E_CORE_WARNING PHP 초기화 시작 중에 발생한 경고(치명적이지 않은 오류)입니다. E_WARNING과 유사하지만 PHP 엔진 코어에 의해 생성됩니다. 값은 32

E_COMPILE_ERROR입니다. 치명적인 컴파일 시간 오류입니다. E_ERROR와 유사하지만 Zend 스크립트 엔진에 의해 생성됩니다. 값은 64

E_COMPILE_WARNING 컴파일 시간 경고(치명적이지 않은 오류)입니다. E_WARNING과 유사하지만 Zend 스크립팅 엔진에 의해 생성됩니다. 값은 128

E_USER_ERROR입니다. 사용자가 생성한 오류 메시지입니다. E_ERROR와 유사하지만 코드에서 PHP 함수 Trigger_error()를 사용하여 사용자가 생성합니다. 값은 256

E_USER_WARNING 사용자가 생성한 경고 메시지입니다. E_WARNING과 유사하지만 코드에서 PHP 함수 Trigger_error()를 사용하여 사용자가 생성합니다. 값은 512

E_USER_NOTICE 사용자가 생성한 알림 정보입니다. E_NOTICE와 비슷하지만 코드에서 PHP 함수 Trigger_error()를 사용하여 사용자가 생성합니다. 1024

E_STRICT 값은 PHP가 제안한 코드 수정을 활성화하여 코드의 최고의 상호 운용성과 향후 호환성을 보장합니다. 값은 2048

E_RECOVERABLE_ERROR로, 잡을 수 있는 치명적인 오류입니다. 잠재적으로 위험한 오류가 발생했지만 PHP 엔진이 불안정해지지는 않았음을 나타냅니다. 사용자 정의 핸들러(set_error_handler() 참조)에서 오류를 포착하지 못하면 E_ERROR가 되고 스크립트가 종료됩니다. 값은 4096

E_DEPRECATED 런타임 알림입니다. 활성화되면 향후 버전에서 제대로 작동하지 않을 수 있는 코드에 대한 경고가 표시됩니다. 값은 8192

E_USER_DEPRECATED입니다. 사용자가 생성한 경고 메시지입니다. E_DEPRECATED와 비슷하지만 코드에서 PHP 함수 Trigger_error()를 사용하여 사용자가 생성합니다. 16384

E_ALL 값은 E_STRICT를 제외한 모든 오류 및 경고 메시지를 나타냅니다. 값은 30719입니다. 오류를 표시하거나 마스크하기위한 비트 비트 연산자 조합 (바이너리 권한 판결)

php

오류에 대한 구성이 있습니다.

,

레벨 설정은 위에서 볼 수 있습니다기본값은 E_ALL & ~E_NOTICE입니다. 이는 E_NOTICE 및 E_STRICT를 제외한 모든 오류가 표시된다는 의미입니다

E_STRICT 오류 수준은 E_ALL에 포함되지 않으며, 직접 명시적으로 활성화해야 합니다. 레벨은 나타날 수만 있습니다PHP 외부에서 오류 레벨 상수를 사용하는 것은 의미가 없습니다. 모든 오류가 포함된 2147483647과 같은 십진수를 대신 사용할 수 있습니다

display_errors

화면에 오류를 출력할지 여부

ini_set을 사용하여 재설정할 수 있지만 PHP에서 치명적인 오류가 발생하면 설정할 수 없습니다.

display_startup_errors

시작 오류 표시 여부

log_errors

여부 스크립트의 오류 정보는

log

log_errors_max_len

에 기록됩니다.

log_errors에 최대 바이트 수를 설정하세요. 오류 소스에 대한 정보가 error_log에 추가됩니다. 기본값은 1024입니다. 0으로 설정하면 길이에 제한이 없습니다. 이 길이 설정은 기록된 오류, 표시된 오류 및 $php_errormsg를 제한합니다.

ignore_repeated_errors

반복되는 오류 메시지를 기록하지 마세요.

ignore_repeated_source

반복되는 메시지를 무시할 때 메시지의 출처도 무시되었습니다. 이 설정이 켜져 있으면 중복된 메시지는 다른 파일에서 생성되었는지 또는 다른 소스 코드 줄에서 생성되었는지 여부를 기록하지 않습니다.

report_memleaks

이 매개변수를 Off로 설정하면 메모리 누수 정보가 표시되지 않습니다(stdout 또는 로그에). 이 보고서는 Posix 플랫폼의 stderr로 전송되며 Windows에서는 OutputDebugString()을 사용하여 디버거로 전송되며 » DbgView와 같은 도구를 사용하여 볼 수 있습니다. 이는 디버그 컴파일에만 작동하며 error_reporting이 작동하려면 E_WARNING을 포함해야 합니다.

track_errors

활성화된 경우 마지막 오류는 항상 $php_errormsg 변수에 존재합니다.

html_errors

오류 메시지에서 HTML 태그를 닫습니다. 이 새로운 HTML 형식의 오류 메시지는 클릭할 수 있으며 오류나 오류를 발생시킨 기능을 설명하는 참조 페이지로 사용자를 안내합니다. 이러한 참조는 docref_root 및 docref_ext의 설정과 관련됩니다.

error_prepend_string string

오류 메시지 이전의 내용이 출력됩니다.

error_append_string string

오류 메시지 뒤에 출력되는 내용입니다.

error_log

스크립트 오류를 ​​기록할 파일을 설정합니다. 파일은 웹 서버 사용자가 쓸 수 있어야 합니다. 특수 값 syslog가 설정된 경우 오류 메시지가 시스템 로거로 전송됩니다. Unix 및 유사 시스템에서는 syslog(3)가 사용되고 Windows NT 유사 시스템에서는 이벤트 로그가 사용됩니다. Windows 95에서는 시스템 로깅이 지원되지 않습니다. syslog()를 참조하세요. 이 구성이 설정되지 않으면 오류 메시지가 SAPI 오류 로거로 전송됩니다. 예를 들어 Apache의 오류 로그에 나타나거나 CLI의 stderr로 전송됩니다.

오류 처리 관련 방법 및 사용법에 대한 개인적인 이해

debug_backtrace - 백트레이스(backtrace) 생성 매개변수를 설정하여 반환되는 스택 수를 제한할 수 있습니다. 이 함수에 대한 호출을 감지하는 데 사용됩니다. 스택 정보는 TP의 debug

debug_print_backtrace()와 유사하게 문제 해결에 매우 유용합니다. debug_backtrace와 유사하게,

error_clear_last — 최신 오류를 지웁니다

error_get_last — 발생한 마지막 오류를 가져옵니다

error_log - 오류 정보를 특정 위치로 보냅니다. 오류를 파일에 저장할 수 있지만 오류 정보는 null일 수 없습니다.

error_reporting - 어떤 종류의 PHP 오류를 설정합니다. php.ini와 동일하게 보고되어야 합니다.

restore_error_handler — 이전 오류 처리 기능을 복원하고,


restore_Exception_handler — 이전에 정의된 예외 처리 기능을 복원합니다.

set_error_handler — 오류 이전에 정의해야 하는 사용자 정의 오류 처리 함수를 설정합니다.

다음 수준의 오류는 사용자 정의 함수로 처리할 수 없습니다: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR , E_COMPILE_WARNING 및 대부분의 E_STRICT는 set_error_handler() 함수가 호출되는 파일에서 생성됩니다.

error_reporting의 ini 설정이 오류 표시를 제어할 수 있는 것처럼 두 번째 매개변수를 사용하여 error_handler의 트리거링을 차단할 수 있습니다. 이 마스크가 없으면 error_reporting 설정 방법에 관계없이 모든 오류에 대해 error_handler가 호출됩니다.

set_Exception_handler — 사용자 정의 예외 처리 기능 설정

trigger_error — 사용자 수준 오류/경고/알림 메시지 생성

user_error — Trigger_error

의 별칭

register_shutdown_function PHP 종료 스크립트 후에 실행되는 등록 함수, 첫 번째 매개변수는 함수를 지원하고 클래스 및 클래스 메소드를 인스턴스화하는 명령문을 포함하는 배열입니다(등록 시 클래스가 먼저 인스턴스화됩니다). , 오류 없음 모두 캡처 가능)


Php자동 로딩

개인 정보

spl_autoload_register 및 __autoload 차이점은

__autoload 입니다. php에서는 한 번만 사용할 수 있는 기능입니다. 플러그인 등을 로드하려면 계속해서 else 판단을 해야 하거나, 작곡가가 필요합니다.

spl_autoload_register 자동 로딩을 생성하기 위해 폴더나 플러그인을 기반으로 다양한 처리 기능을 사용자 정의할 수 있습니다. 대기열은 대기열이 완료되거나 true가 반환될 때까지 대기열에 따라 검색됩니다(파일이 발견되면 기본 반환은 true입니다)

스택 메모리(personal Understanding)

스택 : 사용자 정의 변수를 저장하는 스택 : 함수에서 정의한 일부 기본 타입 변수와 객체의 참조 변수가 모두 스택 공간을 초과하면 자동으로 해제됩니다.

정보 보충:

Heap

:파일에 정의된 변수가 정적으로 수정되면 변경됩니다. 전역 데이터 영역에 저장되며 스택 메모리

Stack

:스택 메모리는 일반적으로 함수 호출 정보와 함수에 선언된 변수를 저장합니다. 내부 호출 함수보다 먼저 로드되고 실행되며 내부 호출 함수가 끝날 때까지 기다려야 합니다. 결국 이러한 선입후출 메커니즘이 스택 메모리라고 불리는 이유입니다.

PS: 컴파일할 때 컴파일러는 먼저 이 함수에 정의된 모든 변수를 수집하고 함수 앞에 배치하여 메모리를 적용하므로 스택에 넣거나 빼는 순서는 다음과 같습니다. 프로그램을 작성할 때 정의한 순서가 아니라 함수 실행 중에 스택을 전진시키고 함수 실행이 완료된 후 팝아웃합니다.

기타

:Const, global, static은 모두 수정 후 글로벌 데이터 영역에 저장됩니다.

슈퍼 글로벌 변수와 글로벌 변수는 정적 변수로 글로벌 데이터에 저장됩니다. Area

정보가 적고 수정 및 개선을 기다리고 있습니다

Phpweb

실행 모드


Php

실행 모드 : 1) CGI(Universal Common Gateway Interface)

는 일반적으로 EXE 파일과 같은 실행 가능한 프로그램으로 WEB 서버는 각각 다른 프로세스를 차지하며 일반적으로 CGI 프로그램은 하나의 사용자 요청만 처리할 수 있습니다. 이와 같이 사용자 요청 수가 매우 많으면 메모리, CPU 시간 등 시스템 리소스를 많이 차지하게 되어 성능이 저하됩니다.

2.

FastCGI (상주 CGI / Long-Live CGI)
  1. FastCGI는 CGI의 업그레이드 버전입니다. 항상 실행될 수 있습니다. 활성화되면 매번 Fork하는 데 시간이 걸리지 않습니다(이것은 CGI에서 가장 비판받는 Fork 및 실행 모드입니다).

FastCGI는 HTTP 서버와 동적 스크립팅 언어 간의 통신을 위한 확장 가능한 고속 인터페이스입니다. 가장 널리 사용되는 HTTP 서버는 Apache, Nginx 및 lighttpd를 포함한 FastCGI를 지원하는 동시에 PHP를 포함한 많은 스크립팅 언어에서도 지원됩니다.

FastCGI 인터페이스는 C/S 구조를 채택하여 HTTP 서버와 스크립트 파싱 서버를 분리하고 동시에 스크립트 파싱 서버에서 하나 이상의 스크립트 파싱 데몬을 시작할 수 있습니다. HTTP 서버가 동적 프로그램을 만날 때마다 실행을 위해 FastCGI 프로세스로 직접 전달된 다음 결과가 브라우저로 반환됩니다. 이 방법을 사용하면 HTTP 서버가 정적 요청을 독점적으로 처리하거나 동적 스크립트 서버의 결과를 클라이언트에 반환할 수 있으므로 전체 응용 프로그램 시스템의 성능이 크게 향상됩니다.

Php-fpm은 php

와 함께 제공되는 fastcgi 관리자입니다.

3) CLI(Command Line Interface)

  1. 4.웹 모듈 모드(Apache 등 웹 서버가 실행되는 모드)

이 모드는 cgi Extension 기반의 Apache 버전입니다.

  1. 5. ISAPI(Internet Server Application Program Interface)는 Microsoft에서 제공하는 WEB 서비스용 API 인터페이스 집합으로, CGI에서 제공하는 모든 기능을 구현할 수 있습니다. 이를 기반으로 필터 응용 인터페이스를 제공하는 등 확장되었습니다. ISAPI 응용 프로그램은 대부분 사용자가 요청한 후에 실행될 수 있는 DLL 동적 라이브러리 형태로 사용됩니다. 사용자 요청을 처리한 후 즉시 사라지지 않고 메모리에 계속 상주하며 다른 사용자 입력을 기다립니다. 처리됩니다. 또한 ISAPI DLL 응용 프로그램과 WEB 서버가 동일한 프로세스에 있으므로 효율성이 CGI보다 훨씬 높습니다.

Php2 webserver:

Nginx:

사용자가 요청을 시작하고 nginx의 현재 핸드셰이크가 이를 수신하면 처리를 위해 php-fpm으로 푸시됩니다. php-fpm이 사용 중이면 nginx는 504 getway를 반환합니다.

Apache:

Apache에는 프리포크, 작업자, 이벤트,

다른 모드에 따라 다른 처리 프로세스와 스레드를 생성합니다. 해당 PHP를 수신하면 처리를 위해 Apache 모듈로 전달됩니다

위 내용은 PHP 오류 처리, 자동 로딩, 스택 메모리 및 실행 모드에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.