PHP exec работает при непосредственном вызове скрипта, но не через jQuery ajax - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть PHP-скрипт, который вызывает exec().У меня были проблемы в течение всего дня, когда какой-то код вызывал один и тот же скрипт, а другой нет (exec () возвращает код ошибки 127).

Наконец-то я понял, что неработающий код - это код, который вызывается из jQuery на моей веб-странице:

$('#next_button').click(function(event) {
    $.get('download_forms.php', function(data) {
        alert(data);
    });
});

Однако, если я наберу URL для download_forms.php в адресную строку моего браузера, тогда exec () будет выполняться правильно.У меня есть попытки запустить другие скрипты, которые вызывают exec () из jQuery для тестирования, и все они терпят неудачу, но работают, если набраны в адресной строке.

Я не понимаю, почему это будет проблемой.Вне зависимости от того, введу ли я URL-адрес в адресную строку Firefox или нажму кнопку на моей веб-странице, будет сделан HTTP-запрос.

Кто-нибудь знает, в чем может быть разница?

Примечание: я пробовал разные команды в exec (), и все они терпят неудачу в моем jQuery (обратите внимание на весь остальной код PHP)работает нормально) но работает, когда адрес скрипта вводится прямо в адресную строку.

Большое спасибо

Обновление

Это мой download_forms.phpкод.Первоначально exec () был только для того, чтобы увидеть, работает ли exec () вообще.Как и выше, он работает правильно только при вводе прямо в адресную строку.

include ('inc/session.inc.php');
require_once('Downloader.php');
exec('id', $output, $r);
echo var_dump($output);
echo($r);
try {
    $downloader = new Downloader();
    $saveMessages = $downloader->saveToDatabase();
    // exec() in the combineAndDownloadForms() method
    $downloadMessages = $downloader->combineAndDownloadForms();
} catch(Exception $e) {
    echo $e->getMessage();
}

Дальнейшее обновление

Я сделал гиперссылку с моей веб-страницы на download_forms.страница php (то есть <a>), но exec () по-прежнему не выполняется.По крайней мере, я знаю, что это не имеет ничего общего с AJAX.

1 Ответ

0 голосов
/ 16 сентября 2011

Для чего я стою, я исправил эту проблему, и все вышеперечисленное было красной сельдью.

Я не заметил, что на странице, на которой я находился, использовался безопасный протокол https, поэтому, когда использовался сценарий download_forms.php, к нему также обращались с использованием https, и, похоже, exec() и passthru() функции не будут выполнять команды на сервере в этих обстоятельствах, что имеет смысл.

Я изменил сценарий, чтобы он изменил протокол URL download_forms.php на обычный http, и теперь он работает нормально.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...