アップロードした画像をうまく表示できません。
a.php というスクリプトファイルを作成しました。
その中身の構成は、
1. [2.]の結果として戻ってきた場合のみ、画像を所定の場所に保存し、表示するスクリプト
2. formの<input type="file">があるスクリプト。戻り先はこのスクリプトがある、a.phpというファイル
というようになっております。
2.のsubmitボタンを押して結果を確認したところ、画像はきちんと所定の場所に保存されるのですが、その時点ではうまく表示されません。「更新」ボタンを押して初めて画像が表示されます。
これを2.のsubmitボタンを押して、戻ってきた瞬間に表示させることは出来ないものでしょうか。教えて頂けると助かります。どうぞ宜しくお願いします。
No.3ベストアンサー
- 回答日時:
やっと現象が理解できました。
古い画像が表示されるということですね。キャッシュの問題だと思います。PHPでできる一番簡単な対策は、test.phpのimgタグのURLの後ろにダミーパラメータを付ける方法かなと思います。
echo "<img src=\"$picture_file_path?". rand(). "\" width=\"100\" height=\"100\">";
header関数でレスポンスを操作する場合、test.phpでやっても効果が無いです。画像のレスポンスヘッダをいじる必要があります。
その場合、test.phpでは
echo "<img src=\"img.php\" width=\"100\" height=\"100\">";
としておいて、以下のようなimg.phpを作ります。
=== img.php ==============
<?php
// Content-Typeヘッダ出力
header('Content-type: image/jpeg');
// キャッシュをさせないためのHTTPヘッダを出す
(省略)← 無くても多分大丈夫です
// test.jpgをレスポンス
echo file_get_contents('test.jpg');
?>
No.2
- 回答日時:
ANO1の者です。
ファイルアップロードですから、move_uploaded_fileを使いますよね。ボケた回答ですみませんでした。忘れて下さい。ソースコードのご提示があったので、自分の環境でやってみたのですが、全く問題なく動きました。
bumpei617さんの環境で動かない理由はよく判りませんが、サーバのエラーログをみれば、test.jpgをブラウザが取りに行ってNot Foundになっているのか、あるいはブラウザのキャッシュなどでそもそも画像ファイルを取りに行っていないのかは判ります。なので、まずはエラーログを再確認してみては如何でしょうか。
この回答への補足
ありがとうございます。
エラーログの確認方法を把握するのに、少し手間取っていますが、
何とか確認してみます。
ちなみにキャッシュの問題というのが濃厚かと思っているので、
header("Expires: Sat, 01 Jan 2000 00:00:00 GMT"); // Date in the past
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT"); // always modified
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
というコードをさしはさみましたが、だめでした。
古い画像が表示されるままです。
header("Refresh: 0; url=a.php'");
の一行があれば、切り替わった時に正しい画面が表示されるのですが、わざわざrefreshしないで、きちんと表示できないか、悩み中です。。
No.1
- 回答日時:
プログラムのご提示がないので、動作からの推測です。
>画像を所定の場所に保存し、表示するスクリプト
「保存」できちんと保存されていないのではないかと思います。
ファイルの書き出しをした直後に(表示する処理の前に)、一旦ファイルのcloseなどが必要だと思うんですが、その処理が漏れてませんか?
この回答への補足
ご回答ありがとうございます!
なるほど、そういう可能性もあるのですね。
ちょっと調べてみたのですが、move_uploaded_fileを使った時、
どうcloseするのか、見当たりませんでした。。
尚、下記がソースコードになります。
これを実行して頂くと分かりますが、
ファイルはアップロードされるものの、
(FTPソフトで新しい画像がアップされているのが確認できる)
表示画面が切り替わりません。
ブラウザの更新ボタンを一回押すと、正しい画像が表示されます。
またgetimagesize()を<img>タグの前に使うと、
この関数では新しい画像をきちんと認識していることが分かりました。
なので、ブラウザがローカルに一時ファイルをためていて、
新しい画像をダウンロードしていないのかなどと推測していますが。。
解決の方法は想像つきますでしょうか。
--- source ---
// 1. 写真の保存、表示
// 保存
if($_POST["action"] == "y") {
$picture_temp = $_FILES["picture_file"]["tmp_name"];
if( ($_FILES["picture_file"]["type"] == "image/pjpeg") or ($_FILES["picture_file"]["type"] == "image/jpeg")) {
$picture_name = "test.jpg";
$picture_file_path = "../../images/pictures/$picture_name";
move_uploaded_file($picture_temp, $picture_file_path);
chmod($picture_file_path, 0666);
}
}
// 表示
echo "<img src=\"$picture_file_path\" width=\"100\" height=\"100\">";
// 2. アップロード用のフォーム
echo "<form action=\"test.php\" enctype=\"multipart/form-data\" method=\"POST\">
<input type=\"hidden\" name=\"MAX_FILE_SIZE\" size=\"500000\">
<input type=\"file\" name=\"picture_file\" size=\"50\">
<input type=\"hidden\" name=\"action\" value=\"y\">
<input type=\"submit\" value=\"送信\">";
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- X(旧Twitter) ツィッターの画像表示について 1 2023/08/17 09:28
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHP MySQLに画像を直接保存
-
VBAでJPGサイズ変更
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
手作業で埋め込んだ、UserForm1...
-
ドラッグアンドドロップで画像...
-
JavaScriptを使用せず画像をラ...
-
画像ファイルサイズの上限について
-
ブラウザのURLの前に画像な...
-
PHPによる画像の生成による色の...
-
画像の読み込みが遅いサイトと...
-
拡張子php画像をjpg画像等に変...
-
SQLiteに画像を格納したい
-
ビットマップ画像を読み込むプ...
-
ファイルアップロード
-
ファルダに画像をいれておいて...
-
[php初心者]サイトを見てデータ...
-
別ファイルの変数を呼び出した...
-
PHPのif文でその処理を途中で抜...
-
ImageStringで日本語表示させたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
透過PNGが透過されない!!
-
VBSの「MsgBox」について
-
拡張子php画像をjpg画像等に変...
-
C# Excelファイルへの画像挿入。
-
VBAでJPGサイズ変更
-
iphoneで虫眼鏡の作り方
-
SQLiteに画像を格納したい
-
PHP MySQLに画像を直接保存
-
Illustratorで文字と画像を流し...
-
openCVの超解像処理
-
ChatGPTに作らせたい Excel VBA
-
PHPで吐き出した画像にリンクを...
-
PHPによる画像の生成による色の...
-
GDI+を使ったビット数とDPIの扱い
-
pictureboxに表示した画像のフ...
-
ImageTTFTextで保存すると文字...
-
OpenGLで描いて画像ファイル出力
-
ビットマップ画像を読み込むプ...
-
ウィンドウサイズを取得して、p...
-
BLOBデーターの画像の表示方法...
おすすめ情報