Добрый вечер. Подскажите пожалуйста какой командой иил связкой команд можно на php сделать страницу, которой задается id, и в соответствии с этим id, поисходит переход по соответствующему линку.... ? буду благодарен любым подсказкам
типо { printf("<a href='view_link.php?id=%s'>%s</a>",$myrow["id"],$myrow["title"]); } while() ты про это Gadik?
не совсем, к примеру вызывает юзер страницу с параметром script.php?id=50 и эта страница выбирает из массива линк, который соотвествует id = 50 и пересылает юзера на этот линк, т.е. чтобы происходил переход на линк, а не выводился на экран..
2 Gadik PHP: <?php if (isset($_GET['id']) && is_numeric($_GET['id'])){ switch($_GET['id']){ case 1: redirect("тут твой линк 1"); break; case 2: redirect("тут твой линк 2"); break; default: redirect("тут твой линк, тот который выдаётся если ид ты не определил"); break; } }else{ redirect("а тут твой линк, который выдаётся если в ид запихали хрень какую то"); } function redirect($url){ header('Location: '.$url); exit(); } ?>
вариант номер 2 для Gadik PHP: <?php $linkarray = array( 0 => "http://www.yandex.com/1.php", 1 => "http://www.yandex.com/2.php" ); if (isset($_GET['id']) && is_numeric($_GET['id'])){ if(isset($linkarray[$_GET['id']])){ redirect($linkarray[$id]); }else{ //не определено у тя такого } }else{ redirect("а тут твой линк, который выдаётся если в ид запихали хрень какую то"); } function redirect($url){ header('Location: '.$url); exit(); } ?> Немного поменял скрипт , вот держи
а, пасибо, второй вариант мне более понятен, смогу доделать)) спс большое за помощь) буду пробовать ... не происходит переход по линкам.... скрипт не менял так и залил, должен же работать в таком виде? .. а именно срабатывает условие там где //не определено у тя такого вообщем false выдает, не могу понять почему... разобрался, исправил pos !== false на pos !== "" и вроде работает
Доброе время суток! Имеются записи в формате: site.com/?id=1&page=end site.com/?id=2&page=end site.com/?pp=1&page=main&sort=1 site.com/?pp=2&page=main&sort=1 etc... Подскажите пожалуйста, как убрать повторые записи, нужно чтоб вывдило, вот так: site.com/?id=1&page=end site.com/?pp=1&page=main&sort=1 тоесть, чтоб переменные не повторялись. Заранее спасибо.
проще всего загнать в массив и заюзать ф-ию array_unique() напр. если это файл print_r(array_unique(file('a.txt'))); ну или если уже стринг print_r(array_unique(explode("\n",$string)));
Тогда лучше пример такого файла ТОЧНЫЙ (или сказать, что точно так, как в вопросе, только хост заменен) + идут ли такие вот записи подряд или нет (одна под другой, или может быть случайное расположение) PHP: <pre> <?php $str1 = "site.com/?id=1&page=end"; $str2 = "site.com/?id=2&page=end"; $var1 = similar_text($str1, $str2, &$tmp); echo "Совпадение в процентах: $tmp\n"; // примерно 95%, //значит практически идентичны, для нас по условиям., идентичны //Если отличие больше - значит у нас новая ссылка: $str1 = "site.com/?id=1&page=end"; $str2 = "site.com/?pp=1&page=main&sort=1"; $var1 = similar_text($str1, $str2, &$tmp); echo "Совпадение в процентах: $tmp\n"; // примерно 70% //разница большая, новая уникальная ссылка (по условиям) ?> </pre> но в данном случае лучше всего подойдет функция Левенштейна, которая просто показывает, сколько символов надо заменить, чтобы из первой строки получить вторую, т.е. если возвращает 1 - строки АБСОЛЮТНО ИДЕНТИЧНЫ по условию задачи: PHP: <?php $str1 = "site.com/?id=1&page=end"; $str2 = "site.com/?id=2&page=end"; $var = levenshtein($str1,$str2); echo($var); // вернет 1 ?> </pre> если строки идут не подряд такого рода, а в разброс - то файл в массив и предварительная сортировка, потом обычное построчное чтение с помощью fgets() и сравнению по Левенштейну т.е. по задаче конкретно примерно так выглядеть будет по идее: PHP: <pre> <pre> <?php $file = 'tema1.txt'; // Файл с ссылками $res = 'tema10.txt'; // Результирующий файл // функция для сравнения по Левенштейну function lev($str1,$str2) { $a = levenshtein($str1,$str2); if ($a!=1) return true; return false; } // Соритруем файл с сылками $sort = file($file); sort($sort); file_put_contents($file,$sort); // Начинаем отбирать "уникальные" ссылки $hand1 = fopen($res,'w'); $hand = fopen($file,'r'); while(!feof($hand)) { $buf1 = trim(fgets($hand)); $buf2 = trim(fgets($hand)); if (lev($buf1,$buf2)) fwrite($hand1,$buf1. "\n" .$buf2 ."\r\n"); else fwrite($hand1,$buf1 . "\r\n"); } fclose($hand); fclose($hand1); echo 'Done'; ?> </pre> Погонял щаз, на самом деле и этот вариант неправильный, т.к. будет работать только для ДВУХ подряд идущих ссылок)) А если их таких три и больше - не сработает. Поэтому вот ПРАВИЛЬНЫЙ вариант на любое кол-во таких ссылок: PHP: <pre> <?php $file = 'tema1.txt'; // Файл с ссылками $res = 'tema10.txt'; // Результирующий файл // функция для сравнения по Левенштейну function lev($str1,$str2) { $a = levenshtein($str1,$str2); if ($a==1 or $a==0) return false; return true; } // А теперь сравниваем каждую строку //со всеми при помощи функции выше function Ustr ($hand, $str) { fseek($hand,0); while (!feof ($hand)) { $temp = trim(fgets($hand)); if (!lev($str,$temp)) return false; } return true; } // Сортируем файл с сылками $sort = file($file); sort($sort); file_put_contents($file,$sort); // Начинаем отбирать "уникальные" ссылки $hand1 = fopen($res,'w+'); $hand = fopen($file,'r'); while(!feof($hand)) { $buf = trim(fgets($hand)); if (Ustr($hand1,$buf)) { fseek ($hand1, 0, SEEK_END); fwrite($hand1,$buf ."\r\n"); } } fclose($hand); fclose($hand1); echo 'Done'; ?> </pre>
Pashkela Вы как бы заблуждаетесь, если строки идентичны - левенштейн вернет 0. А для id=2 и id=13 левенштейн вернет 2. И ваш скрипт вообще возвращает неожиданные результаты)) Code: Вход: site.com/?id=1&page=end site.com/?id=5&page=end site.com/?id=4&page=end site.com/?id=3&page=end site.com/?id=2&page=end site.com/?id=6&page=end Выход: site.com/?id=1&page=end site.com/?id=3&page=end site.com/?id=5&page=end
исправил выше в посте, когда id=2 и id=11111 пока хз, можно ручками задать в условиях в первой функции, универсально как - хз пока, или от процентов прыгать (similar_text()) Хм, не такая уж и тривиальная задачка
Если нужно сравнивать только окончания ссылок Входной файл: Code: site.com/?id=1&page=end site.com/?id=2&page=end site.com/?pp=1&page=main&sort=1 site.com/?pp=2&page=main&sort=1 site.com/?dd=1&page=old site.com/?dd=2&page=old site.com/?dd=3&page=old site.com/?dd=4&page=old PHP: <?php $file = 'tema1.txt'; $f = file_get_contents($file)."\r\n"; preg_match_all('~^[^\?]*\?[^=]+=([^&]+)(&.+)~mi',$f,$match); $arr=array_values(array_combine($match[2],$match[0])); print_r($arr); echo 'Done'; ?> С учетом ниженаписанного SQLHACK регулярка будет такая (имхо проще и быстрее будет): PHP: <?php $file = 'tema1.txt'; $f = file_get_contents($file)."\r\n"; preg_match_all('~^.*/([^=]+)=[^&]+&.+~mi',$f,$match); $arr=array_values(array_combine($match[1],$match[0])); print_r($arr); echo 'Done'; ?>
Ну или вот с процентным совпадением, процент задаете сами в первой функции: PHP: <pre> <?php $file = 'tema1.txt'; // Файл с ссылками $res = 'tema10.txt'; // Результирующий файл // функция для процентного сравнения текста function lev($str1,$str2) { $a = similar_text($str1, $str2, &$tmp); if (round($tmp,0)>=86) return false; // тут 86 - // - процент совпадения строк, можно менять return true; } // А теперь сравниваем каждую строку со всеми при помощи функции выше function Ustr ($hand, $str) { fseek($hand,0); while (!feof ($hand)) { $temp = trim(fgets($hand)); if (!lev($str,$temp)) return false; } return true; } // Соритруем файл с сылками $sort = file($file); sort($sort); file_put_contents($file,$sort); // Начинаем отбирать "уникальные" ссылки $hand1 = fopen($res,'w+'); $hand = fopen($file,'r'); while(!feof($hand)) { $buf = trim(fgets($hand)); if (Ustr($hand1,$buf)) { fseek ($hand1, 0, SEEK_END); fwrite($hand1,$buf ."\r\n"); } } fclose($hand); fclose($hand1); echo 'Done'; ?> </pre>
два с половиной часа себе мозг трахал , короче если я правильно понял, то надо было сделать так: ссылки где одинаковые параметры, но просто разные значения этим параметров, их надо было выкинуть, полезно это может быть только в парсере поисковиков, где они могут выдавать пути к одним и темже скриптам, но с разными параметрами, так вот этот скрипт делает именно это. Ссылки пихаем в c:/2.txt ну или указываем другой файл. то есть из такого http://site.com/index.php?id=1&page=end site.com/?id=2&page=end http://site.com/?pp=1&page=main&sort=1 http://site.com/?pp=2&page=main&sort=1 http://site.com/?pp=3&page=notmain&sort=1 делает такое http://site.com/index.php?id=1&page=end http://site.com/?id=2&page=end http://site.com/?pp=1&page=main&sort=1 PHP: <?php $urlarr = file("c:/2.txt"); $site = array(); //создаем массив с сылками и параметрами foreach($urlarr as $url){ $url = trim($url); if($url != ""){ if(substr($url,0,7) != "http://" && substr($url,0,8) != "https://"){ $url = "http://".$url; } $x = parse_url($url); $newurl = $x['scheme']."://".$x['host'].$x['path']; $params = explode("&", $x['query']); $pp = array(); foreach($params as $param){ $p = strpos($param, "="); if($p>0){ $paramname = strtolower(substr($param, 0, $p)); $paramval = strtolower(substr($param, $p + 1, strlen($param) - $p - 1)); if (strlen($paramval) == 0){ $paramval = chr(0); } } $pp[$paramname] = $paramval; } $site[$newurl][] = $pp; } } //$siteclone = $site; $siteclone = array_map("deepvalkill", $site); function deepvalkill($value){ $value = is_array($value) ? array_map('deepvalkill', $value) : $value = ""; return $value; } //чистим одинаковые foreach($siteclone as $key=>$st){ for($z=0;$z<=count($st);$z++){ for($y=$z+1;$y<=count($st);$y++){ if($st[$z] == $st[$y]){ unset($site[$key][$y]); } } } } foreach($site as $key=>$st){ foreach($st as $kk=>$vv){ $par = ""; foreach($vv as $kk2=>$vv2){ $par .= $kk2."=".$vv2."&"; } //echo $par; $url = $key."?".substr($par,0,strlen($par)-1); //выводим ссылки echo $url."\r\n";; } } ?>
PHP: if($_FILES["90.jpg"]["size"] > 1024*3*1024) { echo ("Размер файла превышает три мегабайта"); exit; } if(copy($_FILES["90.jpg"]["tmp_name"], "c:/temp/".$_FILES["90.jpg"]["name"])) { echo("Файл успешно загружен <br>"); echo("Характеристики файла: <br>"); echo("Имя файла: "); echo($_FILES["90.jpg"]["name"]); echo("<br>Размер файла: "); echo($_FILES["90.jpg"]["size"]); echo("<br>Каталог для загрузки: "); echo($_FILES["90.jpg"]["tmp_name"]); echo("<br>Тип файла: "); echo($_FILES["90.jpg"]["type"]); } else { echo("Ошибка загрузки файла"); } Ошибка загрузки файла Пробовал писать полный путь