PHP: расширение файла не работает при загрузке на S3

Я использую 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(других файлов для всего скрипта нет).

Что я делаю не так?Это действительно расстраивает.

9
задан inigomedina 22 May 2012 в 02:20
поделиться