从system()获取结果并存储在变量中?

时间:2014-04-08 19:42:36

标签: php unrar

我正在运行此脚本:

$output = "unrar x -y ".$number.".rar /bundle/";
echo "<pre>";
system($output);
echo "</pre>";

正在输出

  

提取   /var/www/html/bundle/Compressed_file_test/lgc-m.r29
    0%1%2%确定

我想找出它所在的文件夹名称,在这种情况下&#34; Compressed_file_test&#34;。有没有办法可以获得这些信息?

4 个答案:

答案 0 :(得分:3)

你可以这样做:

$command = "unrar x -y ".$number.".rar /bundle/";
$output = shell_exec($command);
$output = explode(PHP_EOL, $output);
$output = $output[0];

preg_match_all('/\/[A-Za-z0-9_]+/', $output,  $matches);
echo $matches[1][count($matches[1])-2];

使用过的功能:

答案 1 :(得分:1)

您希望将信息返回到变量中吗?您添加第二个参数,但系统仅返回最后一行。 Shell?exec返回所有内容

$result = shell_exec($output);
echo $result;

Documentation on shell_exec()


如果您想要值:

 $dir = stubst($output, strpos($output,"/",22), strrpos($output,"/"));
 // or via regex:
 preg_match('/\/(.*?) ?/', $output, $matches);
 $dir = $matches[4];
 // or if you know its the last:
 $dir = end($matches);

这是一个简单的例子,如果你得到更复杂的结果,你将不得不改变这个(你可能想要在换行符上爆炸以获得感知线)

答案 2 :(得分:0)

如果您想在代码中使用程序输出,请考虑使用exec()而不是system()。

 $command = "unrar x -y $number.rar /bundle/";
 exec($command, $output, $return_var);

另外,请确保$number不包含任何特殊字符(例如;),或者将其转义。

答案 3 :(得分:0)

这样的事情:

$output = "unrar x -y ".$number.".rar /bundle/";
echo "<pre>";
system($output,$result);
preg_match(/\/(.*)/, $result, $path);
echo basename($path[0]);
echo "</pre>";