🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

2回答

1529閲覧

phpで画像ファイルを連番にリネームしたい

kakedashi_php

総合スコア6

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/01/15 22:29

編集2021/01/15 22:31

前提

データベースに、ユニークなidが振り当てられた下記のようなテーブルがあります。

| id |name |
───────────
|10001 |のび太 |
───────────
|10002 |ドラえもん|

そのユニークなidと同じ名前のフォルダがあり、そこに画像ファイルが数枚入っています。
画像のファイル名は1.jpg、2.jpg・・・と連番になっています。

現在上記情報の編集ページを作っていて
Ajaxを使用して編集ページ内で指定した1枚の画像の削除を行えるようにしました。

やりたい事

画像の削除を行った際に、画像フォルダ内の他の画像ファイルを
また1番からの連番にリネームしたいです。

例えば2.jpgを削除した場合はフォルダ内は
1.jpg、3.jpg、4.jpg 
となるのですが
この場合だと
1.jpg → 1.jpg
3.jpg → 2.jpg
4.jpg → 3.jpg
という風になる様にリネームしたいです。

どうやったらそんなことができるのか、ヒントだけでも知恵を貸していただけないでしょうか。

該当のソースコード

js

1<button type="button" data-order="1" data-id="10001" class="delete">削除</button> 2 3<script> 4$('button.delete').on('click', function() { 5 6 var order = $(this).data('order'); 7 var id = $(this).data('id'); 8 9 $.ajax({ 10 url: 'delete.php', 11 type: 'GET', 12 dataType: 'json', 13 data : { 14 order : order, 15 id : id 16 } 17 }).done(function(data){ 18 alert('削除しました。'); 19 20 }).fail(function(data){ 21 alert('削除に失敗しました'); 22 23 }); 24 25}); 26</script>

delete.php

php

1if(isset($_GET['order'] && $_GET['id'])){ 2 $order = $_GET['order']; 3 $id = $_GET['id']; 4 5 unlink(PATH_IMG . $id . "/" . $order . ".jpg"); 6}

補足情報(FW/ツールのバージョンなど)

xampp 8.0
php 8.0

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

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

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

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

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

maisumakun

2021/01/16 00:56

なぜリネームしたいのでしょうか?
kakedashi_php

2021/01/16 01:27

ご回答ありがとうございます 1,3,4となっていると 画像を表示するページで使いづらいなと思ったのと、 画像の削除と追加を繰り返していくと数字がめちゃめちゃになって何が何番目の画像か分かりづらいかなと思い そろえた方がいいのかなと考えました。 表示する側の都合でデータを変えるというのは良くないのですね。 なぜリネームするのかというのを改めて考えるきっかけになりました ありがとうございました。
guest

回答2

0

ベストアンサー

ファイル名そのものをリネームするのではなく、抽出したいディレクトリ内のファイル数をカウントし、連番の request に対してreadfile()で適当に response してあげると良いかと。

なんとなくですが、非常に危険な実装をしている気がします。
アップローダも実装してますよね?アップローダは非常に危険な機能なので、もう一度リスクを精査してみてください。

投稿2021/01/15 23:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kakedashi_php

2021/01/16 01:21

ご回答ありがとうございます。 回答にあったファイル数をカウントというのを利用し 画像がそれほど多くないので、for文で1個ずつリネームすることにしました。 趣味で作っていて、世に出るようなものではないのですが セキュリティについてももっと学ぶことにします。 ありがとうございます。
退会済みユーザー

退会済みユーザー

2021/01/16 02:09

> 画像がそれほど多くないので、for文で1個ずつリネームすることにしました。 それを否定した回答なんですけどね^^; > 趣味で作っていて、世に出るようなものではないのですが インターネット上に置いてあるなら世に出ていると認識してください。 たった一つ問題のあるファイルを置かれるだけで、サーバを乗っ取られてしまいます。 攻撃者の踏み台になるので、場合によっては訴訟に巻き込まれます。
kakedashi_php

2021/01/16 10:36

>request に対してreadfile()で適当に response というのが理解できなかったので、すみません。 ファイルは全部ローカルにあって、今後もアップロードする事はありません。 気を付けます。
guest

0

画像名をリネームしてしまうと、画像を使っているところ全部に影響しませんか。「データをどう使うか」という観点から「リネームするメリットは何か」考えてみては如何でしょうか。
「ユニークである」ことが保証されているなら、リネームすることによるデメリットの方が大きいかと思います。
「ユーザが削除されたからユーザIDを振りなおす」なんてこと普通はやりませんし。

投稿2021/01/16 00:41

m.ts10806

総合スコア80875

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

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

kakedashi_php

2021/01/16 01:26

ご回答ありがとうございます 1,3,4となっていると 画像を表示するページで使いづらいなと思ったのと、 画像の削除と追加を繰り返していくと数字がめちゃめちゃになって何が何番目の画像か分かりづらいかなと思い そろえた方がいいのかなと考えました。 データに対しての考え方をもう一度考えてみます。 ありがとうございます。
m.ts10806

2021/01/16 01:30

>画像を表示するページで使いづらいなと思ったのと どこがですか? 既に「ユニークなidと同じ名前のフォルダ」があるならその中の画像名を全回しで取ってくるだけですよね。 フォルダ内全回しが難しいなら「画像名管理テーブル」もしくは「画像の実態をDBに保存」することで解決します。
kakedashi_php

2021/01/16 10:34

画像ファイル名が連番で、それが順番も担っていたら表示するときの処理は簡単になると思います ファイル名がバラバラだったらどうしたらいいかわかりません。 おっしゃるとおり画像名の管理テーブルをつくってそこに順番などの情報を入れて フォルダ内のファイル名を取得 ↓ 配列に入れて回す 画像1枚ごとにデータベースにアクセスする という風になると前者の方が簡単かなと、素人ながらに感じました。 馬鹿な事言ってたらすみません。
m.ts10806

2021/01/16 10:45

どっちにしても結局全回しするので名前は関係なくなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問