Принятие Вашего webroot является проверенной копией дерева подверсии, Вы могли проанализировать/.svn/entries файл и сцепить число пересмотра (4-я строка здесь)...
В PHP:
$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);
Вы ищете quotemeta ?
Возвращает значение EXPR со всеми символами, не являющимися «словами», через обратную косую черту.
Обновление: Как Хоббс указывает в комментариях, quotemeta
не предназначена для этой цели и после размышлений немного подробнее, могут возникнуть проблемы со встроенными nul
s. С другой стороны, String :: ShellQuote хрипит при обнаружении встроенных null
s.
Самый безопасный способ - полностью избегать оболочки. Использование формы списка 'system' может в значительной степени помочь в этом (несколько месяцев назад я с ужасом обнаружил, что cmd.exe
все еще может быть задействован в Windows), Я бы рекомендовал это.
Если вам нужен вывод команды, лучше (с точки зрения безопасности) открывать трубу самостоятельно, как показано в ответе hobbs
Если вы можете управлять им (например, если вы вызываете какую-либо команду напрямую, без каких-либо сценариев оболочки или расширенных махинаций перенаправления), самый безопасный способ сделать это - полностью избежать передачи данных через оболочку .
В perl 5.8 +:
my @output_lines = do {
open my $fh, "-|", $command, @args or die "Failed spawning $command: $!";
<$fh>;
};
Если необходимо поддерживать 5.6:
my @output_lines = do {
my $pid = open my $fh, "-|";
die "Couldn't fork: $!" unless defined $pid;
if (!$pid) {
exec $command, @args or die "Eek, exec failed: $!";
} else {
<$fh>; # This is the value of the C<do>
}
};
См. perldoc perlipc
для получения дополнительной информации об этом виде бизнеса, а также см. IPC :: Open2
и IPC :: Open3
.