Вызов ajax-запроса заставляет php блокировать доступ

У меня сложная проблема для отладки. У меня есть веб-страница, которая делает несколько запросов ajax на наш сервер (apache / php — настолько просто, насколько это возможно). Мы реализовали функцию php, которая использует shell_exec для запуска небольшой программы на c ++ и чтения выходных данных. Во время тестирования у меня не было проблем. Однако на нашем реальном сервере есть большая проблема.

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

Если я удалю свои куки, я могу подключиться к файлу php.

Я проверил сетевые соединения с помощью инструментов разработчика Chrome, и ничего не сказано. Я получаю хороший ответ от запроса ajax, который вызывает shell_exec. Но потом его заблокировали. Я получаю ошибку соединения не удалось — но только на устройстве / сеансе, который вызвал эту функцию. Если я открою другой браузер, он все равно подключится.

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

Если что-то пошло не так с shell_exec, я бы не ожидал хорошего ответа, но получаю хороший ответ.

Я знаю, что это расплывчато, но это большая проблема, и я понятия не имею, как отладить такую ​​проблему. Любые идеи о том, что происходит или как я могу отладить это?

Пример кода:

function applyForCreditCards() {
if (!creditCardAppForm.isValid()) return;
$.ajax({
type: 'POST',
url: '../troystest/MobileServices/MobileValidationService.php',
data: {
'action': 'applyForCreditCard',
'ssn' : ssn,
... more variables...
'creditCardIds' : selectedCreditCards
},
success: function(msg){
results = JSON.parse(msg);
// Do something with response
});
}
});
}

Пример кода на стороне сервера

if (!$_SESSION)
session_start();
switch($_POST['action'] {
case 'applyForCreditCard': $this->applyForCreditCards($vars...);
break;
}

applyForCreditCards($vars...) {
$output = explode("\n", shell_exec($pathToExec." ".$commandLineArgs));
echo json_encode($output);
exit();
}

Настоящий код очень длинный, я попытался включить соответствующие части. Программа на c ++ небольшая и выдает примерно 10 строк вывода на стандартный вывод.

0

Решение

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

Посмотрите здесь некоторые классы, которые помогут сделать это: http://php.net/manual/en/function.shell-exec.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]