【问题标题】:How to interpret the PHP time() function如何解释 PHP time() 函数
【发布时间】:2011-04-04 03:43:54
【问题描述】:

每次用户上传一张新图片,我们将图片重命名为PHP的time()函数的值,这样我们的数据库就没有重复的图片名称(因为没有相同的年月日时,分钟和秒)。

我需要知道time() 的值是否包含年份。如果没有,那么明年将允许重复的图片名称。如何理解time()的返回值,例如1301888225?如何从该数字中获取年、月、日等信息?

【问题讨论】:

  • 始终查看php.net 手册,那里一清二楚。

标签: php


【解决方案1】:

time() 返回当前的 Unix 时间戳。

  • 确实包含年份信息
  • 您可以将它传递给许多PHP date functions,例如date(),以输出您想要的时间

阅读更多关于Unix timestamp

【讨论】:

  • 我看到了你之前给我看的页面,所以 time() 的值的算法是周 x 小时 x 分钟 x 秒。那么这是否意味着 time() 不包括年份的信息?那么明年图片名称会重复吗?
  • 没有算法,即从 1970 年 1 月 1 日 00:00:00 GMT 算起的秒数。一个简单的计数器。
【解决方案2】:
echo date("d.m.Y H:i:s", 1301888225);

//04.04.2011 03:37:05

Unix 时间戳将在 2038 年 1 月 19 日之前在 32 位机器上工作,因此您可以安全地为图片命名很长时间。如果两个用户同时上传一张图片会怎样?

$filename = time()."_".mt_rand(0, 9999).".jpg";

【讨论】:

  • 如果您要将文件保存到目录结构中,我建议使用 <user-id>_<time-stamp>_<random-no>.<ext> 作为文件名。
  • @Amil Waduwawara,我添加了随机数来演示。
  • @webarto 随机数可以返回相同的数字两次。不太可能,但很有可能。
  • 再加 9 就更不可能了 :) 有可能。
  • @zac,你没有。如果您使用用户 ID(假设它是唯一的),则没有理由这样做。正如 alex 所指出的,随机数有它自己的冲突,所以它在 IMO 中毫无价值。不是同一个用户可以上传多张图片,而是多个用户可以在同一秒上传图片。
【解决方案3】:

说明书上有说明:

int time ( void )
Returns the current time measured in the number of seconds since the

Unix 纪元(1970 年 1 月 1 日 00:00:00 格林威治标准时间)。

因此您不必担心重名问题。但是,您应该注意the year 2038 problem

【讨论】:

  • 实际上我看到了信息,但我不明白“自 unix epoch 以来以 d 秒数测量...”这句话。但现在我明白了,这要归功于@webarto 上面的回答:“这是从 1970 年 1 月 1 日 00:00:00 GMT 开始的秒数。一个简单的计数器”。
【解决方案4】:

如果两个用户在同一秒上传文件怎么办?为什么不直接使用 PHP 分配给文件的临时名称?

【讨论】:

  • 临时名有什么用?这个怎么运作?我正在考虑从1开始重命名图片,第二张图片名称为2,第三张图片名称为3。所以当用户上传新图片时,mysql需要检查最新图片的名称。假设最新的图片名称存储在变量$lstname中,新图片必须重命名为$lstname+1
  • em,如果两个用户同时上传图片,mysql同时获取新图片的名字,那么两张新图片的名字也会一样吗?天哪。
  • @Zac 当您从内存上传检查 $_FILES['file']['tmp_name'] 时。我相信可能的问题被称为竞态条件
  • @zac1987,为避免可能出现的问题,请在文件名中添加一个随机数。看看我的回答。
  • 嘿,我终于找到了最好的解决方案。由于所有用户都有唯一的用户名,我可以使用 $new-pic-name = $username 。时间();所以当有多个用户在同一秒上传图片时,他们的图片名称也不能相同,因为图片名称是他们唯一的用户名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
  • 2015-03-16
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2010-10-04
相关资源
最近更新 更多