我正在使用 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;
}
所以我将 random_string 设置为 name 参数,如下所示:
$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(整个脚本没有其他文件)。
我做错了什么?这真是令人沮丧。