PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)
Posted
技术标签:
【中文标题】PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)【英文标题】:PHP exec(): Why can I access shared memory, but not named semaphores? (errno = 13)PHP exec():为什么我可以访问共享内存,但不能访问命名信号量? (错误号 = 13) 【发布时间】:2013-04-23 22:13:13 【问题描述】:我正在使用 php exec()
命令运行 get_value.c
。 get_value.c
附加到共享内存读取一个值并将其返回给我的 PHP 脚本。在我最初测试附加到共享内存时,它工作得很好。
然后当我添加信号量**时,sem_open()
返回 errno = 13。
我在errno
上放置了一个开关块,并列出了sem_open
man
页面中的所有错误案例。错误 13 没有被捕获,它只是进入默认情况。
什么是错误 13?
** 我创建了具有权限的信号量 (0666 | O_CREAT | O_EXCL)。
编辑:一切都在命令行中运行。
【问题讨论】:
【参考方案1】:使用PHPexec("whoami");
判断用户,很可能是www-data
。
这会让您知道 apache 正在尝试访问系统资源的用户。然后您需要允许该用户访问这些资源。
此用户通常位于:
/etc/apache2/envvars
【讨论】:
以上是关于PHP exec():为啥我可以访问共享内存,但不能访问命名信号量? (错误号 = 13)的主要内容,如果未能解决你的问题,请参考以下文章
PHP调用shell命令,怎么实现,我为啥shell_exec的返回值总是null呢