Aug 26

Наложи ми се преди малко да направя следния JavaScript: трябваше да покаже един текст в ново прозорче. Това е тривиална до болка задача :). Има, обаче, една дребна подробност, която може да се стори досадна на мнозина - да фокусирате прозореца и да се уверите че съдържанието му е празно, преди да пльоснете кода там.
Името на отворения прозорец е едно и също, а текстовете, показвани в него са различни. Така се получава че в прозореца само се добавя текст, а стария не мърда. Едно елементарно решени беше да изчистя документа преди да почна да пиша в него. Да де ама Document.clear() не работи от една кофа време вече. Е тогава как? Еми еуементарно се оказа… просто зареждате документа ABOUT:BLANK  и сте готови.

win = window.open(...);
win.location = 'about:blank'; // Изчистване на документа
win.document.write(ЦЕЛИЯТ_HTML_ДОКУМЕНТ);
win.focus();

Фокусът на последния ред е полезен, защото ако пишете във въпросния документ, браузъра няма да разбере че трябва да го изкара най-отпред и това съдържание ще остане най-отдолу…, а тогава кел файда.

П.С.
Велин ме корегира, че този вариант, който съм ползвал, не е най-интелигентния. Според него преди да пиша новите данни просто мога да сложа

win.document.open();

или да просто изпразня документа преди да пиша

win.document.body.innerHTML = "";

публикувано от boyan етикети: ,

Jan 16

Намерих много интересен пример, написан на PHP, който анализира TORRENT файловете. Кода е по-долу, но съм го пуснал и тук.

if ($argc != 2) exit("usage: ".$argv[0]." ");
$input = $argv[1];
if (!file_exists($input)) { exit("input file $input doesn't exists"); }
$str = file_get_contents($input);
 
function parse_torrent($s) {
        static $str;
        $str = $s;
 
        //    echo $str{0};
 
        if ($str{0} == 'd') {
                $str = substr($str,1);
                $ret = array();
                while (strlen($str) && $str{0} != 'e') {
                        $key = parse_torrent($str);
                        if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
                        if (!strcmp($key, "info")) {
                                $save = $str;
                        }
                        //          echo ".",$str{0};
                        $value = parse_torrent($str);
                        if (!strcmp($key, "info")) {
                                $tosha = substr($save, 0, strlen($save) - strlen($str));
                                $ret['info_hash'] = sha1($tosha);
                        }
 
                        // process hashes - make this stuff an array by piece
                        if (!strcmp($key, "pieces")) {
                                $value = explode("====",
                                substr(
                                chunk_split( $value, 20, "===="),
                                0, -4
                                )
                                );
                        };
                        $ret[$key] = $value;
                }
                $str = substr($str,1);
                return $ret;
        } else if ($str{0} == 'i') {
                //       echo "_";
                $ret = substr($str, 1, strpos($str, "e")-1);
                $str = substr($str, strpos($str, "e")+1);
                return $ret;
        } else if ($str{0} == 'l') {
                //       echo "#";
                $ret = array();
                $str = substr($str, 1);
                while (strlen($str) && $str{0} != 'e') {
                        $value = parse_torrent($str);
                        if (strlen($str) == strlen($s)) break; // prevent endless cycle if no changes made
                        $ret[] = $value;
                }
                $str = substr($str,1);
                return $ret;
        } else if (is_numeric($str{0})) {
                //       echo "@";
                $namelen = substr($str, 0, strpos($str, ":"));
                $name = substr($str, strpos($str, ":")+1, $namelen);
                $str = substr($str, strpos($str, ":")+1+$namelen);
                return $name;
        }
}
$bencode = parse_torrent($str);
print_r( $bencode );

публикувано от boyan етикети: ,