WordPressの質問(q10113307)の続
「保存するファイル名につかってはいけない」とのことなのですが、user_add_check.phpの<input type="hidden" name="image_name" value="<?= $user_image['name'] ?>">を使う事はアウトなようです。
自分なりに参考サイトを見て考えてみたのですが、$_SESSION['image']['data']が機能しているのか分からない状態です。
自信がないため2パターン考えてみました。
※参考サイト
https://qiita.com/ryouya3948/items/66294cb445663f2a9d95
user_add.php(要らないもの?)
<h2>新規登録</h2>
<form method="post" action="user_add_check.php" enctype="multipart/form-data">
<input type="text" name="name" class="user_name_input" placeholder="ユーザー名">
<input type="file" name="image" id="my_image" accept="image/*" multiple>
<input class="btn btn-outline-info" type="button" onclick="history.back()" value="戻る">
<input class="btn btn-outline-dark" type="submit" value="登録">
</form>
user_add_check.php(入力画面)
<?php
session_start();
//ファイルの内容を全て文字列に読み込む
$_SESSION['userfile']['data'] = file_get_contents($_FILES['userfile']['tmp_name']);
//アップロードされたファイルの種類を確認--送られてくる MIME タイプは信用できない--メッセージ全体を偽装できる
$_SESSION['userfile']['type'] = exif_imagetype($_FILES['userfile']['tmp_name']);
$_SESSION['userfile']['type'] = mime_content_type ($_FILES['userfile']['tmp_name'] );
//画像であるかどうかをexif_imagetype()を使って判別--画像のみ分ける必要があるのか不明
//$_SESSION['userfile']['type'] = exif_imagetype($_FILES['image']['tmp_name']);
?>
<img src="image.php">
<form method="post" action="user_add_done.php">
<input type="hidden" name="name" value="<?= $user_name ?>">
<input type="hidden" name="image_name" value="<?= $user_image['name'] ?>">
<input type="button" class="btn btn-outline-info modal_close" onclick="history.back()" value="戻る">
<input type="submit" class="btn btn-outline-dark" value="OK">
</form>
image.php(確認画面 バイナリーデータ確認)
<?php
$load_name = $ext
session_start();
switch ($file_ext == $_SESSION['userfile']['type']) {
case IMAGETYPE_JPEG:
header('content-type: image/jpeg');
break;
case IMAGETYPE_PNG:
header('content-type: image/png');
break;
case IMAGETYPE_GIF:
header('content-type: image/gif');
break;
case MIME_TYPE_PDF:
header('content-type: application/pdf');
break;
case MIME_TYPE_MP4:
header('content-type: video/mp4');
break;
}
?>
<?php
$load_name = $ext
session_start();
switch ($file_ext == $_SESSION['userfile']['type']) {
//jpegを表示
case IMAGETYPE_JPEG:
header('content-type: image/jpeg');
echo $_SESSION['image']['data'];
break;
//pngを表示
case IMAGETYPE_PNG:
header('content-type: image/png');
echo $_SESSION['image']['data'];
break;
//pdfを表示
case MIME_TYPE_PDF:
header('content-type: application/pdf');
echo( substr( $_SESSION['image']['data'], 0, 5 ) );
break;
//mp4を表示
case MIME_TYPE_MP4:
header('content-type: video/mp4');
echo( substr( $_SESSION['image']['data'], 4, 4 ) );
break;
}
?>
___________________________________________________________
image.php(確認画面 バイナリーデータ確認)
<?php
function get_file_ext($ext)
{
//MIMEタイプを取得
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $_SESSION['image']['data']);/*$GET['image']['data']*/
if (FILE_EXT_PNG == $ext && 'image/png' == $mime_type) {
} elseif (in_array($ext, [FILE_EXT_JPEG, '.jpg']) && 'image/jpeg' == $mime_type) {
$ext = FILE_EXT_JPEG;
} else {
// バイナリー文字列確認
$contents = file_get_contents($_SESSION['image']['data']);
if (FILE_EXT_PDF == $ext && 'application/pdf' == $mime_type && '%PDF-' == substr($contents, 0, 5)) {
} elseif (FILE_EXT_MP4 == $ext && 'video/mp4' == $mime_type && 'ftyp' == substr($contents, 4, 4)) {
} else {
$ext = null;
}
}
return $ext;
}
?>
user_add_done.php(表示画面 保存拡張子) $_SESSION['image']これを使う
//文字列をファイルに書き込む関数
file_put_contents('./image/',$_SESSION['image']);
お礼
回答期限が切れてしまいました。 下記のURLから引き続きお願い致します。 https://okwave.jp/qa/q10103578.html
補足
回答ありがとうございます。 配列にまとめたものを格納する数字とどのように結びつけて良いのかわからないのですが、格納した数字はどのように取得するのでしょうか? SQLの数字を取得する方法がわからないため、困っております。 Javascriptでは教えていただいたのですが、PHPで可能であればそちらを使用したいです。 まだJavascriptへの理解が浅いため不安要素は減らしておきたいです。 以前のRSSの$template_numberの時のように1=,2=,3=でまとめられるのではと考えていたのですが、データベースstanpカラムに格納された数字は関数だと思いますので、$stamp=1,2,3,4,5とするのは間違っていますし… 以前dell_okさんにアドバイス頂いたフォーム側の名前は下記のコードで書き換えました。 ※フォーム側の名前をstampに変えたもの https://wandbox.org/permlink/A4VLYzAR2h4uYYRh ※Javascriptで格納する方法 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11275441906