Я пытаюсь запустить shell_exec() с переменной, переданной с AJAX от клиента.не удалось выполнить shell_exec() с переменной
Этот код вызывает ошибку (входной файл не существует!):
$searched_image = escapeshellarg("/home/XXX/XXX/XXX/XXX/XXX/sp_dom1.jpg");
$old_path = getcwd();
chdir('../elevation/source_code/altitudes_system/');
$altitudes_system_result = shell_exec('./predict_altitude.sh -i "{$searched_image}" -p basic -o 0');
chdir($old_path);
Но когда я заменить "{$ searched_image}" в shell_exec (...) с/главная/XXX/XXX/XXX/XXX/XXX/код sp_dom1.jpg хорошо работает:
$old_path = getcwd();
chdir('../elevation/source_code/altitudes_system/');
$altitudes_system_result = shell_exec('./predict_altitude.sh -i /home/XXX/XXX/XXX/XXX/XXX/sp_dom1.jpg -p basic -o 0');
chdir($old_path);
у вас нет ни малейшего представления, почему это работает, как это?
Избавиться от двойных кавычек вокруг '{$ searched_image}', как 'escapeshellarg() ', скорее всего, уже добавляет одинарные кавычки для вас. Постройте строку и отправьте ее в 'shell_exec()', чтобы вы могли эхом отослать свою командную строку и посмотреть, что это на самом деле. – Crontab
Все еще не работает, когда я удаляю двойные кавычки. И когда я строю строку - $ search_image = escapeshellarg ('./ predict_altitude.sh -i /home/XXX/XXX/XXX/XXX/XXX/sp_dom1.jpg -p basic -o 0'); например, он выводит именно то, что я хочу иметь в моей командной строке - ./predict_altitude.sh -i .... ', а затем, когда я вызываю shell_exec ($ search_image); он не выводит результат, но он не выводит ошибку вывода. –
В вашем примере в вашем комментарии вы используете 'escapeshellarg()' неправильно. Вы используете его, чтобы избежать *** одного аргумента ***, а не всей командной строки. – Crontab