私はワードプレスサイトを持っていて、私が働いている会社のためにHRプラグインを作成しています。1つの機能により、管理者は複数のドキュメントを含むzipファイルをダウンロードできます。正常に動作する次のコードをテストしましたが、選択したディレクトリにZIPアーカイブを作成したいと思います。
function direct_download()
{
if ($_REQUEST['action'] == 'download')
{
$App = new DHR_Application();
$file_name=str_replace(" ","_",$App->Fname)."_".str_replace(" ","_",$App->Lname)."_".$App->ID;
$txt_name=$file_name.".txt";
$txt_path="../user-upload/temp/".$file_name.".txt";
$arc_name=$file_name.".zip";
$txt=$App->Fname." ".$App->Lname."\r\n".$App->ID;
$file=fopen($txt_path,"w+");
fwrite($file,$txt);
$zip = new ZipArchive();
if ($zip->open($arc_name, ZIPARCHIVE::CREATE )!==TRUE)
{
exit("cannot open <$arc_name>\n");
}
$nameAtt1 = pathinfo($App->Att1,PATHINFO_BASENAME);
$zip->addFile($App->Att1,$nameAtt1);
if (($App->Att2 != '') && ($App->Att2 != null))
{
$nameAtt2 = pathinfo($App->Att2,PATHINFO_BASENAME);
$zip->addFile($App->Att2,$nameAtt2);
}
$zip->addFile($txt_name,$txt_path);
$zip->close();
fclose($file);
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$arc_name");
header("Pragma: no-cache");
header("Expire: 0");
readfile("$arc_name");
exit();
}
}
通常、ZIPアーカイブは/wp-admin/ディレクトリに作成されます。WordPressのバックエンドを実行するため、このディレクトリで一時ファイルを作成および削除したくありません。
ファイルのパスを$arc_name
コードブレークに含めると。$ zip-> filenameの値を確認すると、値が「C:/wamp/www/company/user-upload/temp/Tony_Beroni_000001.zip」から「C:\ wamp \ www \ company\user-」に変更されます。 upload \\ temp\Tony_Beroni_000001.zip"。WAMPとネイティブApacheサーバー(しゃれは意図されていません)の違いが原因で、これが問題になる可能性があると思います。
特定のディレクトリにPHPを使用してZIPアーカイブを作成する方法を知っている人はいますか?
編集:$zip->addFile($txt_name,$txt_path);
私はそれが逆にあるべきであるためのパラメータを持っていることに気づきました$zip->addFile($txt_path, $txt_name);