Команда оболочки PHP не выполняется через AJAX-вызов - PullRequest
1 голос
/ 06 июля 2011

В приложении для управления домашним сервером я добавил функцию удаленного пробуждения ПК через приложение. PHP-скрипт, который делает это, прекрасно работает, но я хочу быть в состоянии сделать это с помощью AJAX-вызова.

Звонок происходит так:

Пользователь нажимает на сгенерированную PHP ссылку:

<a href=\"javascript:wake('$hostname')\">Wake</a>

Где функция (jQuery):

function wake(hostname) {
    $(document).ready(function()
    {
       alert('function works');
       $.post('ajax/wake.php',{host: hostname});
       alert('Command executed');
    });
}

Отображаются оба предупреждения, что означает выполнение AJAX-вызова. PHP-скрипт выглядит так:

<?php
include_once("../classes/BLClient.php");
$blClient = new BLClient(true);
$hostname = $_GET["host"];

$client = $blClient->getClientByHostname($hostname);
$mac = $client->getMac();

echo `sudo etherwake -i eth1 $mac`;
?>

Однако мои компьютеры не проснулись. Если я перехожу непосредственно к сценарию, он работает ...

Ответы [ 3 ]

1 голос
/ 06 июля 2011

Вы запускаете запрос $.post ajax, но вы читаете параметр $_GET в своем скрипте PHP.Вместо этого выполните $.get ajax-запрос, иначе данные будут в $_POST, а не в $_GET.

В качестве альтернативы вы можете использовать суперглобальный $_REQUEST, который содержит переменные post и get в PHP.

0 голосов
/ 06 июля 2011

Вы делаете после звонка '$.post', поэтому здесь вы должны использовать "$_POST["host"]"

0 голосов
/ 06 июля 2011

вам может понадобиться использовать

$_POST["host"] или $_REQUEST["host"] в вашем php-скрипте, как вы делаете сообщение Jquery.

В браузере вы можете передавать хост как:

 http://www.mysite.com/ajax/wake.php?host=xxxxxxxx

В результате "host" присутствует в $ _GET.

...