Amazon S3 API を使用してファイルをアップロードしていますが、アップロードするたびにファイルの名前を変更しています。
たとえば、次のようになります。
犬.png > 3Sf5f.png
これで、ランダムな部分が次のように機能するようになりました。
function rand_string( $length ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ ) {
$str .= $chars[ rand( 0, $size - 1 ) ];
}
return $str;
}
したがって、次のように name パラメータに random_string を設定します。
$params->key = rand_string(5);
今私の問題は、これが拡張子を表示しないことです。3Sf5f
そのため、ファイルはではなくとしてアップロードされます3Sf5f.png
。
変数 $filename は、ファイルの完全な名前と拡張子を示します。
使用すると、次のよう$params->key = rand_string(5).'${filename}';
になります。
3Sf5fDog.png
そこで、$filename 拡張子を取得して適用しようとしました。私は30以上の方法を試しましたが、良い方法はありませんでした.
たとえば、$path_info() を試し、substr(strrchr($file_name,'.'),1); を試しました。もっとたくさん。それらのすべてが私に与えるか、3Sf5fDog.png
またはただ3Sf5f
.
私が試した例:
// As @jcinacio pointed out. Change this to:
//
// $file_name = "${filename}";
//
$file_name = '${filename}' // Is is wrong, since '..' does not evaluate
$params->key = rand_string(5).$file_name;
=
3Sf5fDog.png
.
$file_name = substr(strrchr('${filename}', '.'), 1);
$params->key = rand_string(5).$file_name;
=
3Sf5f
.
$filename = "example.png" // If I declare my own the filename it works.
$file_name = substr(strrchr('${filename}', '.'), 1);
$params->key = rand_string(5).$file_name;
=
3Sf5f.png
クラス ファイル全体: http://pastebin.com/QAwJphmW (スクリプト全体の他のファイルはありません)。
私は何を間違っていますか?これは本当にイライラします。