質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

Q&A

解決済

3回答

743閲覧

PHP|ディレクトリ内の画像をソートで一つだけ表示

hati3693

総合スコア24

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

0グッド

0クリップ

投稿2018/09/25 02:39

編集2018/11/22 04:55

このようなページを作っています。
画像をサーバー内のimgフォルダに保存して、保存された中から常に最新画像を表示させたいです。

現時点でフォルダに保存するところまでできていて、
画像の表示、ソートして更新順が最新のものを表示させることができていません。

PHP

1$dir="img/";//画像保存場所 2$pattern="/^[a-z0-9A-Z\-_]+.[a-zA-Z]{3}$/";//日本語無効 3 4if($_SERVER["REQUEST_METHOD"]=="POST" && !empty($_POST)){//POSTかどうかチェック 5 $action=$_POST["action"];//フォームボタンのvalue取得 6 if($action=="updoad"){//アップロード 7 $upfile=$_FILES["image"]["name"];//アップされたファイルを取得 8 if(!empty($upfile)){//アップロードチェック 9 if(!preg_match($pattern,$upfile)){ 10 $er["jp"]="日本語以外のファイル名に"; 11 } 12 $ext=substr($upfile,-3);//画像の拡張子抜出しチェック 13 if($ext!="jpg" && $ext!="gif" && $ext!="png"){ 14 $er["image"]="拡張子はjpg、gif、pngのみ可能"; 15 }else{ 16 $filelist=scandir($dir); 17 foreach($filelist as $file){ 18 if(!is_dir($file)){ 19 if($upfile==$file){ 20 $er["double"]="過去のファイル名に同じ名前があります"; 21 } 22 } 23 } 24 } 25 } 26 if(empty($er)){ 27 move_uploaded_file($_FILES["image"]["tmp_name"],$dir.$upfile); 28 } 29 } 30}

HTML

1<h1>編集画面</h1> 2<div class="bigImg"><?php echo "<img src='img/".$file."' width='100%' />"; ?></div> 3<form method="post" enctype="multipart/form-data" class="seminarFileImg"> 4 <input type="file" name="image"> 5 <input type="hidden" name="action" value="updoad"> 6 <input type="submit" name="button" value="画像を更新"> 7</form>

やりたいこと
・フォルダ内をソートして、更新順が最新の画像1枚だけを表示させたい。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/09/25 02:57

ブラウザの「ソースを表示」で確認してもらいたいのですが「$file」を出力している箇所には想定通りの画像名入ってきてますか?そこは提示されている「編集画面」から参照できるパスになってますか?
m.ts10806

2018/09/25 02:58

そのほか、変数が想定通りの場所に想定通りの値になっているかデバッグしてみてください(画像が正しくアップロードできている前提であれば、おそらくそれだけで解決できそうに思います)
hati3693

2018/09/25 03:04

「画像を更新」ボタンを押した直後であれば画像が表示されますが、別のページからくると画像が表示されていない状態になってしまいます。画像の更新とは別に、フォルダー内の表示のみを左側に行いたいのですが可能でしょうか?
m.ts10806

2018/09/25 03:05

別のページからくると、だとREQUEST_METHODは「GET」になります。 $_SERVER["REQUEST_METHOD"]=="POST" の指定があるため$fileが未定義になるからではないでしょうか。
guest

回答3

0

scandir()によるファイルパス取得は今は画像のチェックだけのために行われているようですが、
$_SERVER["REQUEST_METHOD"]=="POST"  の条件分岐があるため、フォームがPOST送信されたときしかファイルパス取得が行われません。
単なる画面アクセス時に画像を表示したいのであれば、scandir()によるファイルパス取得をしておく必要があります。
ただ、同じような処理を何度も書くのはよろしくないので、冒頭でファイルパスのリストを配列で取得する仕組みを入れておき、送信されたファイルとのチェックはその配列にあるかどうか(in_array()ですかね)でチェックすると良いでしょう。

投稿2018/09/25 03:09

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

OSがUnix/Linux系である前提です。

exec関数でコマンド実行させます。
"ls -t -1"で作成日時の新しい順に1行に1ファイル表示します。
$outputにはその結果が配列で入り、$output[0]には出力結果の先頭行が入ります。

php

1// 拡張子の部分は任意で変更して下さい 2exec ('ls -t -1 ディレクトリ指定/*.jpg', $output); 3//あとは$output[0]を取得すれば最新のが取れるので、それをphp側でうにょうにょと取得させればいけるかと

※別回答のコピペです
参照先

投稿2018/09/25 03:07

mikan_s4n

総合スコア377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

ご回答ありがとうございました。
回答を参考にしてこのようにしたところ最新の画像が表示されたためこれでよしとします。
正直まだ理解度的には低いのでここから精査していこうとおもいます。

HTML

1<h1>編集画面</h1> 2<?php foreach($filesarray as $file){ echo "<img src='img/".$file."' width='100%' />"; } ?> 3<form method="post" enctype="multipart/form-data"> 4<input type="file" name="image"> 5<input type="hidden" name="action" value="updoad"> 6<input type="submit" name="button" value="画像を更新"> 7</form>

PHP

1$dir="img/";//画像保存場所 2$pattern="/^[a-z0-9A-Z\-_]+.[a-zA-Z]{3}$/";//日本語無効 3 4if($_SERVER["REQUEST_METHOD"]=="POST" && !empty($_POST)){//POSTかどうかチェック 5 $action=$_POST["action"];//フォームボタンのvalue取得 6 if($action=="updoad"){//アップロード 7 $upfile=$_FILES["image"]["name"];//アップされたファイルを取得 8 if(!empty($upfile)){//アップロードチェック 9 if(!preg_match($pattern,$upfile)){ 10 $er["jp"]="日本語以外のファイル名に"; 11 } 12 $ext=substr($upfile,-3);//画像の拡張子抜出しチェック 13 if($ext!="jpg" && $ext!="gif" && $ext!="png"){ 14 $er["image"]="拡張子はjpg、gif、pngのみ可能"; 15 }else{ 16 $filelist=scandir($dir); 17 foreach($filelist as $file){ 18 if(!is_dir($file)){ 19 if($upfile==$file){ 20 $er["double"]="過去のファイル名に同じ名前があります"; 21 } 22 } 23 } 24 } 25 } 26 if(empty($er)){ 27 move_uploaded_file($_FILES["image"]["tmp_name"],$dir.$upfile); 28 } 29 } 30} 31date_default_timezone_set('Asia/Tokyo'); 32$expire = strtotime("3 month ago"); 33$filesarray = array(); 34$path = 'img/'; 35$fname = $path.$file; 36$latest_mtime = 0; 37 38if ($handle = opendir($path)) { 39 while (false !== ($file = readdir($handle))) { 40 if ($file != "." && $file != "..") { 41 $filesarray[filemtime( $fname )] = $file; 42 43 } 44 } 45 closedir($handle); 46} 47ksort($filesarray);

ありがとうございました。

投稿2018/09/25 04:56

hati3693

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問