Example #1
0
File: wget.php Project: romlg/cms36
function &new_wget($text, $url, $mod_rewrite_enabled, $id_array)
{
    debug_no_info();
    global $log_file;
    $result = new wget_result();
    $web_sufix = array(".html", ".php", ".htm");
    $address_symbol = array(".", "#");
    $separators = array("''", '""', "()", ">", " ");
    $hrefs = array("href=", "src=", "background-image: url", "background: url", "window.open(");
    $download_file_sufix = array(".gif", ".jpg", ".doc", ".xls", ".js", ".zip", ".css", ".swf");
    $parse_file_sufix = array(".html", ".htm");
    //получаем имя хоста в виде http://host.domain
    $host = del_from_left($url, strlen("http://"));
    $buff = explode("/", $host);
    $host = "http://" . $buff[0];
    // Надо заменить конструкицю вида onclick="openImage(this.href);return false;"
    $text = preg_replace("/(onclick=\"openImage\\(this.href\\);return false;\") href=\"(.*)/", " href=\"/scripts/popup.php?img=\\2", $text);
    //echo "$host\n\n\n\n\n\n";
    //получаем ссылку на серве:
    $server_link = del_from_left($url, strlen($host));
    //получаем рабочую директорию на серве, если не включен мод-реврайт
    if ($mod_rewrite_enabled) {
        $path_for_relative = $host . '/';
        $clean_url = "/";
    } else {
        //ищем гадские символы . ? # которые портят адресную строку
        foreach ($address_symbol as $symbol) {
            if (strpos($server_link, $symbol)) {
                $positions[] = strpos($server_link, $symbol) - 1;
            }
        }
        if (sizeof($positions) > 1) {
            $min = $positions[0];
            foreach ($positions as $pos) {
                if ($pos < $min) {
                    $min = $pos;
                }
            }
        } elseif (sizeof($positions) == 1) {
            $min = $positions[0];
        } else {
            $min = strlen($server_link);
        }
        //нашли первое вхождение гадского символа - и получили урл без него
        $clean_url = del_from_right($server_link, strlen($server_link) - $min - 1);
        if ($clean_url == $server_link) {
            //небыло гадских символов - числый урл
            if (last_char($clean_url) != '/') {
                $clean_url = $server_link . "/";
            }
        } else {
            if (isset($tmp)) {
                unset($tmp);
            }
            //удаляем весь хлам из конца строки до последнего слэша
            while ($tmp != '/') {
                $tmp = last_char($clean_url);
                $clean_url = del_from_right($clean_url, 1);
            }
            //доваляем только что стертый слэш ;]
            $clean_url = $clean_url . '/';
        }
        $path_for_relative = $host . $clean_url;
    }
    //обнуляем хлам
    unset($tmp);
    unset($pos);
    unset($min);
    //обработка урла закончена - начинаем делать мозги с заменой ссылок.
    foreach ($separators as $sep) {
        if (strlen($sep) == 2) {
            $double_sep[] = $sep;
        } else {
            $single_sep[] = $sep;
        }
    }
    //debug
    //echo "found ".sizeof($double_sep)." double separators and ".sizeof($single_sep)." single separators<br>";
    foreach ($hrefs as $href_name) {
        $buff = explode($href_name, $text);
        //начинаем перебор всех ссылок
        for ($i = 1; $i < sizeof($buff); $i++) {
            //для начала найдем какой из разделителей встречается первым
            //проверяем начинается ли строка с одного из двойных разделителей
            unset($current_sep);
            foreach ($double_sep as $sep) {
                if (first_char($buff[$i]) == first_char($sep)) {
                    $current_sep = $sep;
                }
            }
            //а если не начинается - выбираем одинарный разделитель
            if (!isset($current_sep)) {
                $single_sep_pos = strlen($buff[$i]);
                foreach ($single_sep as $sep) {
                    if (strpos($buff[$i], $sep) && $single_sep_pos > strpos($buff[$i], $sep)) {
                        $single_sep_pos = strpos($buff[$i], $sep);
                        $current_sep = $sep;
                    }
                }
            }
            //разделитель выбран - начинаем получение кода ссылки
            //откуда начинается код ссылки
            if (strlen($current_sep) == 2) {
                $pos_start = 1;
            } else {
                $pos_start = 0;
            }
            //где заканчивается код ссылки
            $tmp = del_from_left($buff[$i], 1);
            $pos_end = strpos($tmp, last_char($current_sep));
            $src_link = substr($buff[$i], $pos_start, $pos_end);
            //ссылка из кода и ее позиции получены, начинаем преобразование в ссылку для cd
            //echo $src_link."\n\n";
            if (first_char($src_link) == '/') {
                //первый символ ссылки - слэш - ссылка абсолютная в пределах домена
                $cd_link = $src_link;
                $full_link = $host . $cd_link;
            } elseif (if_prefix($src_link, 'http://')) {
                //ссылка совсем абсолютная
                if (if_prefix($src_link, $host)) {
                    //ссылка совсем абсолютная но ведет на наш домен
                    $cd_link = del_from_left($src_link, strlen($host));
                    $full_link = $src_link;
                } else {
                    //ссылка совсем абсолютная и ведет наружу - обрезаем
                    $cd_link = 'index.html';
                    $full_link = '';
                }
            } elseif (substr($src_link, 0, strlen('../images/')) == '../images/') {
                $src_link = substr($src_link, strlen('../'));
                $cd_link = $clean_url . $src_link;
                $full_link = $host . $cd_link;
            } else {
                //ссылка относительная, подставляем рабочий каталог
                $cd_link = $clean_url . $src_link;
                $full_link = $host . $cd_link;
            }
            if (strpos($url, '.css') !== false) {
                // Заменяем в css-файле пути к картинкам с /images на ../images
                if (first_char($src_link) == '/') {
                    $cd_link = '/..' . $src_link;
                    $full_link = $host . $src_link;
                } else {
                    if (substr($src_link, 0, strlen('images/')) == 'images/') {
                        $cd_link = '/../' . $src_link;
                        $full_link = $host . '/' . $src_link;
                    }
                }
            }
            //echo $cd_link."\n";
            //проверяем куда эта ссылка - если на файл - добавляем в список файлов на закачкуы
            $need = false;
            $is_cd = "";
            if ($cd_link != '#') {
                if (strpos($cd_link, 'popup.php') !== false) {
                } else {
                    foreach ($download_file_sufix as $suf) {
                        if (if_sufix($cd_link, $suf)) {
                            $result->download_name[] = $cd_link;
                            $result->download_link[] = $full_link;
                            $need = true;
                            $cd_link = del_from_left($cd_link, 1);
                        }
                    }
                    foreach ($parse_file_sufix as $suf) {
                        if (if_sufix($cd_link, $suf)) {
                            $result->parse_name[] = $cd_link;
                            $result->parse_link[] = $full_link;
                            $need = true;
                            $cd_link = del_from_left($cd_link, 1);
                        }
                    }
                }
                if (!$need) {
                    if (substr($src_link, 0, 3) == "/cd") {
                        $src_link = substr($src_link, 3);
                        $is_cd = "/cd";
                    }
                    if (substr($src_link, 0, 2) == "cd") {
                        $src_link = substr($src_link, 2);
                        $is_cd = "cd";
                    }
                    if (substr($src_link, 0, 1) == "/") {
                        $src_link = substr($src_link, 1);
                    }
                    if (substr($cd_link, 0, 3) == "cd/") {
                        $cd_link = substr($cd_link, 3);
                    }
                    if (substr($cd_link, 0, 3) == "/cd") {
                        $cd_link = substr($cd_link, 3);
                    }
                    if ($cd_link == "/") {
                        $cd_link = "index.html";
                    } else {
                        $match = false;
                        if (strpos($cd_link, 'popup.php') !== false) {
                            $match = true;
                        } else {
                            $cur_id = id_by_path($cd_link);
                            if ($cur_id && in_array($cur_id, $id_array)) {
                                $match = true;
                            }
                        }
                        // Если это ссылка с параметрами (и эта ссылка включена в презентацию), то получаем и ее тоже в отдельный файл, а ссылку переименовываем по имени файла
                        if (strpos($src_link, '?') !== false) {
                            $_temp = explode('?', $src_link);
                            $cur_id = id_by_path($_temp[0]);
                            if (strpos($cd_link, 'popup.php') !== false || $cur_id && in_array($cur_id, $id_array)) {
                                mysql_query("insert into tree_cd_links (url,done) values ('{$src_link}',0)");
                                $match = true;
                            }
                        }
                        //echo $cd_link." -->";
                        if (!$match) {
                            $cd_link = '#';
                        } else {
                            if ($cd_link[0] == '/') {
                                $cd_link = substr($cd_link, 1);
                            }
                            $cd_link = str_replace(array('?', '/'), '_', $cd_link);
                            if (substr($cd_link, -1) == '_') {
                                $cd_link = substr($cd_link, 0, strlen($cd_link) - 1);
                            }
                            $cd_link .= ".html";
                        }
                        //echo $cd_link." ($match) \r\n";
                    }
                    if (!if_prefix($cd_link, "javascript")) {
                        $result->href_name[] = $cd_link;
                        $result->href_link[] = $full_link;
                    }
                    //fputs($log_file,$cd_link."  ====>>>> $match<br>");
                }
            }
            if (strlen($current_sep) == 2) {
                $link_in_code = first_char($current_sep) . $src_link . last_char($current_sep);
                $new_link_in_code = first_char($current_sep) . $cd_link . last_char($current_sep);
            } else {
                $link_in_code = $src_link . $current_sep;
                $new_link_in_code = $cd_link . $current_sep;
            }
            if (!isset($is_cd)) {
                $is_cd = '';
            }
            if ($is_cd) {
                $link_in_code = $is_cd . $link_in_code;
            }
            $tmp = del_from_left($buff[$i], strlen($link_in_code));
            if ($tmp[0] == '"' || $tmp[0] == "'") {
                $tmp = substr($tmp, 1);
            }
            $buff[$i] = $new_link_in_code . $tmp;
            $text = implode($href_name, $buff);
        }
    }
    $result->text = $text;
    return $result;
}
Example #2
0
function read_and_put($dir, &$prefix)
{
    global $backupdir;
    global $server;
    $server = 'maletti';
    if (!isset($prefix)) {
        $prefix = $dir;
    }
    $dir_name = $dir;
    $dir = opendir($dir);
    while ($file = readdir($dir)) {
        if ($file != "." && $file != "..") {
            if (is_file($dir_name . $file)) {
                //unlink($dir_name.$file);
            } else {
                read_and_put($dir_name . $file . "/", $prefix);
            }
        }
    }
    closedir($dir);
    $download_path = "http://" . $server . "/" . substr($dir_name . $file, strlen($prefix)) . "/";
    $txt = file_get_contents($download_path);
    $result = wget($txt, $download_path, "http://maletti");
    $txt = $result->str;
    $download_path = del_from_right($download_path);
    for ($i = 0; $i < sizeof($result->need_name); $i++) {
        //echo "need file ".$result->need_link[$i]." and save it as ".del_from_right($backupdir).$result->need_name[$i]."\n\n";
        $file_mas = explode('/', $result->need_name[$i]);
        unset($file_mas[sizeof($file_mas) - 1]);
        $file_mas = implode('/', $file_mas);
        make_the_dir($file_mas);
        if ($result->need_name[$i] == '/main.css' && !is_file(del_from_right($backupdir) . $result->need_name[$i])) {
            echo "\nMAINCSS\n";
            echo "\n ==> " . $download_path . " <==\n";
            $css_text = file_get_contents($result->need_link[$i]);
            //$css_result=wget($css_text,$result->need_link[$i],"http://maletti");
            $css_result = go_inside_www($css_text, $result->need_link[$i], "http://maletti", 'background-image: url');
            //echo $css_result->str;
            $css_file = fopen(del_from_right($backupdir) . $result->need_name[$i], "w");
            fputs($css_file, $css_result->str);
            fclose($css_file);
        } else {
            copy($result->need_link[$i], del_from_right($backupdir) . $result->need_name[$i]);
        }
        //echo(is_file($del_from_right($backupdir).$result->need_name[$i]));
        //if(substr($result->need_name[$i],0,1)=='/'){$result->need_name[$i]=substr($result->need_name[$i],1);};
        //};
        //make_the_dir();
        //if(($result->need_name[$i]=='/main.css')&&(!is_file(del_from_right($backupdir).$result->need_name[$i]))){
        //	echo "\nMAINCSS\n";
        //}
    }
    $newfile = fopen($dir_name . $file . "/index.html", "w");
    fputs($newfile, $txt);
    fclose($newfile);
}