2016-09-13 38 views
1

我正在编写一个PHP脚本来自动下载CSV文件。PHP file_get_contents/file_put_contents更改日期格式的CSV

当我手动从访问网络浏览器(Safari浏览器)的网址并下载文件并打开它在MS Excel中,A和d(分别是日期和时间)被格式化列如我所期望的,例如'12-S-16'和'3:00:30 pm'。 然而,当我运行下面PHP脚本:

$url_=""; 

$filename="File.csv"; 

file_put_contents('/home/file/path' . $filename, file_get_contents($url)); 

的文件下载,并且内容是从列隔开精细A & d,其格式如下“星期一年09月12 00:00:00 EDT 2016 '和'9月13日星期一10:00:30 EDT 2016'。

我的服务器时区设置为“欧洲/伦敦”。

很明显无论是file_get_contents(); file_put_contents();正在改变一些事情有谁会碰巧知道我该如何解决这个问题?

+1

这不是一个PHP的问题。你从一个URL中获取,而f_g_c/f_p_c仅仅是该网站输出的CONDUITS。如果您在该输出中获取了错误的日期/时间,那么您并未通过该URL传递某些信息,以通知远程服务器应该使用哪个时区。 –

+1

你是如何检查这个文件的?在MS Excel中?或者在文本编辑器中?用于CSV文件的MS Excel导入程序不一定会以您期望的格式保留日期! –

+1

Excel将自动将日期转换为它们自己的格式。尝试在文本编辑器中打开文件,您将看到与php所看到的格式相同的格式。应该很简单,可以从中转换。 –

回答

1

无论file_get_contents也不file_put_contents以任何方式修改内容。

这只是Excel中的一种不同的显示格式。 Excel以任何格式读取时间戳,解释它,并以某种默认格式或以您指定的格式显示它。


当我下载并保存与Firefox的文件,日期确实是不同的(13月-2016,下午3时00分31秒)。

在那之后,我下载了wget的文件,并再次卷曲。每次我使用PHP获得相同的日期/时间格式(2016年9月13日星期二00:00:00,2016年9月13日星期二10:00:31 EDT),但使用Firefox下载时除外。

所以我宁可怀疑,火狐是罪魁祸首。也许Firefox会查看mime类型并决定以某种方式解释内容。

+0

当我通过网络浏览器下载文件时,它怎么会如我所期望的那样格式化?通过PHP的相同URL,格式不同? – Russell

+0

谢谢你测试奥拉夫。 Firefox似乎与Safari相同。您是否知道使用PHP来传递这些信息的方法? – Russell

+0

当您使用wget下载或在Firefox中打开控制台时,您可以看到mime类型“application/vnd.ms-excel”。也许有一种方法可以在PHP中使用这些信息,除了手动完成这项艰苦的工作,但我不知道。也许问另一个问题。 –

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); 
+0

恭喜,因此既不是Firefox也不是Safari,而是网站本身,它根据一些标题提供内容。再一次,我用wget测试了它,看起来头部'Accept-language'触发了这种行为。使用'wget --header ='Accept-Language:xy'...',CSV文件具有13-Sep-2016/3:00:31 PM时间戳。 –