第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP解析文件功能-保存到數(shù)據(jù)庫

PHP解析文件功能-保存到數(shù)據(jù)庫

PHP
慕斯王 2023-10-15 10:45:09
我今天大部分時間都在這個狀態(tài),所以我通常會在迭代和使用鍵/值方面取得成功。這次看起來并不容易,在 php 文檔和跟蹤差異源之間來回運行,運氣不好,但這已經(jīng)是我來的時候了。因此,在這段代碼中,我們檢查 ../../uploads中的所有 *.torrent 文件并解析每個文件并保存為 BLOB => database。該代碼運行得非常好,可以單獨上傳。因此,我決定將其全部循環(huán)在一起,并根據(jù)所有文件的 DB ID / FILE ID(全部匹配)將所有文件發(fā)送到數(shù)據(jù)庫。所以那里的邏輯很簡單。這是我的代碼// Start parsing files => DB => LONGGLOBforeach (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);}我終于循環(huán)了每個文件。但現(xiàn)在的問題是它顯示了第一個文件,但它沒有繼續(xù)并實際逐個文件解析(最低 ID => 最高 ID,無論順序),從而產(chǎn)生雪球效應中的錯誤。我已經(jīng)做了很多次嘗試,直到對 fopen() 第一個參數(shù)的抱怨,所以我修復了這個問題,現(xiàn)在它無法正確迭代。我相信這是我的邏輯,但我無法理解。因此$data = bencode($arr)需要解析每個圖元文件并將其發(fā)送,就像注釋掉的上傳表單($fp)一樣完美。任何幫助表示贊賞。我已經(jīng)使用所有不同的方法列出了文件,這次是 blob 函數(shù)。如何迭代每個文件并解析它=>下一個文件?評論部分完美運行。但我們需要根據(jù)每個文件 ID 進行解析。
查看完整描述

1 回答

?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

我自己又回答了一個。我必須停止在這里運行我的最后一個選擇,無論如何,這對于那些需要它的人來說是解決方案。一小時后我得到了它,我衷心感謝 php.net!


解決方案:


if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $dir = new DirectoryIterator('../../uploads');

    foreach ($dir as $fileinfo) {

        if (!$fileinfo->isDot()) {

            $getthelist = $fileinfo->getFilename();

            $fp         = fopen('../../uploads/' . $getthelist, 'rb');

            $data       = '';

            while (!feof($fp)) {

                $data .= fread($fp, 8192);

            }

            fclose($fp);

            $arr = bdecode($data);

            if ($arr === false) {

                die('invalid 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'];

            }

            $fileid = str_replace('.torrent', '', $getthelist);

            $data   = bencode($arr);

            $an     = array_key_exists('anonymous', $_POST);

            DB::run("UPDATE torrents SET data = :data, info_hash = :info_hash, size = :total_size WHERE torrent_id = :torrentid", array(

                'data' => $data,

                'info_hash' => $info_hash,

                'total_size' => $total_size,

                'torrentid' => $fileid

            )) or die('db error');

        }

    }

}

DirectoryIterator()就是這里的答案。雖然其他方法也有效,但它們不如這種方法有效或合乎邏輯。它按預期完美運行。


查看完整回答
反對 回復 2023-10-15
  • 1 回答
  • 0 關(guān)注
  • 112 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號