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 go_inside_www($f, $url, $host, $text) { $result = new go_inside_www_result(); $sufix = array(".html", ".htm", ".php"); $file_sufix = array(".jpg", ".jpeg", ".gif", ".zip", ".rar", ".doc", ".xls", ".avi", ".mpg", ".mpeg", ".txt", ".rtf", ".png", ".tga", ".psd", ".pdf", ".swf", ".css"); $f_new = $f; if (substr($url, strlen($url) - 1, 1) == "/") { $new_url = del_from_right($url); } else { $new_url = $url; } foreach ($sufix as $str) { if (substr($url, strlen($url) - strlen($str), strlen($str)) == $str) { $new_url = $url; for ($i = strlen($url) - 1; $i >= 0; $i--) { if (substr($new_url, $i, 1) == '/') { $a = $i; $i = -1; } } $new_url = substr($new_url, 0, $a); } } echo "{$new_url}\n\n"; //echo $new_url."/<br>"; if (substr($new_url, strlen($new_url) - 1, 1) != '/') { $new_url = $new_url . "/"; } if (strpos($url, '?')) { //echo "<div style='color: red;'>? found in url!!</div>"; die; } $old_f = $f; //echo "<b>обрабатываем ".$url."</b><hr>"; $buff = explode($text, $f); //echo sizeof($buff)." сцылок найденно<hr>"; $new_buff[0] = $buff[0]; for ($i = 1; $i < sizeof($buff); $i++) { //echo "сцылка №".$i."=> \n"; $tmp1 = $buff[$i]; $first = substr($tmp1, 0, 1); if ($first == '"') { $sep = '"'; $tmp2 = substr($tmp1, 1, strlen($tmp1) - 1); } elseif ($first == "'") { $sep = "'"; $tmp2 = substr($tmp1, 1, strlen($tmp1) - 1); } elseif ($first == "(") { $sep = ")"; $tmp2 = del_from_left($tmp1); } else { $sep = ' '; if (strpos($tmp1, '>') < strpos($tmp1, ' ')) { $sep = '>'; } $tmp2 = $tmp1; } if (substr(${$tmp2}, 0, 11) != "javascript:") { $tmp3 = explode($sep, $tmp2); $link = $tmp3[0]; //echo $link; //elseif (substr($link,0,1)=='/'){ //echo "absolute link: ".$link." ===> ".$new_link."\n"; if (substr($link, 0, 7) == 'http://') { $new_link = $link; } else { if (substr($link, 0, 1) != '/') { $new_link = $host . "/" . $link; } else { $new_link = $host . $link; } //$new_link=$new_url.$link; //echo "relative link $link ===> $new_link \n"; } if (substr($new_link, 0, strlen($host)) == $host) { $cd_link = substr($new_link, strlen($host), strlen($new_link) - strlen($host)); //echo $link." => ".$cd_link."<br>"; } else { // echo $link." => сцылка наружу - будем бить, возможно даже ногами"; $cd_link = $link; } //echo $cd_link."==="; $need = false; foreach ($file_sufix as $file_end) { //echo substr($cd_link,strlen($cd_link)-strlen($file_end),strlen($file_end))."==".$file_end."<br>"; if (strtolower(substr($cd_link, strlen($cd_link) - strlen($file_end), strlen($file_end))) == $file_end) { $need = true; //echo "need ".$cd_link; } } //if ((substr($cd_link,0,1)!='/')&&substr($cd_link,0,7)!="http://") { // echo $cd_link."\n"; // $cd_link='/'.$cd_link; //} //if($cd_link=='images/main_header_03.gif'){ // echo "\n!!!!!!!!!!!!!!\n"; //} if ($need) { $result->need_name[] = $cd_link; $result->need_link[] = $new_link; } // обратная сборка $tmp3[0] = $cd_link; $tmp2 = implode($sep, $tmp3); if ($sep == '"' || $sep == "'") { $tmp1 = $sep . $tmp2; } elseif ($sep == ')') { $tmp1 = '(' . $tmp2; } $new_buff[$i] = $tmp1; //echo "<hr>link looks like <b>$link</b> and resolved as $new_link<hr>"; $f_new = str_replace($link . $sep, $cd_link . $sep, $f_new); } else { //echo "javascript link\n"; } //echo "<hr>\n"; } $result->str = implode($text, $new_buff); //$result->str=$f_new; //show_html($f_new); $buff = explode('<script', $result->str); for ($i = 1; $i < sizeof($buff); $i++) { $tmp = explode('</script>', $buff[$i]); $buff[$i] = $tmp[1]; } $result->str = implode('', $buff); return $result; }