Я использую Amazon S3 API для загрузки файлов и меняю имя файла каждый раз, когда я загрузить.
Так, например:
Dog.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;
}
Поэтому я установил random_string в параметр имени как таковой:
$params->key = rand_string(5);
Теперь мой проблема в том, что это не покажет никакого расширения. Таким образом, файл будет загружен как 3Sf5f
вместо 3Sf5f.png
.
Переменная $filename дает мне полное имя файла с его расширением.
Если я использую $params->key = rand_string(5).'${filename}';
я получаю:
3Sf5fDog.png
Итак, я попытался получить расширение $filename и применить его. Я перепробовал более 30 методов, но ни одного положительного.
Например, я попробовал $path_info(), я попробовал substr(strrhr($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(других файлов для всего скрипта нет).
Что я делаю не так?Это действительно расстраивает.