私は「ジレンマ」を抱えており、ビジネスのベストプラクティスとは何か疑問に思っています。
Uploadifyを使用して画像をアップロードしています。次に、ファイルを保存する前にファイル名を検証する必要があります。
私はさまざまな解決策を見てきましたが、1つの良い解決策にたどり着くことができません。
これが私の基準です:
- ファイル名はすべて小文字である必要があります
- ファイル名には文字[a-z0-9_-]のみを含めることができます
- ファイルの名前を変更できる必要があります
ファイル名がである場合、どうしますmy.file(name).jpeg
か?
'。'のファイル名を分解できます。拡張子を保存してから、ファイル名を再度取得するために内包します。しかし、それが最良の解決策であるかどうかはわかりません。
私は少し役立つ次の関数を持っています:
function getExts($filename)
{
$exts = explode("[/\\.]", $filename) ;
$n = count($exts)-1;
$exts = $exts[$n];
return $exts;
}
function validFilename($filename)
{
$filename = str_replace(" ", "_", $filename);
$pattern = "/[^[a-z0-9_-]/";
return preg_replace($pattern, "", strtolower($filename));
}
更新1
$_FILESを介してファイルを受信しています。これにより、次のデータが得られます。
- $ _FILES ["file"]["name"]-アップロードされたファイルの名前
- $ _FILES["file"]["type"]-アップロードされたファイルのタイプ
- $ _FILES ["file"]["size"]-アップロードされたファイルのバイト単位のサイズ
- $ _FILES["file"]["tmp_name"]-サーバーに保存されているファイルの一時コピーの名前
- $ _FILES["file"]["error"]-ファイルのアップロードに起因するエラーコード
UPDATE2
何かを見つけました。7つの要素の配列を返すgetimagesizeを使用できます。これらの要素の1つ[2]はIMAGETYPE_XXXです。
だから私はこのコードを使ってみます:
function getExts2($filename)
{
list(,,$type) = getimagesize($filename);
return $type;
}
しかし、それは数2を返すだけです...
(exif_imagetypeも使用しようとしましたが、PHPエラー:未定義関数の呼び出しのみが発生します。)