Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建torrent文件的信息哈希时出现问题_Php_Bittorrent_Info Hash - Fatal编程技术网

Php 创建torrent文件的信息哈希时出现问题

Php 创建torrent文件的信息哈希时出现问题,php,bittorrent,info-hash,Php,Bittorrent,Info Hash,我正在创建一个BitTorrent网站 如果用户上传了一个.torrent文件,我需要获取信息散列以从跟踪器获取更多信息 但是,我似乎无法从文件中获得正确的信息哈希 我已经从mininova下载了a.torrent() 根据mininova,信息散列应该是:6a7eb42ab3b9781eba2d9ff3545d9758f27ec239()。但是,当我尝试创建文件的信息散列时,我得到以下结果:3d05f149e604b1efaa0ed554a31e693755de7cb0 我不知道为什么我不能得

我正在创建一个BitTorrent网站

如果用户上传了一个.torrent文件,我需要获取信息散列以从跟踪器获取更多信息

但是,我似乎无法从文件中获得正确的信息哈希

我已经从mininova下载了a.torrent()

根据mininova,信息散列应该是:6a7eb42ab3b9781eba2d9ff3545d9758f27ec239()。但是,当我尝试创建文件的信息散列时,我得到以下结果:3d05f149e604b1efaa0ed554a31e693755de7cb0

我不知道为什么我不能得到正确的信息哈希

如果我理解正确,我必须从torrent数据的info部分创建哈希

有关守则:

$bencode = new BencodeModel();
$data = $bencode->decode_file($form->fields['filename']->saved_file);
$hash = $torrentmanager->create_hash($data['info']);
BencodeModel(太长,无法在此发布):

创建哈希函数:

function create_hash($info)
{
    $bencode = new BencodeModel();
    return urlencode(sha1($bencode->encode($info)));
}
我完全不知道哪里出了问题。非常感谢您的帮助

如果你需要更多信息,请告诉我,我会更新相关信息

编辑

根据要求,sha1的数据如下:

var_dump($bencode->encode($info));

编辑

这越来越奇怪了

我已经将该站点部署到live server(在Linux上运行)上,并且散列在那里工作

但是,在我的开发机器(Windows)上,它仍然无法工作

我已经尝试过替换换行符/回车符


有什么想法吗?

torrent文件中的哈希不能是该文件的哈希。想想看。。。。散列是基于其内容的,您无法预先知道散列是什么。因此,计算文件的哈希值,然后将其嵌入文件会更改文件的哈希值,从而使刚刚嵌入的哈希值无效

.torrent文件中的哈希值基于文件的内容,而不是整个内容

从:


我能够让代码在WindowsXP和7上运行PHP5.3.x,并得到正确的哈希值。我猜您在Windows上加载的.torrent与在Linux上加载的不同(可能是编码问题)

尝试运行此代码,查看是否得到SHA1哈希值
148251317dae971fcd5a5dcc5d4bde3d85130c8f
的回显:

echo sha1(file_get_contents('your.torrent'));
我假设是:

echo sha1(file_get_contents($form->fields['filename']->saved_file));

如果你得到了不同的散列,那么你正在加载的文件是不正确的。

还可以告诉我们你最后输入到
sha1
@hakre:的内容,因为torrent只能有一个信息散列,它用于
刮取信息。当我手动尝试使用该散列获取信息时,我得到了我需要的信息:@hakre:。谢谢你到目前为止帮我的忙。
$form->fields['filename']->saved_file
真的会返回文件内容吗?我不记得在PHP中上传时有这种语法。@DeadEnD:我使用自己的自定义框架
$form->fields['filename']->saved_file
返回我用作
$bencode->decode_file()
参数的文件名,该文件读取并解码文件内容torrent文件中没有散列。我正试图根据torrent文件中的信息计算哈希值。@PeeHaa:仔细阅读规范,了解创建哈希值所需的编码和格式。看看bencode类是否真的符合您的期望。我很肯定错误的根源就在这里。
echo sha1(file_get_contents($form->fields['filename']->saved_file));