我有一个Gravity表单,用户可以设置复选框来选择要下载的文件。为了提高用户体验,该表单是多页的,并使用AJAX。
使用以下PHP函数和Gravity Forms Hook,我可以循环遍历所选复选框并将文件添加到ZIP归档文件中,但目前无法开始下载。
使用以下PHP函数和Gravity Forms Hook,我可以循环遍历所选复选框并将文件添加到ZIP归档文件中,但目前无法开始下载。
add_filter( 'gform_after_submission_3', 'download_brochures_message', 10, 4 );
function download_brochures_message( $entry ) {
$confirmation = "Your download should begin shortly. \r\n";
$error = "Files not set \r\n";
$file1 = rgar( $entry, '1.1' );
$file2 = rgar( $entry, '1.2' );
$file3 = rgar( $entry, '1.3' );
$file4 = rgar( $entry, '1.4' );
$files = array(
$file1,
$file2,
$file3,
$file4
);
print_r($files);
$zip = new ZipArchive();
$current_time = time();
$file_folder = wp_upload_dir();
$dir = $file_folder['path'];
$zip_file = tempnam( $dir, time() );
$zip->open( $zip_file, ZipArchive::CREATE );
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
echo $zip_file;
header('Content-disposition: attachment; filename="'.$zip_name.'"');
header('Content-type: application/zip');
header('Content-Length: ' . filesize($zip_file));
header("Location: $zip_file");
readfile($zip_file);
}
由于表单通过AJAX提交,页面头部已经被发送,我收到的PHP错误是“无法修改头信息 - 头信息已经被发送”。我该如何修改这段代码以允许zip文件下载?