通过变量将文件名传递给PHP中的tar?

时间:2010-09-01 16:06:17

标签: php exec tar

我试图最终从PHP中的tar存档中提取一些文件,但是我的简单测试脚本在第一部分失败了,就是简单地列出存档中的文件。

这个测试脚本失败有什么理由吗?

我看到的输出是:

> -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 个答案:

答案 0 :(得分:4)

你在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);

}

&GT;

(使用'引号不会将字符串中的变量$file替换为您想要的文件。)

编辑:根据Frxstrem的评论,永远不要忘记转义文件名(如果它包含例如空格,上面的代码将不起作用)。

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