move_upload_file()の注意点
ログイン画面などでユーザーがアップロードした画像ファイルを指定のフォルダ内に保存しようとした際、move_upload_file()の使い方でわかりづらい箇所があったのでまとめました。
結論:move_upload_file()の2つ目のパラメーターはファイルを保存するフォルダ等のパスだけでなく、保存するファイルの名前まで含めたパスを指定する必要がある。
簡単な具体例:
//image→ファイルをアップロードするためのinputタグのname属性の値
$image = $_FILES['image']['name'];
//保存先のフォルダまでのパス
$upload_dir = "../picture";
//2つ目のパラメーターにフォルダ+ファイル名のパスを指定→pictureフォルダに画像が保存される
move_upload_file($_FILES['image']['tmp_name'], "upload_dir/image");
1, move_upload_file()の基本概要
ユーザーが画像などのファイルをアップロードするとtmp_nameというところに一時的に保存されますが、あくまで一時的なのでアップロードしたファイルをデータベース等に保存するためにはtmp_nameから他の安全な場所に移す必要があります。
その際に使われるのが今回のmove_upload_file()です。move_upload_file()は2つのパラメーターを指定します。
1つ目のパラメーターは現在ファイルが保存されている場所、つまりtmp_nameです。
2つ目のパラメーターには新しく保存する場所までのパスを設定します。
ざっくりとしたイメージはmove_upload_file(どこから, どこへ)という感じ。
この”どこへ”のパスの設定が少し分かりづらくなっており、希望のフォルダにファイルが保存されないことがありました。
例えば一つ上の階層にあるimageというフォルダに移動したい場合のコマンドは"cd ../image"になります。imageフォルダまで移動すれば自動的にそのフォルダ内に画像が保存されると思っていました。
しかしいつまで経ってもフォルダまでのパスでは保存された画像を確認することができません。
2, move_upload_file() 第2パラメーターの指定方法
move_upload_file()の2つ目のパラメーターには保存する場所までのパスだけでなく、保存するファイル名まで指定する必要があります。
*PHPのドキュメントには"指定したファイル名に移動させる" (it will be moved to the filename given by to)との記述があります。
よって、2つ目のパラメーターに保存先のフォルダ名+保存するファイル名を指定することで任意の場所に画像を移動させることができます。
以上を踏まえてもう一度例に上げたコードを見てもらうとイメージできると思います。
//image→ファイルをアップロードするためのinputタグのname属性の値
$image = $_FILES['image']['name'];
//保存先のフォルダまでのパス
$upload_dir = "../picture";
//2つ目のパラメーターにフォルダ+ファイル名のパスを指定→pictureフォルダに画像が保存される
move_upload_file($_FILES['image']['tmp_name'], "upload_dir/image");
まとめ
2つ目のパラメーターの特徴さえ理解すればEasy light weight!