Is it possible to share variables and arrays between all PHP processes without duplicating them?
Using memcached, I think PHP duplicates the used memory:$array = $memcache->get('array');
$array will contain a copy from memcached.
So my idea is, there could be a static variable that was already defined, and shared between all processes.
Using Shmop
:
Shmop is an easy to use set of functions that allows PHP to read, write, create and delete Unix shared memory segments.
from: http://www.php.net/manual/en/intro.shmop.php
No external libraries are needed to build this extension.
The shared Memory Functions
Basic usage
// Create 100 byte shared memory block with system id of 0xff3 $shm_id = shmop_open(0xff3, "c", 0644, 100); if (!$shm_id) { echo "Couldn't create shared memory segment\n"; } // Get shared memory block's size $shm_size = shmop_size($shm_id); echo "SHM Block Size: " . $shm_size . " has been created.\n"; // Lets write a test string into shared memory $shm_bytes_written = shmop_write($shm_id, "my shared memory block", 0); if ($shm_bytes_written != strlen("my shared memory block")) { echo "Couldn't write the entire length of data\n"; } // Now lets read the string back $my_string = shmop_read($shm_id, 0, $shm_size); if (!$my_string) { echo "Couldn't read from shared memory block\n"; } echo "The data inside shared memory was: " . $my_string . "\n"; //Now lets delete the block and close the shared memory segment if (!shmop_delete($shm_id)) { echo "Couldn't mark shared memory block for deletion."; } shmop_close($shm_id);
One way to share memory between PHP processes is to install a PHP-bytecode cache like APC. APC is primarily used for storing the bytecode into an OS managed shared-memory segment, but it also has an API for sharing anything you want between processes (like a local version of memcache).
<?php $foobar = array('foo', 'bar'); apc_store('foobar', $foobar); ?>
Then elsewhere:
<?php $foobar = apc_fetch('foobar'); var_dump($foobar); ?>
The big problem with sharing-memory is that it becomes very easy for two processes to step on each other's foot. So shared memory is best for things that don't change too much, like big global arrays.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With