送信フォームを使って画像をアップロードさせたいのですが、うまくいきません。ブラウザ上でエラー表示は出ないのですが、移動させたいディレクトリにファイルが入って来ない状況です。
初心者なので、参考書を片手に例文をカスタマイズしていったので、アルゴリズム自体がどこか間違っているかもしれないです。
特に下記ソースコード中の
『$path = getcwd();~』
の辺りで、スクリプトのあるディレクトリパスを取得して、パスの末尾に"¥"or"/"を追加しているのは理解出来るのですが、
そもそも何のスクリプトのパスを取得しているのかが解らず、
結局テンポラリディレクトリからの移動先ディレクトリを自分で$new_dirと定義してmove_uploaded_file()しています。
どなたか詳しい方いらっしゃいましたらご教示宜しくお願いします!
===========ソースコード===============
<?php
if (isset($_POST["submit"])) {
//-------------------------------------------------------------------------
//■クライアントから取得する元ファイル名を$pic_name、
//■テンポラリディレクトリ名を$pic_tmp
//■テンポラリディレクトリからの移動先ディレクトリを$new_dir
//-------------------------------------------------------------------------
$pic_name = $_FILES["pic"]["name"];
$pic_tmp = $_FILES["pic"]["tmp_name"];
$new_dir = "http://xxx.com/pic/";
//----------------------------------------------------------------------------------
//■エラーメッセージは配列に追加
//----------------------------------------------------------------------------------
$error_message = array();
$path = getcwd();
if (isset($_ENV["OS"]) && preg_match("/window/i", $_ENV["OS"])) {
$path .= "\\";
} else {
$path .= "/";
}
if (strlen($pic_name)>0 && strlen($pic_tmp)>0) {
//----------------------------------------------------------------------------------
//■テンポラリディレクトリにファイルがアップされているかチェック
//----------------------------------------------------------------------------------
if (is_uploaded_file($pic_tmp)) {
//----------------------------------------------------------------------------------
//■ファイルを移動
//----------------------------------------------------------------------------------
if (!move_uploaded_file($pic_tmp, $new_dir .basename($pic_name))) {
$error_message[] = "●自画像ファイルのアップロードに失敗しました";
}
}
}
}
?>
<html>
<form method="post" action="<?=$SERVER["PHP_SELF"]?>" enctype="multipart/form-data" >
画像のアップロードフォーム
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="file" name="pic" size="40">
</html>
No.2ベストアンサー
- 回答日時:
#1です。
はずれでしたか(笑。
ちょっと気がついたところを。
最初に
if (isset($_POST["submit"])) {
とありますが、アップロードフォームにsubmitという名前のついた送信ボタンはありませんが、そのボタンはあるのでしょうか?
フォームタグも閉じられて(</form>)いません。
あと、基礎的な事ですが、フォームでMAX_FILE_SIZEを指定しています。最近の画像ファイルはとても大きいので、結構これで引っかかる可能性があるんですよね。
このスクリプトではどこで問題が起こっているか分かりにくいですね。何も表示されないというのは困ります。
問題を切り分ける為に、たくさんのデバッグ用のエラーや状況を吐き出すようにしておいた方が良いです。スクリプト部分をエラー表示用に書き換えてみます。コメントはうざいので削除しました。私の環境では問題なく動いています。
///////////////////////////////////////////////////
<?php
$debug = true;//デバッグ用フラグ、trueならばデバッグ中、falseならデバッグ終わり
if (isset($_POST["submit"])) {
if($debug) echo "送信ボタンが押されました";
$pic_name = $_FILES["pic"]["name"];
$pic_tmp = $_FILES["pic"]["tmp_name"];
$new_dir = "path/";//保存先のディレクトリを指定してください
$error_message = array();
$path = getcwd();
if (isset($_ENV["OS"]) && preg_match("/window/i", $_ENV["OS"])) {
$path .= "\\";
} else {
$path .= "/";
}
if (strlen($pic_name)>0 && strlen($pic_tmp)>0) {
if($debug) echo "送信されたファイル名{$pic_name}、一時ファイル名{$pic_tmp}";
if (is_uploaded_file($pic_tmp)) {
if($debug) echo "{$pic_tmp}へアップロードされました";
if (!move_uploaded_file($pic_tmp, $new_dir .basename($pic_name))) {
$error_message[] = "●自画像ファイルのアップロードに失敗しました";
}else{
if($debug) echo "アップロードに成功しました";
}
}else{
if($debug) echo "{$pic_tmp}のアップロードに失敗しました。";
}
}else{
if($debug) echo "ファイル名が空なのでアップロードに失敗しています";
}
}else{
if($debug) echo "送信ボタンが押されていません";
}
?>
<html>
<form method="post" action="<?=$SERVER["PHP_SELF"]?>" enctype="multipart/form-data" >
画像のアップロードフォーム
<input type="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="file" name="pic" size="40">
<input type="submit" name="submit" value="送信" />
</html>
/////////////////////////////////////////////////////
この回答への補足
taketan_mydns_jpさんありがとうございます!
とりあえず、アップロードには成功しました☆♪
そこで、また相対パスの話に戻るのですが、
-----------------------------------------------------------
┳送信フォーム.php
┃
┣[picフォルダ]━ 画像.jpg
-----------------------------------------------------------
としたいのですが、今の状態ですと
-----------------------------------------------------------
┳送信フォーム.php
┣[picフォルダ]
┣ 画像.jpg
-----------------------------------------------------------
となってしまうのです・・
正しくフォルダ名picにアップロードしたい場合はどのように
パスを記述すれば良いでしょうか?
今の所パスは
$new_dir .= "\.\\pic\\";
もしくは
$new_dir .= "pic\\";
とやってみて失敗でした(><;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ポインタ配列をfscanfで読み込...
-
Flaskでサーバー立ち上げに関して
-
Fortranでのファイル名操作につ...
-
WordのIDataObject::GetData呼...
-
POSTの項目に追加
-
phpで変数を使ってcopyできない
-
PHPからHTMLへの変数の受け...
-
重複を防ぐ記述について教えて...
-
csvファイルチェック
-
検索結果の出力先を違うフレー...
-
phpでショッピングカート機能を...
-
phpで、フォームのラジオボタン...
-
phpでのセレクトボックスの値を...
-
プルダウンとCSVの連動
-
<input type="hidden" >で配列...
-
アマゾンのような評価の星を選...
-
POSTを使わずに値を渡す方法
-
PHPのエラーの解消法について教...
-
laravelを利用してコントロール...
-
「"」(ダブルクォーテーション)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Flaskでサーバー立ち上げに関して
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
phpで変数を使ってcopyできない
-
PHPで入力フォームでデータを確...
-
PHPからHTMLへの変数の受け...
-
POSTの項目に追加
-
PHP MySql 画像を取得
-
MySQL,PHPのリロードによる二重...
-
UPDATEできない
-
ファイル名を変更してアップロ...
-
php、sqlite3にデーター追加で...
-
openCVのトラックバーについて
-
複数条件での検索について教え...
-
PHP5でsimple_xml_load_fileす...
-
PHPのリロード時の処理
-
連想配列を複数条件で比較して...
-
PDOのprepareでLIKEの部分一致...
-
POSTされない
-
アップロードしたファイルの絶...
おすすめ情報