【发布时间】:2016-06-16 04:49:47
【问题描述】:
我们正在将我们的域转移到我们最近购买的新的专用服务器上。新服务器的时区导致我们的附件 php 代码出现一些问题。
我们的论坛软件使用以下文件夹结构来存储附件:
/public_html/forum/files/2016/February/14/[文件名]
年月日是从文件上传时间戳中获取的,文件上传时间戳是一个 Unix 时间戳,例如“1455426488”。然后使用以下 php 代码将此时间戳转换为年、月和日:
$date = getdate((int)$attachment['filetime']);
$filepath = $config['upload_path'] . '/' . (string)$date['year'] . '/' . $date['month'] . '/' . (string)$date['mday'];
这在我们的旧服务器和之前的服务器上运行良好,但在新服务器上,转换后“天”要么晚 1 天,要么提前1天,这导致“2 月 14 日”文件上传最终在“2 月 13 日”文件夹或“2 月 15 日”。请记住,unix 时间戳中 1455426488 的文件上传时间是 2016 年 2 月 14 日凌晨 5:08 UTC 时区。
有人对如何解决此问题有任何建议吗?这是我们论坛系统的重要组成部分,因此如果不提出解决方案,我们将无法迁移到新服务器。
谢谢,
皮特
顺便说一句,旧服务器和新服务器都使用“美国/芝加哥”作为他们的时区 (CST)。
【问题讨论】:
-
你可以试试
$date = (int)$attachment['filetime']; $filepath = $config['upload_path']."/".date("Y",$date)."/".date("F",$date)."/".date("d",$date); -
PHP 是什么时区(美国/芝加哥?)服务器/操作系统是什么时区(日期 +%Z)?
-
@user2182349 - PHP 时区是“美国/芝加哥”,服务器/操作系统时区是“CST”。
-
@user2352577L - 您的建议没有解决问题。该脚本仍然无法找到正确的文件。
-
尝试添加 date_default_timezone_set('America/Chicago');在您的 php 函数顶部,日期时间转换为 unix 时间戳。看看这是否有效。
标签: php datetime unix-timestamp