Командные файлы php system() из-за «&» в пароле

Я запускаю следующую команду:

$cmd = escapeshellcmd( "echo '$password' | sudo -S mv \"$old\" \"$new\" " );
system( $cmd, $out );

Это работает, когда $password не содержит &, но не работает, если содержит. Как я могу разрешить & и любые другие специальные символы в пароле?

Спасибо

🤔 А знаете ли вы, что...
PHP позволяет встраивать код в HTML-страницы с использованием специальных тегов <?php ?>.


34
1

Ответ:

Решено

Не используйте escapeshellcmd() для всей команды, используйте escapeshellarg() для отдельных аргументов.

$password_esc = escapeshellarg($password);
$cmd = "echo $password_esc | sudo -S mv '$old' '$new'";
system($cmd, $out);

Вам не нужны кавычки вокруг $password_esc, потому что escapeshellarg() добавляет их.