PHP shell执行创建动态命令
下面的命令搜索目录中的文件并将其压缩,效果良好PHP shell执行创建动态命令,php,Php,下面的命令搜索目录中的文件并将其压缩,效果良好 $command = "cd {$root}/files && mkdir -p {$identifier} && zip -jFS -0 {$root}{$zipname} 2491/'test&.txt'"; exec($command); 但是将文件更改为变量不允许shell执行,下面的代码不起作用 $container_name = "2491"; $files = Array ( '0'
$command = "cd {$root}/files && mkdir -p {$identifier} && zip -jFS -0 {$root}{$zipname} 2491/'test&.txt'";
exec($command);
但是将文件更改为变量不允许shell执行,下面的代码不起作用
$container_name = "2491";
$files = Array ( '0' => 'test&.txt' ,'1' => 'test5.txt','2' => 'test6.txt');
$files = " " . $container_name . "/'" . implode("' " . $container_name . "/'", $files) . "'";
$files = str_replace('$', '\$', $files);
$command = "cd {$root}/files && mkdir -p {$identifier} && zip -jFS -0 {$root}{$zipname} {$files}";
exec($command);
$root、$identifier、$zipname没有引起问题,它的$files可能是什么问题
更新
执行前$command的var_转储:
string(128) "cd /var/www/files && mkdir -p zip--1 && zip -jFS -0 /var/www/files/zip--1/1002_22-06022-06022-_content.zip 2491/'test&.txt'"
如果我以
exec("cd /var/www/files && mkdir -p zip--1 && zip -jFS -0 /var/www/files/zip--1/1002_22-06022-06022-_content.zip 2491/'test&.txt'");
运行良好
错误响应:
zip错误:无事可做!(/var/www/files/zip--1/1002_22-06022-06022-_content.zip)我解决了这个问题,问题是文件名有
'&
,改成'代码>,从而中断该命令。为了得到它,我用[htmlspecialchars\u decode]传递了文件名。执行后是否可以发布$command
变量的输出?在执行该命令之前,转储它,并检查它是否与不使用变量时完全相同。@preinheimer getting zip error:无事可做!(/var/www/files/zip--1/1002_22-06022-06022-_content.zip)作为命令执行响应。@preinheimer-var_执行后命令的转储看起来像“cd/var/www/files&&mkdir-p zip--1&&zip-jFS-0/var/www/files/zip--1/1002_22-06022-06022--u content.zip 2491/'test&txt”,您的编辑没有明确说明。您的哪个命令给了您zip错误:无事可做代码>消息?之前的命令表示它“运行良好”。