从 PHP 调用已编译的C++可执行文件来创建套接字

Calling a compiled C++ Executable from PHP to Create Socket

本文关键字:可执行文件 创建 套接字 C++ PHP 调用 编译      更新时间:2023-10-16

我正在开发一个同时使用C++和PHP的Web应用程序。 手头的问题围绕着从 PHP 调用 CPP 可执行文件。

环境:

  • CentOS7
  • PHP 7.4 (雷米(
  • 阿帕奇 2.4.6
  • C++ 11

Apache以apache:[appgroup]运行,所有文件都归同一文件所有。 可执行文件可由所有者和组执行。

但是,从 php 调用可执行文件 - 无论是使用 exec((、shell_exec(( 还是 system(( - 都不起作用,尽管代码在从命令行调用时可以工作。

我已经通过运行做了一些测试

echo exec("whoami");
var_dump(file_exists('/var/www/html/project/bin/main'));
var_dump(is_executable('/var/www/html/project/bin/main'));

(main 是一个编译的C++文件,它存在,从命令行调用时工作(。PHP 可以看到该文件,但 "is_executable" 返回 false。"Whoami"如预期的那样返回阿帕奇。

我已经搞砸了httpd.conf,php.ini,并尝试以几种不同的方式调用该文件。我已经创建了shell和"hello world"C++文件,将它们放在与php脚本相同的目录中,但仍然没有运气。

无论如何,以下行不会执行任何操作(也不会调用任何其他C++可执行文件或 shell 脚本(。

exec("/var/www/html/project/bin/main > /dev/null 2>&1");

是什么阻止了它的工作?

从 Web 应用程序调用可执行文件看起来不太安全。你确定某些 SELinux 或 AppArmor 不会阻止你做这种冒险的事情吗?