我正在编写一个PHP脚本来自动下载CSV文件。
当我从网络浏览器(safari)手动访问URL并下载文件并在MS Excel中打开它时,A列和D列(分别为日期和时间)的格式如我所料,例如'12 -Sep-16'和'3:00:30 pm'。 但是,当我运行以下PHP脚本时:
//get the current ModuleInfo
ModuleInfo newModule = ModuleController.Instance.GetModule(ModuleId, TabId, false);
//or create a new module
ModuleInfo newModule = new ModuleInfo();
//clear the old permissions
newModule.ModulePermissions.Clear();
//add admin view permission
ModulePermissionInfo modulePermissionInfo1 = new ModulePermissionInfo();
modulePermissionInfo1.ModuleID = ModuleId;
modulePermissionInfo1.AllowAccess = true;
//view permission id, 1 = view, 2 = edit
modulePermissionInfo1.PermissionID = 1;
//administrator role id (from Roles table in dnn database)
modulePermissionInfo1.RoleID = 0;
//add admin edit permission
ModulePermissionInfo modulePermissionInfo2 = new ModulePermissionInfo();
modulePermissionInfo2.ModuleID = ModuleId;
modulePermissionInfo2.AllowAccess = true;
//view permission id, 1 = view, 2 = edit
modulePermissionInfo2.PermissionID = 2;
//administrator role id (from Roles table in dnn database)
modulePermissionInfo2.RoleID = 0;
//add all users view permission
ModulePermissionInfo modulePermissionInfo3 = new ModulePermissionInfo();
modulePermissionInfo3.ModuleID = ModuleId;
modulePermissionInfo3.AllowAccess = true;
//edit permission id, 1 = view, 2 = edit
modulePermissionInfo3.PermissionID = 1;
//all users role id (from Roles table in dnn database)
modulePermissionInfo3.RoleID = -1;
//add the ModulePermissionInfo to the module
newModule.ModulePermissions.Add(modulePermissionInfo1);
newModule.ModulePermissions.Add(modulePermissionInfo2);
newModule.ModulePermissions.Add(modulePermissionInfo3);
//save the permissions
ModulePermissionController.SaveModulePermissions(newModule);
//clear the dnn cache (if it is the current module, not a new one)
DotNetNuke.Common.Utilities.DataCache.ClearModuleCache(TabId);
DotNetNuke.Common.Utilities.DataCache.ClearTabsCache(PortalId);
DotNetNuke.Common.Utilities.DataCache.ClearPortalCache(PortalId, false);
文件下载,除A列和A列之外,内容也很好。 D,其格式如下'2016年9月12日00:00:00 EDT 2016'和'2016年9月13日10:00:30 EDT 2016'。
我的服务器时区设置为“欧洲/伦敦”。
显然要么是file_get_contents(); file_put_contents();正在改变一些事情有人会碰巧知道如何解决这个问题吗?
答案 0 :(得分:1)
file_get_contents
和file_put_contents
都不会以任何方式修改内容。
这只是Excel中的一种不同的显示格式。 Excel以任何格式读取时间戳,对其进行解释,并以某种默认格式或以您指定的格式显示。
当我使用Firefox下载并保存文件时,日期确实不同(2016年9月13日,下午3:00:31)。
之后,我用wget下载了文件,再次使用curl。我每次都获得相同的日期/时间格式(2016年9月13日00:00:00,2016年9月13日星期二,10:00:31),与PHP一样,除非我使用Firefox下载。
所以我宁愿怀疑,Firefox是罪魁祸首。也许Firefox会查看mime类型并决定以某种方式解释内容。
答案 1 :(得分:1)
我能够通过在file_get_contents()中包含标题详细信息来解决此问题,如下所示:
$url = "";
$options = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$file = file_get_contents($url, false, $context);