php shmop_open的有关问题
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>

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

이 글에서는 PHP에서 공유 메모리를 생성하여 부하를 줄이는 방법을 소개합니다. 여기서는 shmop 함수를 이해해야 합니다.

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

이 글은 Vue 소스 코드를 해석하는 데 도움이 될 것이며 이를 사용하여 Vue2의 다양한 옵션에서 속성에 액세스할 수 있는 이유를 소개하는 것이 모든 사람에게 도움이 되기를 바랍니다!

Vue2의 이 포인팅 문제로 인해 동료가 버그로 인해 화살표 기능이 사용되어 해당 소품을 얻을 수 없게 되었습니다. 제가 그에게 소개했을 때 그는 그것을 몰랐고, 그래서 저는 일부러 프론트엔드 커뮤니케이션 그룹을 살펴보았습니다. 지금까지 적어도 70%의 프론트엔드 프로그래머들은 오늘 그것을 이해하지 못하고 있습니다. 모든 것이 불분명하다면 이 링크를 아직 배우지 않았다면 큰 소리로 말해주세요.

jQuery에서 this 키워드의 유연한 사용 jQuery에서 this 키워드는 현재 조작 중인 DOM 요소를 참조하는 데 사용되는 매우 중요하고 유연한 개념입니다. 이 키워드를 합리적으로 사용함으로써 페이지의 요소를 쉽게 조작하고 다양한 인터랙티브 효과와 기능을 얻을 수 있습니다. 이 기사에서는 특정 코드 예제를 결합하여 jQuery에서 이 키워드를 유연하게 사용하는 방법을 소개합니다. 간단한 이 예 먼저 간단한 이 예를 살펴보겠습니다. 우리가

이게 뭔가요? 다음 기사에서는 JavaScript에서 이에 대해 소개하고 다양한 함수 호출 방법의 차이점에 대해 설명하겠습니다. 도움이 되기를 바랍니다.

JavaScript는 이 포인터를 어떻게 변경합니까? 다음 기사에서는 JS에서 이 포인터를 변경하는 세 가지 방법을 소개합니다. 이것이 도움이 되기를 바랍니다.

1. this 키워드 1. this 유형: 호출되는 개체는 해당 개체의 참조 유형입니다. 2. 사용법 요약 1. this.data;//Access 속성 2. this.func();//Access 메서드 3.this ( );//이 클래스의 다른 생성자를 호출합니다. 3. 사용법 설명 1.this.data가 멤버 메서드에 사용됩니다. 이것이 추가되지 않으면 어떻게 되는지 살펴보겠습니다. classMyDate{publicintyear;publicintmonth;publicintday; 월,월){예
