我一直在弄乱这一小时,还没弄清楚为什么它不起作用。我有一个项目,它在临时文件夹(/ temp)中输出3个xlsx和docx文件。我想将它们压缩下载。
问题是每当我执行7z命令时,它会翻转整个项目文件夹(../temp),甚至不只是临时文件夹。我无法弄清楚为什么。如果我回显$command
并在PHP的工作目录中运行cmd(无论如何都应该无关紧要,因为我对所有内容使用绝对路径),效果很好。如果我使用相对路径,它也不起作用。
文件名变量$HSModuleFileName
等在别处生成,以'.docx'或'.xlsx'结尾
$project_dir = str_replace('\\', '/', preg_replace('/\\|\/$/', '', dirname(dirname(__DIR__)))) . '/';
$FileName = 'output_' . substr($ImportGUID, -8) . '.zip';
$command = '"C:/Program Files/7-Zip/7z.exe" a -tzip "' . $project_dir . 'temp/' . $FileName . '"
"' . $project_dir . 'temp/' . $HSModuleFileName . '" "' . $project_dir . 'temp/' . $SummaryFileName . '" "' . $project_dir . 'temp/' . $NoInvoiceFileName . '"';
exec($command);
$ command的回声:
"C:/Program Files/7-Zip/7z.exe" a -tzip "D:/Projects/JFC/temp/output_38416fc5.zip" "D:/Projects/JFC/temp/HS_Module_38416fc5.xlsx" "D:/Projects/JFC/temp/Summary_38416fc5.xlsx" "D:/Projects/JFC/temp/NoInvoice_38416fc5.docx"
因此生成的output_38416fc5.zip
文件实际上包含整个“D:/ Projects / JFC”文件夹
答案 0 :(得分:0)
"C:/Program Files/7-Zip/7z.exe" a -tzip "D:/Projects/JFC/temp/output_de75eb91.zip"
没有文件列表。 然后我突然意识到我将命令与PHP代码中的换行符分开,就在文件列表之前,这意味着它也被exec处理为换行符。