Я написал одну карту (ключ, значение), используя C ++, Boost library в общей области.
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-приправленный). Не устанавливайте root (это безопасность no-no).