php에는 공유 메모리를 사용하는 두 가지 기능 세트가 있습니다. 하나는 System V IPC 기능 패키지이고 다른 하나는 shmop입니다. 둘 다 외부 라이브러리를 설치할 필요가 없습니다. 전자는 Linux에서만 사용할 수 있으며, 사용하려면 PHP 설치 시 –enable-sysvshm 옵션을 추가해야 합니다. 후자는 Linux와 Windows 모두에서 사용할 수 있습니다. (win2k 이후 시스템, win98은 지원하지 않습니다.) ), 그러나 Windows에서는 PHP가 ISAPI 실행 모드에 있어야만 제대로 작동할 수 있습니다. PHP를 설치할 때 –enable-shmop를 추가해야 합니다.
이 두 가지 기능의 사용법은 매우 간단합니다. 자세한 내용은 PHP 매뉴얼을 참조하세요.
1. System V의 공유 메모리 사용량:
// 메모리 블록 생성
$key = 12345 // 공유 메모리 키, 참고: 유형은 int
$memsize = 100; // 공유 메모리 크기, 단위 바이트
$perm = 0666; // 공유 메모리 접근 권한, Linux 권한 참조
$var_key = 345; memory 변수의 키, 참고: 유형은 int입니다.
$shmid = shm_attach( $key, $memsize, $perm ) // 공유 메모리 생성
shm_put_var( $shmid, $var_key, "abc " ); // 공유 메모리 변수 삽입, 키는 $var_key, 값은 "abc"
shm_detach( $shmid ); // 공유 메모리 닫기
?>
위 PHP 실행 12345라는 공유 메모리의 크기는 100바이트이고, 그 안에 "abc"라는 값을 갖는 변수가 있습니다. 생성된 공유 메모리 정보를 보려면 Linux 명령줄에 ipcs를 입력하세요. 262144 daemon 666 100 0 0
참고: 0×00003039는 12345의 16진수 형식입니다.
새로 생성된 공유 메모리에 액세스하고 이 공유 메모리의 PHP 코드를 삭제합니다.
// 메모리 블록 내용 읽기
$shmid = shm_attach( 12345 ); / / 키 12345로 공유 메모리에 액세스
echo shm_get_var( $shmid, 345 ) // 공유 메모리에서 키 345로 변수를 인쇄하면 여기에 abc가 표시됩니다
shm_remove( $shmid ); 삭제 공유 메모리
?>
위 php 코드를 실행하면 abc가 출력되고, 공유 메모리가 삭제됩니다. 이때, ipcs를 다시 실행하면 공유 메모리가 삭제되는 것을 볼 수 있습니다. 더 이상 존재합니다.
2. shmop의 공유 메모리 사용량:
// 메모리 블록 생성
$key = 12345 // 공유 메모리 키
$memsize = 100 ; // 공유 메모리 크기, 단위 바이트
$perm = 0666; // 공유 메모리 액세스 권한, Linux 권한 참조
$offset = 0 // 공유 메모리 오프셋 주소, 0은 공유 메모리 시작 주소
$shmid = shmop_open($key, "c", $perm, $memsize); // 공유 메모리를 생성합니다. 두 번째 매개변수 c는 생성을 나타냅니다.
$shm_bytes_write = shmop_write($shm_id, "abc", 0 ); // 공유 메모리에 "abc"를 씁니다.
echo $shm_bytes_write; // 공유 메모리에 쓴 데이터의 길이를 출력합니다. 여기에는 3이 표시됩니다.
shmop_close($shm_id); 공유 메모리 닫기
?>
이 PHP를 실행하면 "abc" 문자열이 기록된 키 12345, 크기 100바이트의 공유 메모리가 생성됩니다. 우리는 이 공유 메모리에 접근하기 위해 PHP를 작성하고 있습니다:
// 메모리 블록 읽기
$shm_id = shmop_open(12345, "w", 0, 0) // 키 열기 12345의 공유 메모리입니다. 두 번째 매개변수 w는 읽기-쓰기 모드로 열기를 의미하며, 세 번째와 네 번째 매개변수는 0이어야 합니다.
$shm_data = shmop_read($shm_id, 0, 3 ); // 공유 메모리에서 3바이트의 데이터를 읽습니다. 두 번째 매개변수는 오프셋 주소입니다. 0은 공유 메모리의 시작 주소를 나타냅니다.
echo $shm_data; // 이전 함수에서 반환된 공유 값을 출력합니다. 메모리 데이터
shmop_delete($shm_id); // 공유 메모리 삭제
?> 이 PHP를 실행하면 abc가 출력되고 원래 공유 메모리가 삭제됩니다.
요약:
1. 두 기능 세트 모두 간단하고 사용하기 쉽습니다. shmop의 유일한 장점은 Windows에서 사용할 수 있다는 것입니다. Linux에서는 해당 기능 세트가 사용되므로 shm_* 기능 세트를 사용하는 것이 좋습니다. 공유 메모리를 삽입하고 업데이트하고 읽을 때 변수는 매우 편리하지만 shmop은 공유 메모리의 저장 구조를 자체적으로 계획해야 하므로 적용하기가 조금 더 복잡합니다. 또한 위의 예에서는 공유 메모리의 키로 12345라는 숫자를 직접 사용했습니다. 실제로 더 표준적인 접근 방식은 ftok 함수를 사용하여 경로를 ipc 키로 변환하는 것입니다. 구체적인 방법은 PHP 매뉴얼을 참고하세요.
2. shmop 사용 시, 사용이 완료된 후 shmop_delete() 작업을 수행하지 않으면 다음 번에 공유 메모리 변수 값을 쓸 때 문제가 발생합니다. 다음 쓰기 길이에는 앞면만 덮고 초과 내용은 유지됩니다. 반대로, 이전 쓰기 길이가 다음 쓰기 길이보다 작으면 초과된 내용이 자동으로 끝에 추가됩니다.
3. 메모리 공유 시 필요한 키와 변수는 모두 int형입니다.
=========================
공유 메모리 공간 생성을 엽니다.
구문: int shm_attach(int key, int [memsize], int [perm])
반환값: 정수
함수 유형: 운영 체제 및 환경
내용 설명: 이 함수는 open 또는 공유 메모리 공간을 생성합니다. 매개변수 키가 이 부분의 키입니다. memsize 매개변수는 생략 가능하며, 필요한 최소 메모리 공간(단위는 바이트 그룹)을 나타냅니다. 기본값은 php3.ini 또는 php.ini의 sysvshm.init_mem에 구성되어 있습니다. 구성이 없으면 10000바이트입니다. 이 메모리 공간의 사용 권한을 결정하기 위해 perm 매개변수를 생략할 수도 있습니다. 기본값은 666입니다. 반환값은 프로그램에서 사용할 수 있는 공유 메모리의 ID 값이다.
shm_detach
공유 메모리 공간 링크를 중단합니다.
구문: int shm_detach(int shm_identifier);
반환값: 정수
함수 종류: 운영 체제 및 환경
내용 설명: 이 함수는 공유 메모리 공간과의 링크를 종료하는 데 사용됩니다. shm_identifier 매개변수는 중지할 부분의 공유 메모리 ID 값입니다.
shm_remove
메모리 공간을 비웁니다.
구문: int shm_remove(int shm_identifier);
반환값: 정수
함수 유형: 운영 체제 및 환경
내용 설명: 이 함수는 공유 메모리 공간의 모든 데이터를 지우는 데 사용됩니다. shm_identifier 매개변수는 중지할 부분의 공유 메모리 ID 값입니다.
shm_put_var
메모리 공간에 변수를 추가하거나 업데이트합니다.
구문: int shm_put_var(int shm_identifier, int 변수_key, 혼합 변수);
반환값: 정수
함수 유형: 운영 체제 및 환경
내용 설명: 이 함수는 증가하거나 수정하는 데 사용할 수 있습니다. 메모리 공간 변수 값. shm_identifier 매개변수는 추가 및 수정될 공유 메모리 ID 값입니다. 변수variable_key는 추가 및 수정될 변수 이름 키입니다. 매개변수 변수는 변수의 내용입니다. 변수 유형은 double, 정수, 문자열 또는 배열일 수 있습니다.
shm_get_var
메모리 공간에 지정된 변수를 가져옵니다.
구문: 혼합 shm_get_var(int shm_identifier, int Variable_key);
반환 값: 혼합 유형 데이터
함수 유형: 운영 체제 및 환경
내용 설명: 이 함수는 지정된 값을 얻는 데 사용할 수 있습니다. 메모리 공간 변수 값에. shm_identifier 매개변수는 획득할 공유 메모리 ID 값입니다. Variable_key 매개변수는 획득할 변수 이름 키입니다. 반환 값은 지정된 변수 키의 값입니다.
shm_remove_var
메모리 공간에 지정된 변수를 삭제합니다.
구문: int shm_remove_var(int id, int Variable_key);
반환값: 정수
함수 유형: 운영 체제 및 환경
내용 설명: 이 함수는 지정된 변수 값을 삭제하는 데 사용할 수 있습니다. 기억 공간 . shm_identifier 매개변수는 제거할 공유 메모리 ID 값입니다. Variable_key 매개변수는 삭제할 변수 이름 키입니다