Передача имени файла через переменную в tar из PHP? - PullRequest
1 голос
/ 01 сентября 2010

Я пытаюсь в конечном итоге извлечь некоторые файлы из tar-архива в PHP, однако в первой части мой простой тестовый скрипт завершился неудачей, а именно - просто перечислить файлы в архиве.

Есть ли причина, по которой этот тестовый скрипт не работает?

Что я вижу на выходе:

> -sh-3.2$ php showfile.php /var/www/vhosts/smartphonesoft.com/httpdocs/fred/epf/itunes20100825.tbz
> tar: Old option `f' requires an
> argument. Try `tar --help' or `tar
> --usage' for more information.

Мой простой скрипт PHP:

<?php 
foreach (glob("/var/www/vhosts/smartphonesoft.com/httpdocs/fred/epf/itunes*.tbz") as $file) {
 }
$path_parts = pathinfo($file);
$tarfile = $path_parts['filename'];
echo $file . "\n";
exec('tar tvf $file',$ret);

?>

1 Ответ

4 голосов
/ 01 сентября 2010

вы неправильно поставили круглые скобки ({}) и неверные кавычки внутри функции exec ():

<?php 
foreach (glob("/var/www/vhosts/smartphonesoft.com/httpdocs/fred/epf/itunes*.tbz") as $file) {

$path_parts = pathinfo($file);
$tarfile = $path_parts['filename'];
echo $file . "\n";
exec("tar tvf $file",$ret);

}

?>

(использование кавычек НЕ заменяетпеременная $file внутри строки для файла, который вы имели в виду.)

РЕДАКТИРОВАТЬ: согласно комментарию Frxstrem, никогда не забывайте экранировать имя файла (если оно содержит, например, пробелы, приведенный выше код не будет работать).

exec("tar tvf ".escapeshellarg($file), $ret);
...