コツコツPHPを勉強していて、入門書も半分に差し掛かり難しくなってきた。
ファイルのアップロードのソースが、理解不能。
色々と見慣れない関数が出てくる。
<?php
if(is_uploaded_file($_FILES['file']['tmp_name'])){
if(!file_exists('upload')){
mkdir('upload');
}
$file='upload/'.basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $file)){
echo basename($file), 'のアップロードに成功しました';
echo '<p><img src="', $file, '"></p>';
}else{
echo 'ファイルのアップロードに失敗しました';
}
}else{
echo 'ファイルを選択してください';
}
分からない部分は
- is_uploaded_file
- $_FILES[‘file’][‘tmp_name’]
- !file_exists
- mkdir
- basename
- move_uploaded_file
7行ぐらいでファイルの処理を行っているが、そのうち6行に知らないものが含まれている。
これだけわからないと、英文でも全く分からなくなる。
is_uploaded_file関数
is_uploaded_file関数は、HTTP POSTでアップされたファイルか調べるもの
アップされたファイルは一旦一時ファイルとして保存されている。
調べるファイルの指定で$_FILES[‘file’][‘tmp_name’]が出てくる。
これが、一時ファイル名に相当する。
$_FILES
$_FILESはグローバル変数という物
フォームからpostされたファイルに対して、5つの値を持っている
ファイル名 | name |
MIMEタイプ | type |
一時ファイル名 | tmp_name |
エラーコード | error |
ファイルサイズ | size |
$_FILES[‘file’][‘tmp_name’]この場合は
name属性fileでpostされたファイルの、一時ファイル名と指定されている。
!file_exists
file_existsこれはファイル(フォルダ)が存在するか調べる関数
その先頭に!が付いている。
!が付くと条件式が逆の意味になる。
なので、ファイルが存在しない場合以下の条件に続く。
mkdir
フォルダを指定したディレクトリに作る
’upload’相対パスがないので、このphpファイルと同じ所に、この名前でフォルダを作る。
basename
hoge/php/hoge.pngのように値があった場合、
最後のファイル名を取得する。
今回は、ファイル名のみが値となっていた。
不正なパスが含まれることもあるので使われている。
move_uploaded_file
アップロードされた一時ファイルを保存する
move_uploaded_file(一時ファイル, 保存先の指定)
まとめ
$_FILESの変数がわかれば、意外と難しくない。
連想配列のような扱いだろうか、
必要なname属性値の、欲しい値を指定するだけ。
分からない関数、変数が多いと全く理解できないのは当然。
英語の単語がわからず穴が開いている状態。
コツコツ調べれば、わかる。
わからない時は、昼寝する。
コメント