来自fopen的file_put_contents创建的文件与浏览器不同

时间:2015-10-09 22:44:20

标签: php

这让我发疯了。我可以通过浏览器从互联网上下载文件,工作正常。但是,如果我使用PHP编写一个为我执行此操作的脚本,则该文件最终会完全不同(根据在线差异工具)。

$link = "https://torcache.net/torrent/9AE1726935FF9C08DF422CCE3C4445FC9484478B.torrent?title=[kat.cr]the.big.bang.theory.s08e24.720p.hdtv.x264.dimension.rartv";

file_put_contents($file_name, fopen( $link, 'r'));

首先我尝试使用编码,但这不应该,因为文件是二进制文件,对吧?还尝试了file_get_contents而不是fopen,同样的问题。

我的PHP应用程序在没有BOM文件的UTF-8上运行。有人可以帮忙吗?我做错了什么?

3 个答案:

答案 0 :(得分:1)

我想我明白你的意思。来自torcache.net的回复都是使用gzip压缩的。如果您从浏览器下载该文件,该文件将自动解码,但如果您使用php执行相同操作,则会获得相同的文件,但仍会进行编码。您可以使用gzdecode对其进行解码。

file_put_contents($file_name, gzdecode(file_get_contents($link)));

答案 1 :(得分:0)

您的代码中存在一些错误。

首先,您尝试将字符串添加到没有括号的变量中。

$link = "https://torcache.net/torrent/9AE1726935FF9C08DF422CCE3C4445FC9484478B.torrent?title=[kat.cr]the.big.bang.theory.s08e24.720p.hdtv.x264.dimension.rartv"

下一个尝试通过https下载该文件。检查您的openssl是否已启用,以及allow_url_fopen

中是否设置了php.ini

https://secure.php.net/manual/en/features.remote-files.php

答案 2 :(得分:0)

有三种方法可以解决您的问题:

  1. 启用openssl for https calls

  2. 使用curl并将ssl验证程序设置为0

  3. 将https替换为http以进行正常通话。

  4. 选项3是最简单的。