서문
모든 것은 처음이 어렵죠, 그렇죠! !
개발
로깅을 위한 PHP 확장 기능과 지난 며칠 동안의 PHP 롤링 로그는 기본적으로 동일하며 싱글톤 모드에서도 실행됩니다.
개발 시 주의해야 할 몇 가지 사항을 기록해 보세요.
여기에는 몇 가지 부분만 있습니다. 자세한 내용은 제 소스 코드를 보시면서 배우는 것이 가장 좋은 방법이라고 생각합니다. 직접 확인하는 방법을 모르면 더 깊은 메모리를 갖게 됩니다.
zval 구조를 이해하세요. zval은 PHP 커널에 정의된 데이터 구조입니다.
함수에 매개변수를 전달하는 방법<code>//定义在Zend/zend_types.h:55 和 Zend/zend.h:322行 typedef struct _zval_struct zval; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount; zend_uchar type; /* active type */ zend_uchar is_ref; }; typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; } zvalue_value; //其中的zval.type表示变量的类型,基本类型有下面几种,定义在Zend/zend.h:583中 #define IS_NULL 0 #define IS_LONG 1 #define IS_DOUBLE 2 #define IS_BOOL 3 #define IS_ARRAY 4 #define IS_OBJECT 5 #define IS_STRING 6 //部分常用的zval相关函数或者宏,定义在Zend/zend_operators.h:441行 Z_LVAL_P(zval_p) //获取zval_p指针所指向的zval结构的值,值得类型为LONG Z_STRVAL_P(zval_p)</code>
<code>PHP扩展中接受参数的时候通过函数zend_parse_parameters,类似下面的形式进行传参: zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &msg, &msg_len); 第二个参数是要传入参数类型的列表,有下面规范</code>
<code>从PHP5.3开始, zend_parse_paramters_函数新增了如下几个新的类型描述符: f - function or array containing php method call info (returned as zend_fcall_info and zend_fcall_info_cache) H - array or HASH_OF(object) (returned as HashTable) L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long) Z - the actual zval (zval**)</code>참고
<code>zend_declare_property_null(mylogs_ce, ZEND_STRL("level"), ZEND_ACC_PRIVATE TSRMLS_CC); //类似上面的函数是类进行初始化的时候设置变量 zend_declare_class_constant_long(mylogs_ce, ZEND_STRL("LOG_DEBUG"), 0 TSRMLS_CC); //类似上面的函数是类型进行初始化的时候设置常量 zend_read_property(mylogs_ce, instance, ZEND_STRL("level"), 0 TSRMLS_CC); //上面的是从实例instance中读取变量的值 zend_hash_find(&ce->constants_table, ZEND_STRS("LOG_DEBUG"), (void **)&_level); //上面的是从mylogs_ce这个类中读取常量 zend_update_property_long(mylogs_ce, instance, ZEND_STRL("level"), level TSRMLS_CC); //上面的是从instance中读取变量level</code>메모리 누수를 방지하려면 메모리 릴리스에 주의하세요. 개발을 완료한 후 메모리 누수가 발생했다는 사실을 발견했습니다. Valgrind를 사용하여 메모리 누수를 확인하고 해당 메모리를 릴리스할 수 있습니다. 더 이상 필요하지 않습니다. 그렇지 않으면 대규모 루프 처리 중에 과도한 메모리 사용이 발생하여 오류가 발생할 수 있습니다.
-
또 다른 것은 더 많은 예제를 보는 것입니다. Niao 형제의 YAF 소스 코드는 학습 초기에 많은 도움이 되었습니다. 그리고 호랑이를 그렸어요." - 효과를 보자
개발이 완료된 후 스크립트를 작성하여 사용해 보았는데, 주기적으로 로그를 10만번(정확히는 30만번, debug, msg, 과 err 각각 100,000) ), 다음은 환경과 결과입니다
환경:<code>centos虚拟机,64位 内存 1G CPU i5-2410M @ 2.30GHz #这个获取到的是我电脑的</code>PHP 확장을 사용하면 속도가 이전 버전의 약 1/4 정도 빨라지는 것을 볼 수 있습니다. 원본, ㅎㅎ 나쁘지 않아요, 내 코드 최적화할 여지가 많을 수 있으니 열심히 해주세요~~
次数 | PHP代码 | PHP扩展 |
---|---|---|
第一次 | 8.83s | 6.13s |
第二次 | 8.60s | 6.14s |
平均 | 8.72s | 6.14s |
모든 코드는 github에 올렸습니다:
로그인용 PHP 확장 싱글톤 모드
참고 기사
C/C++로 PHP 확장 - Laruence
심층 PHP 변수 저장 구조 - Wen Daxia
2015년 5월 24일 오후 3시 10분 45초이 기사의 저작권은 저자(luluyrt@163.com)에게 있습니다. 기사를 재인쇄한 후 어떠한 형태의 재인쇄도 금지됩니다. , 저자와 저자는 기사 페이지에 명확하게 명시되어야 합니다. 그렇지 않으면 당사는 법적 책임을 추구할 권리를 갖습니다.
위 내용은 내용의 측면을 포함하여 롤링 로깅을 구현하기 위한 PHP 확장-C 확장을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

tomodifyDatainAphPessess, startSessionstession_start (), 그런 다음 $ _sessionToset, modify, orremovevariables.

배열은 PHP 세션에 저장할 수 있습니다. 1. 세션을 시작하고 session_start ()를 사용하십시오. 2. 배열을 만들고 $ _session에 저장하십시오. 3. $ _session을 통해 배열을 검색하십시오. 4. 세션 데이터를 최적화하여 성능을 향상시킵니다.

PHP 세션 쓰레기 수집은 만료 된 세션 데이터를 정리하기위한 확률 메커니즘을 통해 트리거됩니다. 1) 구성 파일에서 트리거 확률 및 세션 수명주기를 설정합니다. 2) CRON 작업을 사용하여 고재 응용 프로그램을 최적화 할 수 있습니다. 3) 데이터 손실을 피하기 위해 쓰레기 수집 빈도 및 성능의 균형을 맞춰야합니다.

PHP의 사용자 세션 활동 추적은 세션 관리를 통해 구현됩니다. 1) Session_start ()를 사용하여 세션을 시작하십시오. 2) $ _session 배열을 통해 데이터를 저장하고 액세스하십시오. 3) 세션 _destroy ()를 호출하여 세션을 종료합니다. 세션 추적은 사용자 행동 분석, 보안 모니터링 및 성능 최적화에 사용됩니다.

데이터베이스를 사용하여 PHP 세션 데이터를 저장하면 성능 및 확장 성을 향상시킬 수 있습니다. 1) 세션 데이터를 저장하기 위해 MySQL 구성 : php.ini 또는 php 코드에서 세션 프로세서를 설정하십시오. 2) 사용자 정의 세션 프로세서 구현 : 데이터베이스와 상호 작용하기 위해 열린, 닫기, 읽기, 쓰기 및 기타 기능을 정의합니다. 3) 최적화 및 모범 사례 : 인덱싱, 캐싱, 데이터 압축 및 분산 스토리지를 사용하여 성능을 향상시킵니다.

phpsessionstrackuserdataacrossmultiplepagerequestsususingauniqueIdStoredInAcookie.here'showtomanagetheMeftically : 1) STARTASESSIONSTART_START () andSTAREDATAIN $ _SESSION.2) RegenerATERATESSESSIDIDAFTERLOGINWITHSESSION_RATERATERATES (True) TopreventSES

PHP에서 세션 데이터를 통한 반복은 다음 단계를 통해 달성 할 수 있습니다. 1. Session_start ()를 사용하여 세션을 시작하십시오. 2. $ _session 배열의 모든 키 값 쌍을 통해 Foreach 루프를 통과합니다. 3. 복잡한 데이터 구조를 처리 할 때 is_array () 또는 is_object () 함수를 사용하고 print_r ()를 사용하여 자세한 정보를 출력하십시오. 4. Traversal을 최적화 할 때 페이징을 사용하여 한 번에 많은 양의 데이터를 처리하지 않도록 할 수 있습니다. 이를 통해 실제 프로젝트에서 PHP 세션 데이터를보다 효율적으로 관리하고 사용하는 데 도움이됩니다.

이 세션은 서버 측 상태 관리 메커니즘을 통해 사용자 인증을 인식합니다. 1) 세션 생성 및 고유 ID의 세션 생성, 2) ID는 쿠키를 통해 전달됩니다. 3) ID를 통해 서버 저장 및 세션 데이터에 액세스합니다. 4) 사용자 인증 및 상태 관리가 실현되어 응용 프로그램 보안 및 사용자 경험이 향상됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
