Maison développement back-end tutoriel php php shmop_open的有关问题

php shmop_open的有关问题

Jun 13, 2016 am 10:27 AM
quot shmop this

php shmop_open的问题

PHP code
<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?php $arr=array();function application($key,$value=""){    global $arr;    if($value=="")    {        $shm_id = @shmop_open(12345, "a", 0644,100);    }else{        @$shm_id = shmop_open(12345, "c",0,0);        if(!$shm_id)        {            $shm_id=shmop_open(12345,"c",0644,100);        }    }    @$byte=shmop_read($shm_id,0,1024*1024);    if(!$byte){        return "";    }else{        if($byte!=""){            $arr=unserialize($byte);        }else{            return "";        }    }    if($value=="")//取值    {        shmop_close($shm_id);        if(array_key_exists($key,$arr))        {            return $arr[$key];        }        return "";    }else{        $arr[$key]=$value;        shmop_write($shm_id,serialize($arr),0);        shmop_close($shm_id);    }}?>
Copier après la connexion


我在php中实现asp中的application对象的功能
目前的问题是在同一个http请求之中,执行了application("a","1"),那么application("a")会返回1,上面这个函数是正常的
但如果开始第二个请求了,application("a")就取不到值了
问题出在哪儿啊?


------解决方案--------------------
shmop_open(12345, "a", 0644,100);
表示最大可能的空间(字节数)
而你 shmop_read($shm_id,0,1024*1024);
读取时就越界了,这就是所谓的内存溢出
------解决方案--------------------
一般可以这样写
PHP code
$p = new shared;//$p->a = 'abcd';//$p->b = 1234;print_r($p->_all);echo $p->b;class shared {  private $shm_id;  private $shm_key = 0xff3;  private $shm_size = 1024;  function __construct() {    $this->shm_id = shmop_open($this->shm_key, "c", 0644, $this->shm_size) or die('申请失败');  }  function __get($name) {    $buf = shmop_read($this->shm_id, 0, $this->shm_size);    $buf = unserialize(trim($buf));    if($name == '_all') return $buf;    return isset($buf[$name]) ? $buf[$name] : false;  }  function __set($name, $value) {    $buf = shmop_read($this->shm_id, 0, $this->shm_size);    $buf = unserialize(trim($buf));    $buf[$name] = $value;    $buf = serialize($buf);    if(strlen($buf) >= $this->shm_size) die('空间不足');    shmop_write($this->shm_id, $buf, 0) or die('写入失败');  }}<br><font color="#e78608">------解决方案--------------------</font><br>和你上一个帖子一样,讨论是在基于 php_shmop.dll 扩展的<br><br>linux 中有另外的方法,但原理是一样的<br>php_shmop 也可以在 linux 中编译,但他却是为 window 设计的<br><br><font color="#e78608">------解决方案--------------------</font><br>我就明着告诉你,你这个问题大了.<br><br>共享内存区需要加锁操作, php没法设置进程共享的mutex, 你可以同样适用一个system v 的sem二值信号量来做锁.<div class="clear">
                 
              
              
        
            </div>
Copier après la connexion
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Exemple détaillé de la façon dont PHP crée de la mémoire partagée pour réduire la charge Exemple détaillé de la façon dont PHP crée de la mémoire partagée pour réduire la charge Nov 03, 2022 pm 05:03 PM

Cet article vous présentera comment créer de la mémoire partagée en PHP pour réduire la charge. Ici, vous devez comprendre une fonction shmop. Suivons l'article pour apprendre ~.

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

Un article qui comprend ce point et rattrape 70% des front-end Un article qui comprend ce point et rattrape 70% des front-end Sep 06, 2022 pm 05:03 PM

Un collègue est resté bloqué à cause d'un bug signalé par ce problème de pointage de Vue2 qui a provoqué l'utilisation d'une fonction de flèche, entraînant l'impossibilité d'obtenir les accessoires correspondants. Il ne le savait pas quand je le lui ai présenté, puis j'ai délibérément regardé le groupe de communication front-end. Jusqu'à présent, au moins 70 % des programmeurs front-end ne le comprennent toujours pas. Aujourd'hui, je vais partager avec. vous ce lien. Si tout n'est pas clair Si vous ne l'avez pas encore appris, s'il vous plaît, faites-moi une grande gueule.

Voyons pourquoi Vue2 peut accéder aux attributs dans diverses options via ceci Voyons pourquoi Vue2 peut accéder aux attributs dans diverses options via ceci Dec 08, 2022 pm 08:22 PM

Cet article vous aidera à interpréter le code source de Vue et à vous expliquer pourquoi vous pouvez l'utiliser pour accéder aux propriétés de diverses options de Vue2. J'espère qu'il sera utile à tout le monde !

Qu'est-ce que c'est? Une analyse approfondie de cela en JavaScript Qu'est-ce que c'est? Une analyse approfondie de cela en JavaScript Aug 04, 2022 pm 05:02 PM

Qu'est-ce que c'est? L'article suivant vous présentera cela en JavaScript et parlera des différences entre cela dans les différentes méthodes d'appel de fonctions. J'espère que cela vous sera utile !

Comment utiliser cette méthode en Java Comment utiliser cette méthode en Java Apr 18, 2023 pm 01:58 PM

1. ce mot-clé 1. Type de ceci : L'objet appelé est le type de référence de cet objet 2. Résumé de l'utilisation 1. this.data;//Attribut d'accès 2. this.func();//Méthode d'accès 3.this ( );//Appelez d'autres constructeurs de cette classe 3. Explication de l'utilisation 1.this.data est utilisé dans les méthodes membres. Voyons ce qui se passera si cela n'est pas ajouté classMyDate{publicintyear;publicintmonth;publicintday; intmois,intjour){oui

Une manière intelligente d'utiliser ce mot-clé dans jQuery Une manière intelligente d'utiliser ce mot-clé dans jQuery Feb 25, 2024 pm 04:09 PM

Utilisation flexible du mot-clé this dans jQuery Dans jQuery, le mot-clé this est un concept très important et flexible. Il est utilisé pour désigner l'élément DOM en cours de manipulation. En utilisant rationnellement ce mot-clé, nous pouvons facilement exploiter les éléments de la page et obtenir divers effets et fonctions interactifs. Cet article combinera des exemples de code spécifiques pour présenter l'utilisation flexible de ce mot-clé dans jQuery. Cet exemple simple Tout d'abord, regardons un exemple simple. Supposons que nous ayons un

Explication détaillée de ceci dans la fonction flèche JavaScript Explication détaillée de ceci dans la fonction flèche JavaScript Jan 25, 2024 pm 01:41 PM

La fonction flèche en JavaScript est une syntaxe relativement nouvelle. Elle n'a pas son propre mot-clé this. Au contraire, le this de la fonction flèche pointe vers l'objet scope qui la contient. Les impacts sont : 1. Ceci dans la fonction flèche est. static ; 2. Les fonctions fléchées ne peuvent pas être utilisées comme constructeurs ; 3. Les fonctions fléchées ne peuvent pas être utilisées comme méthodes.

See all articles