1

我正在编写一个 PHP 脚本来自动下载 CSV 文件。

当我从网络浏览器(safari)手动访问 URL 并下载文件并在 MS Excel 中打开它时,列 A 和 D(分别为日期和时间)的格式与我预期的一样,例如 '12-Sep-16'和“下午 3:00:30”。但是,当我运行以下 PHP 脚本时:

$url_="";

$filename="File.csv";

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

文件下载,除了 A 和 D 列之外的内容很好,其格式如下 'Mon Sep 12 00:00:00 EDT 2016' 和 'Mon Sep 13 10:00:30 EDT 2016'。

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

显然是 file_get_contents(); file_put_contents(); 正在改变一些东西。有人会碰巧知道我该如何解决这个问题吗?

4

2 回答 2

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);
于 2016-09-14T21:28:59.610 回答
1

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

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


当我使用 Firefox 下载并保存文件时,日期确实不同(2016 年 9 月 13 日,下午 3:00:31)。

之后,我使用 wget 下载了文件,然后再次使用 curl。每次我得到与 PHP 相同的日期/时间格式(2016 年 9 月 13 日星期二 00:00:00 EDT 2016 年 9 月 13 日星期二 10:00:31 EDT),除非我使用 Firefox 下载。

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

于 2016-09-13T20:11:50.340 回答