Al parecer falla alguna validación y la forma de escribir el nuevo valor, con tu código siempre obtenía cero en la lectura, prueba esto:
Código PHP:
Ver original<?php
// abro el espacio 0xff3 de 8 bits, si no existe lo crea
if (!$shm_id) die("No se pudo acceder la memoria"); // leo el valor de esta posicion
// Validación previa
if($shmr === false) {
echo "[No se puede leer]";
$shmr = 0;
} else {
echo "[size:$shm_size][reading:$shmr]";
}
// si el valor es 1 lo cambio por 0, y si es 0 lo cambio por 1, y guardo el resultado.
$val = ($shmr == 0) ? 1 : 0;
echo "[writing:$shmw][val:$val]";
Con eso si alterna los valores cero y uno entre cada lectura.