2016-02-15 3 views
0

Я пытаюсь запустить 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); 

у вас нет ни малейшего представления, почему это работает, как это?

+2

Избавиться от двойных кавычек вокруг '{$ searched_image}', как 'escapeshellarg() ', скорее всего, уже добавляет одинарные кавычки для вас. Постройте строку и отправьте ее в 'shell_exec()', чтобы вы могли эхом отослать свою командную строку и посмотреть, что это на самом деле. – Crontab

+0

Все еще не работает, когда я удаляю двойные кавычки. И когда я строю строку - $ 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); он не выводит результат, но он не выводит ошибку вывода. –

+0

В вашем примере в вашем комментарии вы используете 'escapeshellarg()' неправильно. Вы используете его, чтобы избежать *** одного аргумента ***, а не всей командной строки. – Crontab

ответ

1

Вы пишете:

'./predict_altitude.sh -i "{$searched_image}" -p basic -o 0' 

Внутри одиночные кавычки, переменные не оцениваются.

Вы можете использовать это, вместо того, чтобы:

"./predict_altitude.sh -i '{$searched_image}' -p basic -o 0" 

Или - чтобы избежать непредсказуемых оценок - это:

$cmd = './predict_altitude.sh -i \''.$searched_image.'\' -p basic -o 0'; 
shell_exec($cmd); 
+0

Ваши решения хорошо работают, спасибо! –

Смежные вопросы