Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klon YouTube i Class 'SFile'
Forum PHP.pl > Forum > PHP
K0walD3sign
Witam was. Ostatnio wpadł mi w rękę skrypt klonu YouTube'a. Tak sobie myśle, że pobawie się tym. Mam na celu stworzenie hostingu filmów ze serwerow role play z pewnej gry. No i 7GB do dyspozycji.

Więc wszystko wgralem na FTP, było troche roboty z plikami konfiguracji ale conieco tam podołałem.

Teraz jest problem z bazą danych podczas instalacji. Sprawa wygląda tak:

Po wpisaniu danych bazy MySQL klikam dalej i wyskakuje takowy błąd.

Kod
Fatal error: Class 'SFile' not found in /home/marc3l/ftp/yt/install/run_sql.php on line 126


No dobra, wywnioskować można w prosty sposób, że SFile to coś dziwnego w 126 linii tego pliku. Więc pokaże wam ten plik.

Kod
<?php

ini_set('max_execution_time', '0');

function PMA_splitSqlFile(&$ret, $sql, $release)
{
    $sql          = trim($sql);
    $sql_len      = strlen($sql);
    $char         = '';
    $string_start = '';
    $in_string    = FALSE;
    $time0        = time();

    for ($i = 0; $i < $sql_len; ++$i) {
        $char = $sql[$i];

        // We are in a string, check for not escaped end of strings except for
        // backquotes that can't be escaped
        if ($in_string) {
            for (;;) {
                $i         = strpos($sql, $string_start, $i);
                // No end of string found -> add the current substring to the
                // returned array
                if (!$i) {
                    $ret[] = $sql;
                    return TRUE;
                }
                // Backquotes or no backslashes before quotes: it's indeed the
                // end of the string -> exit the loop
                else if ($string_start == '`' || $sql[$i-1] != '\\') {
                    $string_start      = '';
                    $in_string         = FALSE;
                    break;
                }
                // one or more Backslashes before the presumed end of string...
                else {
                    // ... first checks for escaped backslashes
                    $j                     = 2;
                    $escaped_backslash     = FALSE;
                    while ($i-$j > 0 && $sql[$i-$j] == '\\') {
                        $escaped_backslash = !$escaped_backslash;
                        $j++;
                    }
                    // ... if escaped backslashes: it's really the end of the
                    // string -> exit the loop
                    if ($escaped_backslash) {
                        $string_start  = '';
                        $in_string     = FALSE;
                        break;
                    }
                    // ... else loop
                    else {
                        $i++;
                    }
                } // end if...elseif...else
            } // end for
        } // end if (in string)

        // We are not in a string, first check for delimiter...
        else if ($char == ';') {
            // if delimiter found, add the parsed part to the returned array
            $ret[]      = substr($sql, 0, $i);
            $sql        = ltrim(substr($sql, min($i + 1, $sql_len)));
            $sql_len    = strlen($sql);
            if ($sql_len) {
                $i      = -1;
            } else {
                // The submited statement(s) end(s) here
                return TRUE;
            }
        } // end else if (is delimiter)

        // ... then check for start of a string,...
        else if (($char == '"') || ($char == '\'') || ($char == '`')) {
            $in_string    = TRUE;
            $string_start = $char;
        } // end else if (is start of string)

        // ... for start of a comment (and remove this comment if found)...
        else if ($char == '#'
                 || ($char == ' ' && $i > 1 && $sql[$i-2] . $sql[$i-1] == '--')) {
            // starting position of the comment depends on the comment type
            $start_of_comment = (($sql[$i] == '#') ? $i : $i-2);
            // if no "\n" exits in the remaining string, checks for "\r"
            // (Mac eol style)
            $end_of_comment   = (strpos(' ' . $sql, "12", $i+2))
                              ? strpos(' ' . $sql, "12", $i+2)
                              : strpos(' ' . $sql, "15", $i+2);
            if (!$end_of_comment) {
                // no eol found after '#', add the parsed part to the returned
                // array if required and exit
                if ($start_of_comment > 0) {
                    $ret[]    = trim(substr($sql, 0, $start_of_comment));
                }
                return TRUE;
            } else {
                $sql          = substr($sql, 0, $start_of_comment)
                              . ltrim(substr($sql, $end_of_comment));
                $sql_len      = strlen($sql);
                $i--;
            } // end if...else
        } // end else if (is comment)

        // ... and finally disactivate the "/*!...*/" syntax if MySQL < 3.22.07
        else if ($release < 32270
                 && ($char == '!' && $i > 1  && $sql[$i-2] . $sql[$i-1] == '/*')) {
            $sql[$i] = ' ';
        } // end else if

        // loic1: send a fake header each 30 sec. to bypass browser timeout
        $time1     = time();
        if ($time1 >= $time0 + 30) {
            $time0 = $time1;
            header('X-pmaPing: Pong');
        } // end if
    } // end for

    // add any rest to the returned array
    if (!empty($sql) && preg_match('@[^[:space:]]+@', $sql)) {
        $ret[] = $sql;
    }

    return TRUE;
} // end of the 'PMA_splitSqlFile()' function

SFile::setRoot($config['basedir']."/install"); // TUTAJ
$queries = SFile::read("db.sql");

PMA_splitSqlFile($queries_ar, $queries, 0);

foreach ($queries_ar as $query) {
       
        mysql_query($query);
}

//SDatabase::getErrors(true);

?>




Jak mogę zapobiec temu błędowi? Wiem, ze te klony są dziwne, ale chciałem spróbować to zrobić, bo samemu od zera na pewno nie dał bym rady.



UWAGA!
Poradziłem sobie szybciej niż się dało. Skomentowałem niepotrzebny kawałek kodu.

Ale teraz mam kolejny problem...
Kod
Warning: Smarty error: unable to read resource: "siteadmin/login.tpl" in /home/marc3l/ftp/smarty/libs/Smarty.class.php on line 1088


Brakuje pliku, ale skąd go wezmę?
fander
PHP może zanleść klasy SFile, poszukaj pliku SFile lub definicji klasy SFile i zrób include_one("ścieżką do SFile/plik z definicja SFile");

Smarty to system szablonów. Musisz ustawić ścieżkę z plikami templeatu dla smarty, znajdź w kodzie coś w stylo $cos = new Smarty();

a następnie sprawdz czy jest ustawione coś takiego $cos->template_dir('sciezka') i zmień ścieżka na ścieżkę gdzie masz templeaty

odsyłam do manuala http://www.smarty.net/manual/en/installing.smarty.basic.php
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.