使用唯一的文件名通过php上传图像

我目前正在使用phonegap编写移动应用程序.我希望这个应用程序拥有的少数功能之一是能够捕获图像并将其上传到远程服务器…

我目前有图像捕获和上传/电子邮件部分与编译的apk正常工作…但在我的PHP,我目前命名图像“图像[插入从10到20的随机数] …这里的问题是,数字可以重复,图像可以被覆盖……我已经阅读并想过只使用rand()并选择从0到getrandmax()的随机数,但我觉得我可能有同样的机会文件覆盖…我需要每次都使用唯一的名称将图像上传到服务器,无论如何……所以php脚本会检查服务器已有的内容并使用唯一的写入/上传图像名称…

除了“rand()”以外的任何想法?

我也想到可能命名每个图像… img日期时间随机5个字符,其中包括字母和数字…所以如果图像是在2013年3月20日上午4:37使用应用程序拍摄的,那么图像当上传到服务器时会被命名为“img_03-20-13_4-37am_e4r29.jpg”…我认为这可能有用……(除非有更好的方法)但我相当新的PHP而且不会明白如何写这样的东西……

我的php如下…

print_r($_FILES);
$new_image_name = "image".rand(10, 20).".jpg";
move_uploaded_file($_FILES["file"]["tmp_name"], "/home/virtual/domain.com/public_html/upload/".$new_image_name);

任何帮助表示赞赏……
提前致谢!
另外,如果有任何进一步的信息,请告诉我,我可能会遗漏…

最佳答案
您可能需要考虑PHP的uniqid()功能.
这样您建议的代码如下所示:

$new_image_name = 'image_' . date('Y-m-d-H-i-s') . '_' . uniqid() . '.jpg';
// do some checks to make sure the file you have is an image and if you can trust it
move_uploaded_file($_FILES["file"]["tmp_name"], "/home/virtual/domain.com/public_html/upload/".$new_image_name);

还要记住,服务器的随机函数并不是随机的.如果你需要一些随机的东西,请尝试random.org.随机随机随机.

UPD:为了在代码中使用random.org,您必须向其服务器执行一些API请求.有关的文档可在此处获取:www.random.org/clients/http/.

调用的示例如下:random.org/integers/?num=1&min=1&max=1000000000&col=1&base=10&format=plain&rnd=new.请注意,您可以更改min,max和其他参数,如documentation中所述.

在PHP中,您可以使用file_get_contents()函数,cURL库甚至套接字对远程服务器执行GET请求.如果您使用的是共享主机,则应为您的帐户启用并启用外发连接.

$random_int = file_get_contents('http://www.random.org/integers/?num=1&min=1&max=1000000000&col=1&base=10&format=plain&rnd=new');
var_dump($random_int);

转载注明原文:使用唯一的文件名通过php上传图像 - 代码日志