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; }
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); }