关于ZAKER 融媒体解决方案 合作 加入

如何在使用 Boost C 编写的 php Web 应用程序中读 .

CocoaChina 10-14

我已经在共享区域中使用 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 开发一个 Web 应用程序 , 并希望在共享区域中读取地图以获取数据 . 如何执行呢?

最佳答案

啊 , 刚才注意到that other question也在您身边 .

您真的不想通过尝试将 C 代码直接嵌入 PHP 来使问题复杂化 .

要弄清楚为什么从 PHP 页面生成的子进程不允许您访问共享内存 , 这肯定会容易得多 . 在最坏的情况下 , 使该过程非常安全 , 只需call setuid即可强制该过程模拟特定的用户 ( 假设使用 UNIX 风格的主机 ) . 请勿将 setuid 设置为 root ( 这是安全禁止 ) .

以上内容由"CocoaChina"上传发布 查看原文
相关标签 php应用程序来使

觉得文章不错,微信扫描分享好友

扫码分享