У меня проблемы с Shmop на PHP. Когда я запускаю простой код в оболочке, я могу написать и прочитать то, что я хочу в памяти, но, используя те же самые сценарии на сервере, и ничего не происходит.
Это мой код (write.php)
<?php
$KEY = 672213396;
$smid = shmop_open($KEY, "c", 0644, 5);
$text = "test";
echo shmop_write($smid, $text, 0);
?>
(Read.php)
<?php
$KEY = 672213396;
$smid = shmop_open($KEY, "a", 0644, 100);
echo shmop_read($smid,0,5);
?>
Моя система: Raspberry PI A +, Raspbian Jessy, PHP 5.6.30-0 + deb8u1 (cli), lightpd с модом fastcgi и модом fastcgi-php.
Проблема действительно проста для решения.
Во-первых, мы должны отобразить общую память:
pi@raspberrypi:$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x28112995 32769 www-data 644 15 0
0x28112996 65538 www-data 666 15 0
Когда я запускаю код в первый раз, я использовал 0644 в качестве разрешения, но пользователь из веб-сервера «www-data» и пользователь моей оболочки «pi» не могут получить доступ и записать в эту таблицу памяти только из-за разрешения.
Итак, в моем случае я просто установил разрешения для нормальной работы, у пользователя «пи» есть права на запись, а «www-данные» просто открывают память, чтобы прочитать ее.
Других решений пока нет …