Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

17.04.2009, 11:53
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Тогда лучше пример такого файла ТОЧНЫЙ (или сказать, что точно так, как в вопросе, только хост заменен) + идут ли такие вот записи подряд или нет (одна под другой, или может быть случайное расположение)
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; 17.04.2009 в 13:28..
|
|
|

17.04.2009, 13:19
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Pashkela Вы как бы заблуждаетесь, если строки идентичны - левенштейн вернет 0. А для id=2 и id=13 левенштейн вернет 2. И ваш скрипт вообще возвращает неожиданные результаты))
Код:
Вход:
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
Последний раз редактировалось Gifts; 17.04.2009 в 13:22..
|
|
|

17.04.2009, 13:30
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
исправил выше в посте, когда
id=2 и id=11111
пока хз, можно ручками задать в условиях в первой функции, универсально как - хз пока, или от процентов прыгать (similar_text())
Хм, не такая уж и тривиальная задачка 
|
|
|

17.04.2009, 13:37
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
Если нужно сравнивать только окончания ссылок
Входной файл:
Код:
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';
?>
Последний раз редактировалось Gifts; 17.04.2009 в 17:38..
|
|
|

17.04.2009, 13:43
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Ну или вот с процентным совпадением, процент задаете сами в первой функции:
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>
Последний раз редактировалось Pashkela; 17.04.2009 в 13:47..
|
|
|

17.04.2009, 15:57
|
|
Голос разума
Регистрация: 27.09.2006
Сообщений: 529
Провел на форуме: 1607210
Репутация:
1617
|
|
два с половиной часа себе мозг трахал , короче если я правильно понял, то надо было сделать так: ссылки где одинаковые параметры, но просто разные значения этим параметров, их надо было выкинуть, полезно это может быть только в парсере поисковиков, где они могут выдавать пути к одним и темже скриптам, но с разными параметрами, так вот этот скрипт делает именно это.
Ссылки пихаем в 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";;
}
}
?>
__________________
Бойтесь своих желаний. Они могут исполниться....
...О-о-о-о, ушами не услышать, глазами не понять!
|
|
|

17.04.2009, 16:30
|
|
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме: 791766
Репутация:
61
|
|
Как через <input type="file" name="file"> приняв фаил
С помощью PHP залить его в нужную папку?
|
|
|

17.04.2009, 16:34
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
гугл сломался?
http://www.softtime.ru/scripts/upload.php
|
|
|

17.04.2009, 16:39
|
|
Постоянный
Регистрация: 02.07.2008
Сообщений: 472
Провел на форуме: 3728999
Репутация:
444
|
|
можно пример скрипта для залогинивания на сайте?
чтоб скрипт висел на сайте как бот.
|
|
|

17.04.2009, 17:59
|
|
Постоянный
Регистрация: 07.03.2008
Сообщений: 479
Провел на форуме: 791766
Репутация:
61
|
|
Сообщение от Pashkela
гугл сломался?
http://www.softtime.ru/scripts/upload.php
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("Ошибка загрузки файла");
}
Ошибка загрузки файла
Пробовал писать полный путь
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|