2013-05-29 2 views
0

Я занимаюсь разработкой веб-страницы, которая должна читать и изменять содержимое определенных файлов на сервере.ajax/php не удалось редактировать файлы

Эти файлы будут иметь только два значения: 1 или 0. Чтение/изменение содержимого будет производиться через комбинированные поля с OnChange. В основном идея состоит в том, чтобы управлять устройствами через входы/выходы общего назначения (GPIO). Часть электроники все сделано, мне просто нужно закончить веб-программирующую часть и застрять на ней.

У меня нет опыта программирования, но с некоторыми фрагментами, найденными здесь и там, я смог реализовать часть этого с помощью AJAX/PHP.

До сих пор я мог читать значения, но не смог его изменить, хотя я строю правильную команду с помощью «escapeshellarg».

Кроме того, я ожидал иметь две интерактивные области на странице, но работает только оригинал.

Может ли кто-нибудь указать мне правильное направление? Любая помощь/предложение/комментарий будут приветствоваться.


pqp6.php


<html> 
<head> 
    <script> 
     function showUser(str) 
     { 
      if (str=="") 
      { 
       document.getElementById("txtHint").innerHTML=""; 
       return; 
      } 

      if (window.XMLHttpRequest) 
      {// code for IE7+, Firefox, Chrome, Opera, Safari 
       xmlhttp=new XMLHttpRequest(); 
      } 
      else 
      {// code for IE6, IE5 
       xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 

      xmlhttp.onreadystatechange=function() 
      { 
       if (xmlhttp.readyState==4 && xmlhttp.status==200) 
       { 
       document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
       } 
      } 

      xmlhttp.open("GET","getinfo.php?q="+str,true); 
      xmlhttp.send(); 
     } 
    </script> 
</head> 
<body> 
    <?php          

     $file1="/var/www/file1"; 
     $file2="/var/www/file2"; 
     $output = shell_exec('cat '.escapeshellarg($file1)); 

     if($output == 0) 
     { 
      echo "zero ; "; 
      $file1status = "off"; 
      $file1oposite = "on"; 
      $file1exec= "file1on"; 
     } 
     else 
     { 
      echo "one ; "; 
      $file1status= "on"; 
      $file1oposite= "off"; 
      $file1exec= "file1off"; 
     } 

     echo "output:$output ; file1status:$file1status ; file1oposite:$file1oposite ; file1exec:$file1exec <br><br>"; 

     $output = shell_exec('cat '.escapeshellarg($file2)); 

     if($output == 0) 
     { 
      echo "zero ; "; 
      $file2status = "off"; 
      $file2oposite = "on"; 
      $file2exec= "file2on"; 
     } 
     else 
     { 
      echo "one ; "; 
      $file2status= "on"; 
      $file2oposite= "off"; 
      $file2exec= "file2off"; 
     } 

     echo "output:$output ; file2status:$file2status ; file2oposite:$file2oposite ; file2exec:$file2exec <br><br>"; 
     ?> 

     <br> 
     <br>          

     FILE 1:         
     <form> 
      <select name="file1" onchange="showUser(this.value)"> 
       <option value="1,<?=$file1status?>"><?=$file1status?></option> 
       <option value="1,<?=$file1oposite?>"><?=$file1oposite?></option> 
      </select> 
     </form> 
     <br> 
     <div id="txtHint"><b>File 1 information will be listed here.</b>  </div>      
     <br> 
     <br> 
     FILE 2:         
     <form> 
      <select name="file2" onchange="showUser(this.value)"> 
       <option value="2,<?=$file2status?>"><?=$file2status?></option> 
       <option value="2,<?=$file2oposite?>"><?=$file2oposite?></option> 
      </select> 
     </form> 
     <br> 
     <div id="txtHint"><b>File 2 information will be listed here.</b></div> 
</body> 
</html> 

getinfo.php:


<?php 
$q=$_GET["q"]; 
$q_stripped = explode(",", $q); 
$file_n = $q_stripped[0]; 
$file_command = $q_stripped[1]; 

$path="/var/www/file"; 

if($file_command == "on") 
{ 
    $file_command = "1 > "; 
} 
else 
{ 
    $file_command = "0 > "; 
} 

$command= "/bin/echo $file_command$path$file_n"; 
$escaped_command = escapeshellarg($command); 

echo "COMMAND: $escaped_command"; 
shell_exec($escaped_command); 
echo "file_n=$file_n ; file_command=$file_command ; "; 
?><?php 

+0

Имеет ли пользователь, что на сервере действует разрешение на доступ к файлам, на которые настроен таргетинг? Я бы сказал, что, скорее всего, нет. Сначала проверьте это. – dudewad

+0

есть. разрешения в порядке. файлы могут быть доступны для записи любым пользователем. – user2433937

ответ

0

С помощью escapeshellcmd Ваш > 0 или > 1 превращен в \\> 0 и \\> 1 Я думаю, поэтому он не работает. Вы не используете escapeshellcmd, вы используете escapeshellarg.

Возможно, вы захотите также проверить права доступа к файлу.

Однако, вместо того, чтобы использовать системные вызовы, вы никогда не думали об использовании file_exists, file_get_contents или file_put_contents.

С этими функциями и доступными для записи файлами/файлами вы можете добиться именно того, что вы делаете, без системных вызовов. Кроме того, он был бы более портативным.

+0

Работает с файлом «file_put_contents»! Спасибо! – user2433937

+0

Отлично! Не забудьте отметить этот вопрос, как ответили: D – mpratt