php教程 php手册 php读取内存顺序号,生成唯一ID。

php读取内存顺序号,生成唯一ID。

Jun 06, 2016 pm 07:37 PM
google php 암호 메모리 오직 생성하다 읽다

此代码google一下千千万,请不要被收藏或者使用。谢谢合作。 作者只是做记录。 注:需要开启扩展extension=php_shmop.dll 无 /* * 信号量(Semaphore)。 * 这是一个包装类,用于解决不同平台下对“信号量”的不同实现方式。 * 目前这个类只是象征性的,在 Wind

此代码google一下千千万,请不要被收藏或者使用。谢谢合作。
作者只是做记录。
注:需要开启扩展  extension=php_shmop.dll 
/*
 * 信号量(Semaphore)。
 * 这是一个包装类,用于解决不同平台下对“信号量”的不同实现方式。
 * 目前这个类只是象征性的,在 Windows 平台下实际是空跑(并没有真的实现互斥)。
 */
class SemWrapper
{
    private $hasSemSupport;
    private $sem;
    const SEM_KEY = 1;

    public function __construct()
    {
        $this->hasSemSupport = function_exists( 'sem_get' );
        if ( $this->hasSemSupport ) {
            $this->sem = sem_get( self::SEM_KEY );
        }
    }

    public function acquire() {
        if ( $this->hasSemSupport ) {
            return sem_acquire( $this->sem );
        }
        return true;
    }

    public function release() {
        if ( $this->hasSemSupport ) {
            return sem_release( $this->sem );
        }
        return true;
    }
}
로그인 후 복사
/*
 * 顺序号发生器。
 */
class SeqGenerator
{
    const SHM_KEY = 1;

    /**
     * 对顺序号发生器进行初始化。
     * 仅在服务器启动后的第一次调用有效,此后再调用此方法没有实际作用。
     * @param int $start 产生顺序号的起始值。
     * @return boolean 返回 true 表示成功。
     */
    static public function init( $start = 1 )
    {
        // 通过信号量实现互斥,避免对共享内存的访问冲突
        $sw = new SemWrapper;
        if ( ! $sw->acquire() ) {
            return false;
        }

        // 打开共享内存
        $shm_id = shmop_open( self::SHM_KEY, 'n', 0644, 4 );
        if ( empty($shm_id) ) {
            // 因使用了 'n' 模式,如果无法打开共享内存,可以认为该共享内存已经创建,无需再次初始化
            $sw->release();
            return true;
        }

        // 在共享内存中写入初始值
        $size = shmop_write( $shm_id, pack( 'L', $start ), 0 );
        if ( $size != 4 ) {
            shmop_close( $shm_id );
            $sw->release();
            return false;
        }

        // 关闭共享内存,释放信号量
        shmop_close( $shm_id );
        $sw->release();
        return true;
    }

    /**
     * 产生下一个顺序号。
     * @return int 产生的顺序号
     */
    static public function next()
    {
        // 通过信号量实现互斥,避免对共享内存的访问冲突
        $sw = new SemWrapper;
        if ( ! $sw->acquire() ) {
            return 0;
        }

        // 打开共享内存
        $shm_id = shmop_open( self::SHM_KEY, 'w', 0, 0 );
        if ( empty($shm_id) ) {
            $sw->release();
            return 0;
        }

        // 从共享内存中读出顺序号
        $data = shmop_read( $shm_id, 0, 4 );
        if ( empty($data) ) {
            $sw->release();
            return 0;
        }

        $arr = unpack( 'L', $data );
        $seq = $arr[1];

        // 把下一个顺序号写入共享内存
        $size = shmop_write( $shm_id, pack( 'L', $seq + 1 ), 0 );
        if ( $size != 4 ) {
            $sw->release();
            return 0;
        }

        // 关闭共享内存,释放信号量
        shmop_close( $shm_id );
        $sw->release();
        return $seq;
    }
}
로그인 후 복사
//使用方法

$seq = SeqGenerator::next();

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

CakePHP 프로젝트 구성

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

CakePHP 날짜 및 시간

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

CakePHP 파일 업로드

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

CakePHP 라우팅

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP 토론

Google은 대부분의 사용자에게 AI Test Kitchen 및 Imagen 3를 공개합니다. Google은 대부분의 사용자에게 AI Test Kitchen 및 Imagen 3를 공개합니다. Sep 12, 2024 pm 12:17 PM

Google은 대부분의 사용자에게 AI Test Kitchen 및 Imagen 3를 공개합니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법

See all articles