首页 后端开发 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);    }}?>
登录后复制


我在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>
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

实例详解php是如何创建共享内存减少负载的 实例详解php是如何创建共享内存减少负载的 Nov 03, 2022 pm 05:03 PM

本文给大家介绍在PHP中如何创建共享内存减少负载,这里大家要了解一个函数shmop,下面就跟着文章讲解来学习吧~

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

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

一篇搞懂this指向,赶超70%的前端人 一篇搞懂this指向,赶超70%的前端人 Sep 06, 2022 pm 05:03 PM

同事因为this指向的问题卡住的bug,vue2的this指向问题,使用了箭头函数,导致拿不到对应的props。当我给他介绍的时候他竟然不知道,随后也刻意的看了一下前端交流群,至今最起码还有70%以上的前端程序员搞不明白,今天给大家分享一下this指向,如果啥都没学会,请给我一个大嘴巴子。

聊聊Vue2为什么能通过this访问各种选项中属性 聊聊Vue2为什么能通过this访问各种选项中属性 Dec 08, 2022 pm 08:22 PM

本篇文章带大家解读vue源码,来介绍一下Vue2中为什么可以使用 this 访问各种选项中的属性,希望对大家有所帮助!

什么是this?深入解析JavaScript中的this 什么是this?深入解析JavaScript中的this Aug 04, 2022 pm 05:02 PM

什么是this?下面本篇文章给大家介绍一下JavaScript中的this,并聊聊this在函数不同调用方式下的区别,希望对大家有所帮助!

Java中this方法怎么使用 Java中this方法怎么使用 Apr 18, 2023 pm 01:58 PM

一、this关键字1.this的类型:哪个对象调用就是哪个对象的引用类型二、用法总结1.this.data;//访问属性2.this.func();//访问方法3.this();//调用本类中其他构造方法三、解释用法1.this.data这种是在成员方法中使用让我们来看看不加this会出现什么样的状况classMyDate{publicintyear;publicintmonth;publicintday;publicvoidsetDate(intyear,intmonth,intday){ye

使用this关键字的巧妙方式在jQuery中 使用this关键字的巧妙方式在jQuery中 Feb 25, 2024 pm 04:09 PM

jQuery中this关键字的灵活运用在jQuery中,this关键字是一个非常重要且灵活的概念,它用来引用当前正在操作的DOM元素。通过合理的运用this关键字,我们可以方便地操作页面中的元素,实现各种交互效果和功能。本文将结合具体的代码示例,介绍this关键字在jQuery中的灵活运用。简单的this示例首先,我们来看一个简单的this示例。假设我们有一

JavaScript箭头函数中的this详解 JavaScript箭头函数中的this详解 Jan 25, 2024 pm 01:41 PM

JavaScript中箭头函数是一种比较新的语法,没有自己的this关键字,相反箭头函数的this指向包含它的作用域对象,影响方面有:1、箭头函数中的this是静态的;2、箭头函数不能作为构造函数使用;3、箭头函数不能用作方法。

See all articles