从 PHP 调用已编译的 C++ 可执行文件以创建套接字
Calling a compiled C++ Executable from PHP to Create Socket
我正在开发一个同时使用 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” returns false。 “Whoami”returns apache,正如预期的那样。
我搞砸了 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 不会阻止您做这种冒险的事情吗?
我正在开发一个同时使用 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” returns false。 “Whoami”returns apache,正如预期的那样。
我搞砸了 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 不会阻止您做这种冒险的事情吗?