我正在尝试使用从客户端传递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);
但是当我用/home/XXX/XXX/XXX/XXX/XXX/sp_dom1.jpg替换shell_exec(...)中的“{$ searching_image}”时,代码效果很好:
$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);
难道你不知道为什么会这样吗?
答案 0 :(得分: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 );