PHP exec() 并显示输出

PHP exec() and display output

我已经在网上看到了很多针对我的问题的解决方案,但我不得不承认其中大部分都不适合我。他们要么没有输出任何东西,要么甚至破坏了我程序中的上传功能,但实际上工作正常。我已经为 RaspberryPi 编写了一个小脚本,使人们能够通过 http 上传十六进制文件并使用 avrdude 自动编译它。可能是我太笨了,想不通。

<?php
$target_dir = "upload/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$all_ok = 1;

    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], "upload/upload.hex")) {
        echo "Die Datei ". basename( $_FILES["fileToUpload"]["name"]). " wurde hochgeladen."."<br>";
        $all_ok=1;
    } else {
        $all_ok == 0;
        echo "Sorry, während dem Upload ist ein Fehler aufgetreten!"."<br>";
    }
    
    if ($all_ok == 1){
        $result = exec("/usr/bin/avrdude -c gpio -p m328p /var/www/upload/upload.hex -Uflash:w:/var/www/upload/upload.hex 2>&1", $output, $return_var);
        $result_array=explode(' ',$result);
        echo "Output: ".$result_array."<br>";
        echo "Exit status: ".$return_var."<br>";
    } else {
        echo "Sorry, während dem Kompilieren ist ein Fehler aufgetreten!";
    }   
?>

这是我的程序的当前版本,遗憾的是没有显示更多内容

Die Datei blink.hex wurde hochgeladen.

Output: Array

Exit status: 0

我认为问题出在附近

$result_array=explode(' ',$result);
        echo "Output: ".$result_array."<br>";

这是我最近的徒劳做法,希望有人赐教。

$all_ok == 0;

应该是

$all_ok = 0;

exec()

exec( string $command [, array &$output [, int &$return_var ]] )

这意味着第二个参数是你的输出数组。所以不要将 exec 分配给任何变量,只需使用

 exec("/usr/bin/avrdude -c gpio -p m328p /var/www/upload/upload.hex -Uflash:w:/var/www/upload/upload.hex 2>&1", $output, $return_var);

print_r($output);
 $result_array=explode(' ',$output);
        echo "Output: ".$result_array."<br>";
        echo "Exit status: ".$return_var."<br>";