【发布时间】:2012-05-21 10:08:59
【问题描述】:
我正在使用 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(整个脚本没有其他文件)。
我做错了什么?这真是令人沮丧。
【问题讨论】:
-
是否有可能提供可编译的实际代码?所有示例都有错误...
-
实际代码是什么意思?整个文件?
-
例如,您的样本缺少必需的分号。
-
我在打电话。我期待着缺少一些东西。对不起。在我的实际代码中没有“编译”错误。
-
注意:
$filename = "${file_name}";和$filename = '${file_name}';完全不同,因为第二个不将 $file_name 评估为变量!
标签: php file-upload amazon-s3 file-extension