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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

4075閲覧

phpで簡易掲示板を作成した際、画像のアップロード後に404エラーが発生しました。解決方法を教えてください。

syoma

総合スコア15

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

アップロード

アップロードは特定のファイルをウェブサーバに送るプロセスのことを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2018/01/03 14:23

MAMPで簡易掲示板を作成し、テストをしているところで
画像のアップロードには成功しましたが、表示がうまくされません。
404エラーが発生しました。
しょうもないミスだとは思いますが、解決方法がわかりません。
解決方法を教えてください。

g_logon.html

g_logon2.php

g.php 一覧表示画面

g_up.php 画像アップロード

g_up_set.php 画像アップロード結果

g.php 一覧表示画面 アップロード画像確認できない 小さい四角でハテナマークが表示される

クリックすると下記の404エラーが表示される

画像アップロード結果から画像がうまく表示されません。
ディレクトリのパスは/Applications/MAMP/htdocs/内に
htdocs/g_main/とhtdocs/gz_img/があり
上記のファイルは全て/g_mainに保存されているのですが
画像ファイルは/gz_imgにアップロード後ちゃんと移されているのを確認しています。

Not Found The requested URL /Applications/MAMP/htdocs/gz_img/20180103230252img.jpg was not found on this server.

php

1g.php 2 3<?php 4 session_start(); 5?> 6 7<!doctype html> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>ようこそクリエイティブ写真館 desu('_')へ!</title> 12</head> 13<body> 14 15<?php 16 if(isset($_SESSION['us']) && $_SESSION['us'] != null){ 17?> 18 19<p style='color: red'>クリエイティブ写真館 desu('_')へ!</p> 20<p><a href='g_up.php'>アップロード</a><br> 21<a href='g_logoff.php'>ログオフ</a></p> 22 23<?php 24 require_once("db_init.php"); 25 $ps=$db->query('select * from table1 order by ban desc'); 26 while($r=$ps->fetch()){ 27 $tg=$r['gaz']; 28 print "<p>{$r['ban']}【投稿者:{$r['nam']}{$r['dat']}<br>" 29 .nl2br($r['mes']) 30 ."<br><a href='/Applications/MAMP/htdocs/gz_img/$tg' target='_blank'> 31 <img src='/Applications/MAMP/htdocs/gz_img/thumb_$tg'></a><hr></p>"; 32 } 33?> 34 35<p><a href='g_up.php'>アップロード</a><br> 36<a href='g_logoff.php'>ログオフ</a></p> 37 38<?php 39 }else{ 40 session_destroy(); 41 print "<p>ちゃんとログオンしてね!<br> 42 <a href='g_logon.html'>ログオン</a></p>"; 43 } 44?> 45 46</body> 47</html>

php

1g_up.php 2 3<?php 4 session_start(); 5?> 6 7<!doctype html> 8<html> 9<head> 10<meta http_equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>ようこそクリエイティブ写真館 desu('_')へ!</title> 12</head> 13<body> 14<p style='color:red'>クリエイティブ写真館 desu('_')</p> 15 16<?php 17 if(isset($_SESSION['us'])&& $_SESSION['us']!=null){ 18?> 19 20<p>投稿よろしくお願いします!</p> 21<form enctype='multipart/form-data' action='g_up_set.php' method='post'> 22名前<br> 23<input type='text' name='myn'><br> 24メッセージ<br> 25<textarea name='mym' rows='10' cols='70'></textarea><br> 26<input type='file' name='myf'> 27<p>送信できるのは1MBまでのJPEG画像だけです!<br>また展開後のメモリ消費が多い場合アップロードできません。</p> 28<input type='submit' value='送信'> 29</form> 30<p><a href='g.php'>一覧表示へ</a></p> 31 32<?php 33 }else{ 34 session_destroy(); 35 print "<p>ちゃんとログインしてね!<br><a href='g_logon.html'>ログオン</a></p>"; 36 } 37?> 38 39</body> 40</html>

php

1php_up_set.php 2 3<?php 4 session_start(); 5?> 6 7<!doctype html> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>ようこそクリエイティブ写真館 desu('_')へ!</title> 12</head> 13<body> 14 15<?php 16 if(isset($_SESSION["us"])&& $_SESSION["us"] !=null){ 17 $file=$_FILES['myf']; 18 19 if($_POST['myn']<>""&& $_POST['mym']<>""&& $file['size']>0 20 && ($file['type']=='image/jpeg'|| $file['type']=='image/pjpeg') 21 && (strtolower(mb_strrchr($file['name'],'.',false))==".jpg")){ 22 23 if($file['size']>1024*1024){ 24 unlink($file['tmp_name']); 25?> 26 27<p>アップするファイルのサイズは1MB以下にしてください</p> 28<p><a href='g_up.php'>アップロード画面に戻る</a></p> 29 30<?php 31 }else{ 32 //アップロードされた画像ファイルを移動 33 $ima=date('YmdHis'); 34 $fn=$ima.$file['name']; 35 move_uploaded_file($file['tmp_name'],'/Applications/MAMP/htdocs/gz_img/'.$fn); 36 37 $my_nam=htmlspecialchars($_POST['myn'],ENT_QUOTES); 38 $my_mes=htmlspecialchars($_POST['mym'],ENT_QUOTES); 39 40 //サムネイルの作成 41 $motogazo=imagecreatefromjpeg("/Applications/MAMP/htdocs/gz_img/$fn"); 42 list($w,$h)=getimagesize("/Applications/MAMP/htdocs/gz_img/$fn"); 43 $new_h=200; 44 $new_w=$w*200/$h; 45 $mythumb=imagecreatetruecolor($new_w,$new_h); 46 imagecopyresized($mythumb,$motogazo,0,0,0,0,$new_w,$new_h,$w,$h); 47 imagejpeg($mythumb,"/Applications/MAMP/htdocs/gz_img/thumb_$fn"); 48 49 //サムネイルの表示 50 print "<p>".$file['name']."のアップロードに成功!<br> 51 <img src='/Applications/MAMP/htdocs/gz_img/thumb_$fn'></p>"; 52 53 //データベースに追加 54 $c_ip=$_SERVER['REMOTE_ADDR']; 55 $c_host=gethostbyaddr($c_ip); 56 require_once("db_init.php"); 57 58 $ps=$db->prepare("insert into table1 (nam,mes,ope,gaz,dat,ip,host) values (:v_n,:v_m,1,:v_g,:v_d,'$c_ip','$c_host')"); 59 $ps->bindParam(':v_n',$my_nam); 60 $ps->bindParam(':v_m',$my_mes); 61 $ps->bindParam(':v_g',$fn); 62 $ps->bindParam(':v_d',$ima); 63 $ps->execute(); 64 print "<a href='g.php'>一覧表示へ</a>"; 65 } 66 }else{ 67?> 68 69<p>名前とメッセージを入力しJPEGファイルを選択してください<br><a href='g_up.php'>再度アップロード</a></p> 70 71<?php 72 } 73 }else{ 74 session_destroy(); 75 print "<p>ちゃんとログオンしてね!<br><a href='g_logon.html'>ログオン</a></p>"; 76 } 77?> 78 79</body> 80</html>

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

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

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

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

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

guest

回答2

0

以下のエラーメッセージですが、

Not Found
The requested URL /Applications/MAMP/htdocs/gz_img/20180103230252img.jpg was not found on this server.

これは、このURL上にファイルがないという意味です。上記は実際のファイル名ですが、URLのパス名としては間違っています。おそらく下記が正しいのではないでしょうか? ブラウザ上で確認してみるとよいと思います。

/gz_img/20180103230252img.jpg

蛇足ながら、以下はクロスサイトスクリプティング(XSS)の可能性があります。

PHP

1//サムネイルの表示 2print "<p>".$file['name']."のアップロードに成功!<br> 3img src='/Applications/MAMP/htdocs/gz_img/thumb_$fn'></p>";

$fnは、htmlspecialchars関数を通す必要があります。

また、以下は余計というか、タイミングがおかしいです。

PHP

1$my_nam=htmlspecialchars($_POST['myn'],ENT_QUOTES); 2$my_mes=htmlspecialchars($_POST['mym'],ENT_QUOTES);

この後DBにこれらを格納していますが、htmlspecialchars関数を使うのは表示の直前、というのが原則です。そうでないと、クロスサイトスクリプティング脆弱性が入り込みやすいです。

投稿2018/01/03 22:06

ockeghem

総合スコア11701

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

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

syoma

2018/01/04 06:20

アドバイスをもとに書きコード修正をし、無事画像の表示がされました! ありがとうございます! g.php while($r=$ps->fetch()){ $tg=$r['gaz']; print "<p>{$r['ban']}【投稿者:{$r['nam']}】{$r['dat']}<br>" .nl2br($r['mes']) ."<br><a href='/Applications/MAMP/htdocs/gz_img/$tg' target='_blank'> <img src='/gz_img/thumb_$tg'></a><hr></p>"; } g_up_set.php //サムネイルの表示 print "<p>".$file['name']."のアップロードに成功!<br> <img src='/gz_img/thumb_$fn'></p>";
guest

0

ベストアンサー

httpサーバはドキュメントルートという設定をしています。
指定したディレクトリより上にはブラウザ側からはアクセスができないようになっています。
「絶対パス」でアクセスできますと見られたくないファイルにアクセスできてしまうからです。
ockeghemさんの仰る通り
例えばドメインがhttp://localhost/でしたら
http://localhost/gz_img/20180103230252img.jpgで画像が表示されるかと思います。

<img src="">にはドキュメントルートからの記述となりますので
<img src="/gz_img/20180103230252img.jpg">でOKと思います。

私も蛇足で一つ

画像のファイル名を日時で生成していますが、同時にアップロードされますと問題があると思います。
http://jp2.php.net/manual/ja/function.move-uploaded-file.php
警告 コピー先のファイルが既に存在する場合、上書きされます。

同じ日時(秒)でアップロードされると最後にアップロードした画像が有効になり、同じ画像になってしましまいます。
同時のアップロードが絶対にありえないのであればよいのですが、
マイクロ秒まで使うとか乱数を付加するとかファイルのmd5を追加するとかで、ファイルの存在を確認してファイル名を再生成するとか対策が必要かと思います。

投稿2018/01/03 23:59

編集2018/01/04 00:01
packet1024

総合スコア342

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

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

syoma

2018/01/04 06:20

アドバイスをもとに書きコード修正をし、無事画像の表示がされました! ありがとうございます! g.php while($r=$ps->fetch()){ $tg=$r['gaz']; print "<p>{$r['ban']}【投稿者:{$r['nam']}】{$r['dat']}<br>" .nl2br($r['mes']) ."<br><a href='/Applications/MAMP/htdocs/gz_img/$tg' target='_blank'> <img src='/gz_img/thumb_$tg'></a><hr></p>"; } g_up_set.php //サムネイルの表示 print "<p>".$file['name']."のアップロードに成功!<br> <img src='/gz_img/thumb_$fn'></p>";
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問