**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.** # Howto Sharedance Sharedance est un logiciel très simple conçu pour stocker des sessions en mémoire. Il est notamment utilisé sur les [Skyblogs](http://www.skyrock.com/blog/) Il n'est plus maintenu depuis 2006 mais vu sa simplicité, son utilisation peut encore être envisagée. ## Installation ~~~ $ wget $ tar xvf sharedance-0.6.tar.gz $ cd sharedance-0.6 $ ./configure $ make # make install ~~~ Il peut être lancé ainsi : ~~~ # /usr/sbin/sharedanced --uid=65534 --gid=65534 --directory=/var/tmp --daemonize --expiration=10800 ~~~ Son utilisation avec PHP se fait ainsi dans le fichier _php.ini_ : ~~~ auto_prepend_file = /usr/local/etc/sharedance.php ;session.save_handler = user ;session.save_handler = files ~~~ avec un fichier _sharedance.php_ du type : ~~~{.php} > 24) & 0xff, ($key_len >> 16) & 0xff, ($key_len >> 8) & 0xff, $key_len & 0xff, ($data_len >> 24) & 0xff, ($data_len >> 16) & 0xff, ($data_len >> 8) & 0xff, $data_len & 0xff); $s .= $key; $s .= $data; fwrite($GLOBAL_SHAREDANCE_FP, $s); if (@fgets($GLOBAL_SHAREDANCE_FP) !== "OK\n") { sharedance_close(); return -1; } sharedance_close(); return 0; function sharedance_fetch($key) { global $GLOBAL_SHAREDANCE_FP; if (sharedance_reopen() !== 0) { return -1; } $key_len = strlen($key); $s = sprintf('F%c%c%c%c', ($key_len >> 24) & 0xff, ($key_len >> 16) & 0xff, ($key_len >> 8) & 0xff, $key_len & 0xff); $s .= $key; stream_set_blocking($GLOBAL_SHAREDANCE_FP, 0); fwrite($GLOBAL_SHAREDANCE_FP, $s); stream_set_blocking($GLOBAL_SHAREDANCE_FP, 1); $data = ''; while (($tmp = @fread($GLOBAL_SHAREDANCE_FP, 4096)) != FALSE) { $data .= $tmp; } sharedance_close(); if ($data === '') { return FALSE; } return $data; } function sharedance_delete($key) { global $GLOBAL_SHAREDANCE_FP; if (sharedance_reopen() !== 0) { return -1; } $key_len = strlen($key); $s = sprintf('D%c%c%c%c', ($key_len >> 24) & 0xff, ($key_len >> 16) & 0xff, ($key_len >> 8) & 0xff, $key_len & 0xff); $s .= $key; stream_set_blocking($GLOBAL_SHAREDANCE_FP, 0); fwrite($GLOBAL_SHAREDANCE_FP, $s); stream_set_blocking($GLOBAL_SHAREDANCE_FP, 1); if (@fgets($GLOBAL_SHAREDANCE_FP) !== "OK\n") { sharedance_close(); return -1; } sharedance_close(); return 0; } function session_handler_open($save_path, $session_name) { if (sharedance_open(SESSION_HANDLER_HOST) !== 0) { return FALSE; } return TRUE; } function session_handler_close() { sharedance_close(); return TRUE; } function session_handler_store($key, $data) { if (sharedance_store($key, $data) !== 0) { return FALSE; } return TRUE; } function session_handler_fetch($key) { return sharedance_fetch($key); } function session_handler_delete($key) { if (sharedance_delete($key) !== 0) { return FALSE; } return TRUE; } function session_handler_gc($timeout) { return TRUE; } session_set_save_handler('session_handler_open', 'session_handler_close', 'session_handler_fetch', 'session_handler_store', 'session_handler_delete', 'session_handler_gc'); ?> ~~~