我现在运行了以下代码已经有一段时间了:
$thisdir = "$_SERVER[DOCUMENT_ROOT]/webroot/uploads/user_uploaded_files/";
if( !empty( $files ) ){
$destination = 'uploads/zip_files/meeting_' . $meetingId .'.zip';
$zip = new ZipArchive();
$zip->open( $destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE );
//Add all the uploaded files ( $file = filename.ext )
foreach( $files as $file ){
if(file_exists( $thisdir . $file )){
$zip->addFile('/uploads/user_uploaded_files/' . $file, $file);
}
}
然而,它刚刚停止工作(不确定以前版本,但当前版本是7.0.9)。
foreach循环像以前一样运行,file_exists
始终返回true
,但没有文件被添加到存档。
有没有人经历过这种情况?非常感谢任何帮助或指导。
答案 0 :(得分:1)
你应该测试$ zip-> open work:
$res = $zip->open($destination, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if ($res) {
foreach ($files as $file) {
if (file_exists($thisdir . $file)) {
$zip->addFile('/uploads/user_uploaded_files/' . $file, $file);
}
}
}
你可以添加
error_reporting(E_ALL);
ini_set('display_errors', true);
在脚本的开头,看看是否有任何错误。
答案 1 :(得分:0)
刚刚找到了解决这个问题的方法,并希望将来可以帮助某人。
$files
是一个字符串数组,因此循环遍历它:foreach( $files as $file )
我总是得到一个字符串。
至少我是这么认为的,但是addFile()
显然没有将其视为字符串。
通过在addFile()
之前简单地投射每一个项目来解决问题。解决方案如下所示:
foreach( $files as $file ){
if(file_exists( $thisdir . $file )){
$file = (string)$file;
$zip->addFile('uploads/user_files/' . $file, $file);
}
}