実現したいこと
PHPを使用し掲示板を作成しています。
ユーザー別にログインができるようになっており、投稿した画像をユーザーの投稿別に表示できるようにしたいです。
発生している問題・エラーメッセージ
herokuでデプロイしているため投稿した画像はAWS S3のバケットに保存をしているのですが、サイト上の投稿一覧画面では以下の写真のアイコンが2つ表示されAWS S3に投稿した画像が表示されない状況です。
(S3のバケット内では画像の保存の確認はできています。)
試したこと
以下のようにlistObjects
を使用し画像一覧を取得しforeachに組み込むことで一覧が表示できるとかと思いましたが、そもそもデーターベースのユーザーテーブルとポストテーブルから取得しているユーザー名と投稿内容を既にforeachで表示している中にさらにS3からの画像をforeachでループできるのしょうか?
$objects = $s3Client->listObjects([ 'Bucket' => $bucket, ]);
該当のソースコード
<!-- Posts --> <?php use Aws\S3\S3Client; if(isset($_REQUEST['page'])){ $page = $_REQUEST['page']; }else{ $page == ''; $page = 1; } $page = max($page,1); $counts = $db->query('SELECT COUNT(*) AS cnt FROM posts'); $cnt = $counts->fetch(); $maxPage = ceil($cnt['cnt'] / 5); $page = min($page, $maxPage); $page_start = ($page - 1) * 5; $posts = $db->prepare('SELECT u.user_name, p.* FROM users u, posts p WHERE u.user_id=p.post_user_id ORDER BY p.post_date DESC LIMIT ?,5'); $posts->bindParam(1, $page_start, PDO::PARAM_INT); $posts->execute(); $bucket = '****'; $key = '****'; $secret = '****'; $s3Client = new Aws\S3\S3Client([ 'region' => 'ap-northeast-1', 'version' => '2006-03-01', 'credentials' => [ 'key' => $key, 'secret' => $secret, ] ]); $objects = $s3Client->listObjects([ 'Bucket' => $bucket, ]); ?> <!-- Post preview--> <?php foreach ($posts as $post): ?> <div class="post-preview"> <a href="post.php?post_id=<?php echo htmlspecialchars($post['post_id']); ?>"><?php echo htmlspecialchars($post['post_contents']); ?></a> <p class="postContents"><?php echo htmlspecialchars($post['post_date'], ENT_QUOTES); ?> | <?php echo htmlspecialchars($post['user_name'], ENT_QUOTES); ?></p> <?php foreach ((array)$objects as $object): ?> <img width="300" src="https://s3-ap-northeast-1.amazonaws.com/<?php echo $bucket ?>/<?php echo $object['Key'] ?>" /><br /> <?php endforeach; ?> <hr class="my-4" /> </div> <?php endforeach; ?>
どなたか知見のある方ご教示いただけると幸いです。
どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー