Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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
Apache2 php shell_exec返回的状态与普通用户不同_Php_Html_Apache2_Unmount - Fatal编程技术网

Apache2 php shell_exec返回的状态与普通用户不同

Apache2 php shell_exec返回的状态与普通用户不同,php,html,apache2,unmount,Php,Html,Apache2,Unmount,我正在尝试监视我的Raspberry Pi连接的USB驱动器,并根据请求卸载它们 我正在使用apache2 Web服务器、html/javascript和php 基本说明 当我按下“刷新按钮”时,php检查哪些设备安装在/media/上,并为每个驱动器创建一个卸载按钮 当我按下其中一个按钮时,php将通过pumount调用卸载所选的驱动器 问题 到目前为止,刷新部分工作正常。 当我按下其中一个卸载按钮时,驱动器似乎已被删除,因为当我再次刷新时,它不再列出。 但是当我通过ssh登录到raspi时,

我正在尝试监视我的Raspberry Pi连接的USB驱动器,并根据请求卸载它们

我正在使用apache2 Web服务器、html/javascript和php

基本说明

当我按下“刷新按钮”时,php检查哪些设备安装在/media/上,并为每个驱动器创建一个卸载按钮

当我按下其中一个按钮时,php将通过pumount调用卸载所选的驱动器

问题

到目前为止,刷新部分工作正常。 当我按下其中一个卸载按钮时,驱动器似乎已被删除,因为当我再次刷新时,它不再列出。 但是当我通过ssh登录到raspi时,我可以看到驱动器根本没有卸载

问题

当我从apache和普通用户调用相同的命令(lsblk)时,为什么会得到不同的结果

我怎样才能解决这个问题

希望有人能帮忙

信息更新

  • 同样的结果,当我使用exec而不是shell_exec时

  • 当我重新启动apache时,驱动器会再次显示。 所以我想,这个问题与apache有关。 有什么想法吗

index.html

 <html lang="de">
<head>
    <meta charset="utf-8"/>
    <title>Status</title>
    <script type="text/javascript" src="status.js"></script>
    <link rel="stylesheet" href="css/styles.css">
</head>

<body>
    <h1>USB-Drive Handler</h1>
    <form method="POST" action="">
        <p><input class="button" value="Refresh" type="button" id="refreshButton"  onclick="refresh()"></p>
    </form>
    <p><h2>Avail. USB-Drives:</h2>  <span id="availDrives"></span></p>
</body>
status.php

<?php

   $command = $_GET["command"];
   echo $command;
   switch($command){
     case "refresh" :
        refresh();
        break;
     case "remove" :
        $dev=$_GET["device"];
        remove($dev);
        break;
   }

   function remove($dev){
      echo shell_exec("pumount /dev/$dev");
   }

   function refresh(){

     $blocks = preg_split('/\n/',shell_exec("lsblk -l -o NAME,MOUNTPOINT"));
     foreach ($blocks as $block){
       if (strpos($block, " /media/") !== false){
          $b = preg_split('/\s+/',$block);
          $dev = $b[0];
          $mnt = $b[1];
          echo "<p><input value=\"".$mnt."\" class=\"button button1\" type=\"button\"  onclick=\"remove('$dev' , '$mnt')\"></p>";
       }
     }

   }
 ?>

Solved:我从apache切换到lighttpd,现在一切正常。Solved:我从apache切换到lighttpd,现在一切正常。
<?php

   $command = $_GET["command"];
   echo $command;
   switch($command){
     case "refresh" :
        refresh();
        break;
     case "remove" :
        $dev=$_GET["device"];
        remove($dev);
        break;
   }

   function remove($dev){
      echo shell_exec("pumount /dev/$dev");
   }

   function refresh(){

     $blocks = preg_split('/\n/',shell_exec("lsblk -l -o NAME,MOUNTPOINT"));
     foreach ($blocks as $block){
       if (strpos($block, " /media/") !== false){
          $b = preg_split('/\s+/',$block);
          $dev = $b[0];
          $mnt = $b[1];
          echo "<p><input value=\"".$mnt."\" class=\"button button1\" type=\"button\"  onclick=\"remove('$dev' , '$mnt')\"></p>";
       }
     }

   }
 ?>