Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php脚本在bash中执行exec函数编译c脚本时抛出错误_Php_Bash - Fatal编程技术网

Php脚本在bash中执行exec函数编译c脚本时抛出错误

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

我一直在关注这件事,我不知道我到底做错了什么。当我调用api端点(通过postman)时,当我的脚本试图生成和编译脚本c脚本时,我会遇到以下错误

我的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
你们能帮我找出问题出在哪里吗。 如果您有任何其他问题,请让我知道,我会提供答案。谢谢大家!

更新

@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
:-)谢谢克里斯的帮助!