处理上传图像名称的"常规"方式是什么?

Ben*_*Ben 1 php mysql image-processing

所以我正在制作一个具有图像上传功能的网站,并将图像名称存储到数据库中.我拍了我的mac的截图,想上传这张照片"Screen shot 2011-02-18 at 6.52.20 PM.png".那么,这不是一个存储在mysql中的好名字!人们如何通过这样的方式重命名照片,使每张上传的照片都有一个独特的名称?另外,我如何确保在重命名照片时最后保留文件扩展名.

ale*_*lex 5

我会删除扩展名,否则Apache(或等效的)将a1e99398da6cf1faa3f9a196382f1fadc7bb32fb7.php在请求时运行(可能包含恶意PHP).我也会把它上传到docroot上面.

如果您需要在docroot上方访问图像,您可以存储一个通过图像函数运行的安全副本,或者header('Content-Type: image/jpeg')例如从某些PHP提供它readfile()(并不是 include因为我可以将PHP嵌入到GIF文件中).

此外,pathinfo($path, PATHINFO_EXTENSION)是获得扩展的最佳方式.

确保已使用原始文件名和数据库中的其他元数据存储对此文件的引用.

function getUniqueName($originalFilename) {
    return sha1(microtime() . $_SERVER['REMOTE_ADDR'] . $originalFilename);
}
Run Code Online (Sandbox Code Playgroud)

这可以生成重复的唯一方法是,具有相同IP的一个用户在一微秒内多次上载相同的文件名.

或者,您可以basename($_FILES['upload']['tmp_name'])在上传图像时使用PHP分配.我会说它应该是独一无二的.