.htaccessでPHPのファイルアップロードサイズの上限値を変更
2022.02.5
PHPを使用して画像(動画・PDF等)をアップロードするフォームを作成した際に、ファイル…
ホワイトペーパーのダウンロードを実装した際に、数が増え、単体で何回もフォームの入力操作を行ってもらうのも不便なので、複数のファイルを同時にダウンロードできるように実装した方法をメモ。
<form action="download.php" method="post">
<input type="hidden" name="download__token" value="xxxxxxxxxx">
<dl>
<dt>メールアドレス</dt>
<dd><input type="text" name="email" placeholder="例)mail@example.com"></dd>
<dt>希望ファイル</dt>
<dd><?php FormCheckboxary($dlfiles, 'doc', $dt['doc'], 'label'); ?></dd>
</dl>
<div class="btnSubmit"><input type="submit" name="download" value="選択ファイルを圧縮してダウンロード"></div>
</form>
$dlfiles = array(
1=> array('label'=> '○○○○', 'name'=>'○○○○.pdf'),
array('label'=> '△△△△', 'name'=>'△△△△.xlsx'),
array('label'=> '□□□□', 'name'=>'□□□□.xlsx')
);
if(!empty($_POST['download'])){
// フォームの取得
foreach($_POST as $key => $value){
if(!is_array($_POST[$key])){
$dt[$key] = $value;
}else{
foreach($_POST[$key] as $innerkey => $value){
$dt[$key][$innerkey] = $value;
}
}
}
// エラー処理省略
// 圧縮対象のフォルダ
$sourceDir = '../dlfiles/'; // ファイルが保存されているフォルダ
$zipFileName = 'compressed_documents.zip'; // ZIPファイル名
$zipFilePath = __DIR__ .'/'.$zipFileName;
// ZIPオブジェクトの作成
$zip = new ZipArchive();
if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true) {
die('ZIPファイルを作成できませんでした。');
}
// 指定フォルダ内の対象ファイルを取得
foreach($dt['doc'] as $val){
$filePath = $sourceDir.$dlfiles[$val]['name'];
if(is_file($filePath)) {
$zip->addFile($filePath, basename($filePath));
}
}
$zip->close();
// ZIPをダウンロードさせる
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.$zipFileName.'"');
header('Content-Length: '.filesize($zipFilePath));
readfile($zipFilePath);
// 一時ZIPファイルを削除
unlink($zipFilePath);
exit;
}
function FormCheckboxary($array, $name, $no, $id){
echo('<ul>');
foreach($array as $key => $value){
$str=explode("<>", $no);
if(in_array($key, $str)){
echo('<li><input type="checkbox" name="'.$name.'[]" value="'.$key.'" checked="checked" id="checkbox'.$name.$key.'"><label for="checkbox'.$name.$key.'">'.$value[$id].'</label></li>');
}else{
echo('<li><input type="checkbox" name="'.$name.'[]" value="'.$key.'" id="checkbox'.$name.$key.'"><label for="checkbox'.$name.$key.'">'.$value[$id].'</label></li>');
}
}
echo("</ul>");
return;
}
対象ファイルのリストを連想配列で作成し、チェックボックスで選択したもののみをZIP形式でダウンロードできるようにしています。
2022.02.5
PHPを使用して画像(動画・PDF等)をアップロードするフォームを作成した際に、ファイル…
2020.10.3
テキストエリア等で入力した文字の中にURLを含んでいた場合に、自動で認識してリンクタグを…
2024.03.30
外部ファイル(CSVファイル等)を読み込んでサイト内に表示する際に、保存時の文字コードが…
2020.12.5
メールフォームからメールを送信する際に、画像(ファイル)を添付できるようにしてほしいとの…
2023.12.2
ワードプレスの投稿のカテゴリー機能を、目的ごとに使い分けたいというご要望があった際に、カ…
2020.08.1
動画ファイルをCMS化して保存するときに、多くの場合はファイルパスをデータベース(MyS…
2019.12.29
メールフォーム等での入力値チェック(バリデーション)。PHPの「preg_match」(…
2022.02.19
画像データ等をサーバーにアップロードする際、一点づつアップロードしても良いけれど、ファイ…
2020.08.15
フォームの入力値やURLのパラメータ等、文字列や数値を受け取る際に正規表現を利用してバリ…
2022.09.24
パソコンやスマートフォンの戻るボタンを使って画面を戻す(ブラウザバックする)時があります…