我今天大部分时间都在这个状态,所以我通常会在迭代和使用键/值方面取得成功。这次看起来并不容易,在 php 文档和跟踪差异源之间来回运行,运气不好,但这已经是我来的时候了。
因此,在这段代码中,我们检查 ../../uploads中的所有 *.torrent 文件并解析每个文件并保存为 BLOB => database。
该代码运行得非常好,可以单独上传。因此,我决定将其全部循环在一起,并根据所有文件的 DB ID / FILE ID(全部匹配)将所有文件发送到数据库。所以那里的逻辑很简单。
这是我的代码
// Start parsing files => DB => LONGGLOB
foreach (glob("../../uploads/*.torrent") as $filename) {
// Match file ID with database ID (WHERE CLAUS)
$fileid = str_replace('.torrent', '', $filename);
$filename1 = str_replace('../../uploads/', '', $filename);
$fp = fopen('../../uploads/'.$filename1, 'rb');
//$fp = fopen($_FILES['torrent']['tmp_name'], 'rb');
$data = '';
while (!feof($fp)) {
$data .= fread($fp, 8192);
}
fclose($fp);
$arr = bdecode($data);
if ($arr === false) {
die('invalid torrent');
}
// TODO: more validity checks for torrent?
if (!array_key_exists('info', $arr)) {
die('invalid torrent');
}
$arr['info']['private'] = 1;
$infobc = bencode($arr['info']);
if ($infobc === false) {
die('bencoding error');
}
$info_hash = sha1($infobc);
$total_size = 0;
if (array_key_exists('files', $arr['info'])) {
foreach ($arr['info']['files'] as $file) {
if (array_key_exists('length', $file)) {
$total_size += $file['length'];
}
}
} else if (array_key_exists('length', $arr['info'])) {
$total_size += $arr['info']['length'];
}
$description = 'dsfsdfDESCR';
$name = 'dsfsdfNAME';
// BEncode data and send it to DB
$data = bencode($arr);
$an = array_key_exists('anonymous', $_POST);
}
我终于循环了每个文件。但现在的问题是它显示了第一个文件,但它没有继续并实际逐个文件解析(最低 ID => 最高 ID,无论顺序),从而产生雪球效应中的错误。
我已经做了很多次尝试,直到对 fopen() 第一个参数的抱怨,所以我修复了这个问题,现在它无法正确迭代。我相信这是我的逻辑,但我无法理解。
因此$data = bencode($arr)需要解析每个图元文件并将其发送,就像注释掉的上传表单($fp)一样完美。任何帮助表示赞赏。
我已经使用所有不同的方法列出了文件,这次是 blob 函数。如何迭代每个文件并解析它=>下一个文件?
评论部分完美运行。但我们需要根据每个文件 ID 进行解析。
catspeake