【问题标题】:linux php exec() msgget:Permission Deniedlinux php exec() msg​​get:权限被拒绝
【发布时间】:2015-05-11 01:40:59
【问题描述】:

我正在尝试从 php 脚本(即 sendMsg.php)运行 linux 可执行文件。 可执行文件(即 msgr)使用 SYS V msg 队列与另一个正在运行的进程进行通信。

sendMsg.php

<?php
    exec('./msgr 0987654321 1234 2>&1', $output, $return_var);

    var_dump($return_var);
    var_dump($output);
?>

msgr.c

  int msqid;
  key_t key;

  if ((key = ftok("/usr/local/bin/app", 'k')) == -1) {
      perror("ftok");
      exit(1);
  }

  if ((msqid = msgget(key, 0644)) == -1) {
      perror("msgget");
      exit(1);
  }

当我从终端运行脚本时,它工作正常,但是当我从浏览器运行它时(通过 ajax 调用或其他方式),我得到一个错误:

msgget: Permission denied

文件权限似乎有些问题。我该如何解决这个问题?

【问题讨论】:

  • 也许通过更改权限?
  • 您能详细说明@Dagon 吗?我已授予 msgr 可执行权限。

标签: javascript php c linux message-queue


【解决方案1】:

您可能希望提及运行执行的所有者是谁。 参考PHP.net

所有者应该是 www-data,但这只能用于 linux-debian/ubuntu 系统。

否则为 sudo chown sudo chmod 应该可以解决您的问题

【讨论】:

  • 从终端试试这个 php -r "echo exec('whoami');"
  • php -r "echo exec('whoami');"不输出任何东西。
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2017-07-11
  • 1970-01-01
相关资源
最近更新 更多