Php脚本在bash中执行exec函数编译c脚本时抛出错误
我一直在关注这件事,我不知道我到底做错了什么。当我调用api端点(通过postman)时,当我的脚本试图生成和编译脚本c脚本时,我会遇到以下错误 我的php代码Php脚本在bash中执行exec函数编译c脚本时抛出错误,php,bash,Php,Bash,我一直在关注这件事,我不知道我到底做错了什么。当我调用api端点(通过postman)时,当我的脚本试图生成和编译脚本c脚本时,我会遇到以下错误 我的php代码 exec(' cat > wrapper.c <<CONTENT #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main (int argc, char *a
exec('
cat > wrapper.c <<CONTENT
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int
main (int argc, char *argv[])
{
setuid (0);
system ("/bin/sh /var/www/html/myapp/script.sh");
return 0;
}
CONTENT
gcc wrapper.c -o php_root 2>&1
', $output, $returnVar);
var_dump($output);
var_dump($returnVar);
die();
$phpFinder = new PhpExecutableFinder;
if (!$phpPath = $phpFinder->find()) {
throw new \Exception('The php executable could not be found, add it to your PATH environment variable and try again');
}
var_dump($phpPath); /usr/bin/php
var_dump(PHP_BINDIR); /usr/bin/php
你们能帮我找出问题出在哪里吗。
如果您有任何其他问题,请让我知道,我会提供答案。谢谢大家!
更新
@squeamish通知我,我应该提供完整的gcc路径,这是一种情况,但现在我有另一个错误
更新行
/usr/bin/gcc wrapper.c -o php_root 2>&1
错误
2。更新
在检查我的php路径(由@ChrisTurner建议)后,我发现我的shell缺少php可执行文件
我的php代码
exec('
cat > wrapper.c <<CONTENT
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int
main (int argc, char *argv[])
{
setuid (0);
system ("/bin/sh /var/www/html/myapp/script.sh");
return 0;
}
CONTENT
gcc wrapper.c -o php_root 2>&1
', $output, $returnVar);
var_dump($output);
var_dump($returnVar);
die();
$phpFinder = new PhpExecutableFinder;
if (!$phpPath = $phpFinder->find()) {
throw new \Exception('The php executable could not be found, add it to your PATH environment variable and try again');
}
var_dump($phpPath); /usr/bin/php
var_dump(PHP_BINDIR); /usr/bin/php
壳
dev: /var/www/html/myapp $ sudo -H -u www-data bash -c 'echo $PATH'
输出
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin
这就是为什么我在my~/.bashrc中添加了export PATH=“$PATH:/usr/bin/php”
,这是我现在在bash中的路径
myApp: /var/www/html/certify $ sudo -H -u www-data bash -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/go/bin:/usr/bin/php
代码仍在抛出错误
'collect2:致命错误:找不到'ld'您遇到的问题是,您试图运行“gcc”,但PHP找不到它或它为执行编译或链接而运行的任何子程序。这是因为未设置PATH环境变量。此变量定义了一个目录列表,如果未提供完整路径,则搜索这些目录以查找程序 要在Symfony环境中修复它,需要将变量添加到.env文件中。类似于以下内容的东西,例如
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
在命令行上,键入
哪个gcc
。它应该输出类似于/usr/bin/gcc
的内容。将其复制到bash代码的最后一行(即,将其更改为/usr/bin/gcc wrapper.c-o php_root 2>&1
)。有帮助吗?漂亮的眼睛,先生!现在我有另一个错误2:致命错误:找不到'ld'gcc安装在非标准位置吗?Web服务器运行的脚本与您的shell的路径不同吗?@ChrisTurner我不知道(我对C和gcc思想一无所知)。我做了经典的Ubuntu 16.04安装。我已经安装了所有的nginx,php-fpm,phyton,但是我没有安装任何关于gcc的东西。。。也许我错过了一些库?apt get install build essential
:-)谢谢克里斯的帮助!