Я написал одну карту (ключ, значение), используя C ++, библиотеку Boost в общей области.
void CreateIndexMap()
{
shared_memory_object::remove(Getsharedmemoryregion());
managed_shared_memory segment(create_only,Getsharedmemoryregion(), 10000000);
void_allocator alloc_inst (segment.get_segment_manager());
complex_map_type *mymap = segment.construct<complex_map_type>("MyMap")(std::less<char_string>(), alloc_inst);
}
Создание карты памяти в общей области:
void UpdateIndexMap(std::string str, std::string index, const char* SharedMemory)
{
managed_shared_memory segment(open_only,SharedMemory);
void_allocator alloc_inst (segment.get_segment_manager());
complex_map_type *mymap = segment.find<complex_map_type>("MyMap").first;
std::string h = ConvertTolowercase(str);
char_string patternvalue(h.c_str(), alloc_inst);
char_string indexvalue((index).c_str(), alloc_inst);
mymap->insert(std::pair<char_string, char_string>(patternvalue,indexvalue));
}
Сейчас я разрабатываю одно веб-приложение с использованием PHP и хочу прочитать карту в общей области, чтобы получить данные. Как это реализовать?
Ах, только что заметил этот другой вопрос был также вами.
Вы действительно не хочу усложнять ситуацию, пытаясь встроить код C ++ непосредственно в PHP.
Это должно быть далеко Проще понять, почему дочерний процесс, порожденный со страницы PHP, не позволяет вам получить доступ к общей памяти. В худшем случае, сделайте процесс очень безопасным и просто вызов setuid
заставить его выдавать себя за определенного пользователя (при условии хоста со вкусом UNIX). Делать не setuid для root (это безопасность нет-нет).
Других решений пока нет …