ファイルアップロード時に正しい拡張子かチェックしたり保存するときにファイル名をDBに登録する場合を想定しています。
また、DBから取得したファイル名の拡張子を見て出力方法を変えたり、ファイル名に特殊な文字列を持たせてそれを読み取って表示方法を変えたりなどもできます。
要はテキストの状態のファイルパスから、拡張子のみや拡張子を除いたファイル名だけを抜き出す方法です。
. や / で文字列を分割して最後が拡張子で・・・なんてことをする必要はありません。
PHPには便利な関数がありますのでそれを使った方法を紹介します。
PHPで拡張子を取得する方法
PHPでファイルパスから拡張子を取得するには pathinfo() を使います。
$ファイルパスにはファイルのパスを入れます。
例えば、/abc/def/ghi/image.jpg のような感じです。
PATHINFO_EXTENSIONは固定です。これを入れると拡張子だけを返してくれます。
サンプルとしてコードを書くと次のようになります。
| 
					 1 2  | 
						$path = "/abc/def/ghi/image.jpg"; echo pathinfo($path, PATHINFO_EXTENSION); // jpg と出力  | 
					
これでファイルパスから
| 
					 1  | 
						jpg  | 
					
だけを取得し出力できます。
簡単ですね。
PHPでファイル名を取得する方法
ファイル名も同様に pathinfo() を使います。
第2引数を変えればファイル名だけが取得できます。
第1引数の$ファイルパスは同じで、第2引数をPATHINFO_FILENAMEにすればOKです。
| 
					 1 2  | 
						$path = "/abc/def/ghi/image.jpg"; echo pathinfo($path, PATHINFO_FILENAME); // image と出力  | 
					
これで
| 
					 1  | 
						image  | 
					
と出力できます。
便利ですね!
pathinfo()について
第2引数を入れずにpathinfo()にパスだけを入力して実行すると、ディレクトリやファイル名、拡張子を分割して配列で返してくれます。
| 
					 1 2 3  | 
						$path = "/abc/def/ghi/image.jpg"; $v = pathinfo($path); var_dump($v);  | 
					
上のコードのように書けば、
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						array(4) {   ["dirname"]=>   string(12) "/abc/def/ghi"   ["basename"]=>   string(9) "image.jpg"   ["extension"]=>   string(3) "jpg"   ["filename"]=>   string(5) "image" }  | 
					
のように出力されます。
まとめて取得したい場合には便利ですね。
さらに、第2引数には他にもオプションがあり、
| 
					 1 2  | 
						$path = "/abc/def/ghi/image.jpg"; echo pathinfo($path, PATHINFO_DIRNAME);  | 
					
のように PATHINFO_DIRNAME を指定するとディレクトリのみを抜き出し
| 
					 1  | 
						/abc/def/ghi  | 
					
と出力されます。
他にも、
| 
					 1 2  | 
						$path = "/abc/def/ghi/image.jpg"; echo pathinfo($path, PATHINFO_BASENAME);  | 
					
のように PATHINFO_BASENAME を指定すると拡張子つきのファイル名で
| 
					 1  | 
						image.jpg  | 
					
と出力されます。
まとめ
pathinfo() を使うとファイルパスから拡張子やファイル名、ディレクトリを取得することができる。
拡張子を取得する場合には、第2引数に PATHINFO_EXTENSION を指定する。
拡張子なしのファイル名を取得する場合は、第2引数に PATHINFO_FILENAME を指定する。
ディレクトリだけを取得する場合は、第2引数に PATHINFO_DIRNAME を指定する。
拡張子つきのファイル名を取得する場合は、第2引数に PATHINFO_BASENAME を指定する。
第2引数を指定しなかったら上の項目が配列で全て取得できる。




	        	        		
	        	        		
	        	        		
	        	        		
	        	        		
	        	        		
	        	        		
	        	        		
			
			
			
			
			
コメントを残す