shared memory под Windows + Apache

pkravt

Новичок
shared memory под Windows + Apache

Добрый день!

Подскажите, как получить system id уже существующего блока shared memory
под windows+apache ? В виндах оно называются memory mapped file и
доступ к нему получается по имени файла.
Как из имени такого файла получить идентификатор ?

Роюсь который день - никак не найти.
Спасибо!

-~{}~ 08.12.08 12:51:

Неужели никто не знает как это сделать и никто не пользуется shared memory под Win+Apache ?
 

Zetruger

ivan.chistyakov.name
Table of Contents
shmop_close -- Close shared memory block
shmop_delete -- Delete shared memory block
shmop_open -- Create or open shared memory block
shmop_read -- Read data from shared memory block
shmop_size -- Get size of shared memory block
shmop_write -- Write data into shared memory block

других функций нету
 

pkravt

Новичок
Правильно!

В этих функциях мне все понятно, кроме одного:
int shmop_open ( int key, string flags, int mode, int size )
Где брать key под Windows?
В примерах везде используется функция ftok,
которой нету в PHP for windows.
В мануале даже есть комментарий, в котором
ftok написана через stat() (см. ниже), но
даже эта самописная функция ftok выдает мне -1
при вызове, для существующего memory mapped файла.

Как-то не верится, что никто никогда не использовал shared memory под виндами...

========================
There is a little ftok function. This function isn't included into php for windows so i've grabbed it directly from linux glibc 2.3.2 source code. I hope that this can be useful.
There is the code:
<?php
function ftok($pathname, $proj_id) {
$st = @stat($pathname);
if (!$st) {
return -1;
}

$key = sprintf("%u", (($st['ino'] & 0xffff) | (($st['dev'] & 0xff) << 16) | (($proj_id & 0xff) << 24)));
return $key;
}
echo ftok($_SERVER["SCRIPT_FILENAME"], 250);
?>
 

Zetruger

ivan.chistyakov.name
> Где брать key под Windows?
зачем? помоему вы пытаетесь решить задачу явно не свойственным путем
php не для этого придумывался

> I hope that this can be useful.
это конечно обнадеживает )))
 

pkravt

Новичок
для меня вообще стало открытием, что в PHP есть различия
в зависимости от платформы, где работает сервер...
Почему же не свойственным путем ?
Задача простая:
Есть процесс, который хранит текущие данные в memory mapped file, хочу вывести эти данные в веб через PHP.
В чем необычность?
Можно, конечно, передавать все через обычный файл...
Но исторически взаимодействие между процессами делалось через shared memory, так что и PHP скрипт решил сделать
таким же путем. Конечно, если не получится, найду дорогу и в обход. Просто удивлен, что такая разница для разных систем в языке, который вроде бы позиционируется как платформо-независимый...
Не может же быть, чтобы мне первому это понадобилось...
 

Zetruger

ivan.chistyakov.name
> для меня вообще стало открытием, что в PHP есть различия
в зависимости от платформы, где работает сервер...

ну fork тому пример, есть же куча различий в реализации всяких тонких штук типа процессы, память и т.п.

а нельзя сразу в php передавать этот идентификатор
а не пытаться его там получить
 

pkravt

Новичок
а каким образом ?
это не идентификатор, а массив данных.
Я вижу три варианта:
1. shared memory (работает сейчас, но без PHP)
2. обычный файл (тоже допустимо, и наверное так и буду делать)
3. сетевой обмен.

Если речь об идентификаторе файла, отображаемого в память, то
я в принципе такого не знаю в виндах - там все по имени происходит...
Кроме того, передав идентификатор, я могу тем же путем передать
и все остальные данные, встает вопрос о необходимости разделяемой памяти :)
Идея была в том, чтобы без модификации имеющегося софта сделать к нему
веб-монитор. Но похоже, так не удастся...
 

fixxxer

К.О.
Партнер клуба
насколько я понимаю, судя по этому замечанию

Under Windows, Shmop will only work when PHP is running as a web server module, such as Apache or IIS

на винде shared memory как такового и нет, а чтобы хоть как работало, оно "эмулируется" размещением соответствущих блоков в памяти процесса веб-сервера.

я фиг знает что ты там делаешь, но попробуй использовать шаред мемори акселераторов (они же есть под винды?), там полюбому кроссплатформенная реализация должна быть ибо должны же они где-то кэшированный байткод хранить.
 

pkravt

Новичок
Не, это разные вещи.
шаред мемори под виндами конечно есть, просто называется по-другому (memory mapped file).

У меня как раз ПХП и стоит как модуль к АПАЧу.

В любом случае, спасибо за переписку, приятно, что хоть кто-то откликнулся, хоть проблему и не решили :))
Я так понимаю, что самый простой выход - гонять все данные через обычный файл...
 

Angerslave

Новичок
pkravt
Лучше вообще переползти на линукс, под виндой PHP хуже работает даже по скорости.
 

pkravt

Новичок
это понятно, хотя уверен, что не в разы хуже...
но для моих скромных задач более чем достаточно.
 

fixxxer

К.О.
Партнер клуба
>просто называется по-другому (memory mapped file).
..и имеет совершенно другое несовместимое api, то есть является по сути совершщенно иной вещью. =)

делай через файл конечно, если ты гоняешь все на винде значит за скоростями точно не гонишься.
 
Сверху