Нужно сделать страницу на php, чтобы все исходящие ссылки сделать локальными. На сайте есть 20 длинных ссылок и хочется заменить их. например ссылку http://google.ru заменить на http://yoursite.ru/out.php?1 а out.php методом GET получил бы единицу и переадресовал бы на http://google.ru
содержание out.php PHP: <?php $link = $_GET['link']; if ($link = 1) { header("Location: http://google.ru); } if ($link = 2) { header("Location: http://mail.ru); } ... if ($link = 20) { header("Location: http://new-anarchy.narod.ru); } ?> твоя страница html должна передавать ссыль туда в переменной link методом GET. типа http://yoursite.ru/out.php?link=3
имхо так удобней PHP: <?php $location=array ( '1'=>"http://google.com", '2'=>"http://mail.ru", .... ); header ("Location: ".$location[$_GET['link']]); ?> и кстати в if нада писать не = а == , закрывать " в хедере
можно) сделай например... PHP: <?php $location=array ( '1'=>"http://google.com", '2'=>"http://mail.ru", .... ); header ("Location: ".$location[$_GET['link']]); $fp = fopen("$link.txt","a+"); fwrite($fp,"0"); fclose($fp); ?> каждый раз будет записываться один байт (оди символ) в файл. (если не хочешь с базами заморачиваться)... чтобы вывести статистику юзай функцию: PHP: $size = filesize($file); echo $size;
читает файл с именем линка прибавляет один записывает в файле получается число заходов по етому линку PHP: <?php $location=array ( '1'=>"http://google.com", '2'=>"http://mail.ru", .... ); $perehodi=file_get_contents($_GET['link'])+1; $fw=fopen ($_GET['link'],"w+"); fputs ($fw,$perehodi); header ("Location: ".$location[$_GET['link']]); ?>
А кто нить вообще заботится о безопастности данных советов, советчики блин. а если чел запрос сделает к произвольному файлу ? Я так думаю этот код просто тупо затрёт любой файл на который ему хватит прав. Продумайте код на 100%, если вы ему кого то советуете , тем более перед тем как запостить его на форуме под названием "Безопастность web-интерфейсов"
тс спросил как обезопасить етот скрипт ? или тема называется "ТОЛЬКО безопасные скрипты" ? насколько я вижу , раздел PHP,PERL,Javascript . причем сдесь то безопасен ли этот скрипт ? тс попросил пример - ему дали , дальше это его дело пользоватся им или нет , ему никто ничего не навязывает а если нужен безопасный скрипт можно сделать так PHP: <?php $location=array ( '1'=>"http://google.com", '2'=>"http://mail.ru", .... ); $link=intval($_GET['link']); if (array_search ($link,array_keys($location))===FALSE) {die("неправильная ссылка");} else { $perehodi=file_get_contents($_GET['link'])+1; $fw=fopen ($_GET['link'],"w+"); fputs ($fw,$perehodi); header ("Location: ".$location[$_GET['link']]); } ?>
И как это должно работать , сам то тестил? Хотя бы по логике ? То есть при линке index.php?link=1 в какой файл будет идти сохранение ? Вообщем как то так это должно выглядеть. PHP: <?php $logfile = "/home/stat"; $ext=".php"; $location=array ( '1'=>"http://google.com", '2'=>"http://mail.ru", ); $link=intval($_GET['link']); if (array_search ($link,array_keys($location))===FALSE) { die("неправильная ссылка"); } else { if (is_file($logfile.$link.$ext)) { if (is_writeable($logfile.$link.$ext)) { $perehodi=file_get_contents($logfile.$link.$ext); if (strlen($perehodi)>0) { $perehodi = intval($perehodi)+1; } else { $perehodi =1; } $fw=fopen ($logfile.$link.$ext,"w+"); fputs ($fw,$perehodi); fclose ($fw); header ("Location: ".$location[$link]); die(); } else { die("Проверьте права на запись для файла".$logfile.$link.$ext); } } else { if (($fw=fopen ($logfile.$link.$ext,"w+"))==FALSE) { die("Проверьте права на запись для файла".$logfile.$link.$ext); } else { fclose ($fw); } } } ?>
SQLHACK Чувак не парься =) PHP: $fw=fopen ($logfile.$link.$ext,"a+"); flock($fw, LOCK_EX); $perehodi = fread($fw,filesize($logfile.$link.$ext)); if (strlen($perehodi)>0) { $perehodi = intval($perehodi)+1; } else { $perehodi =1; } ftruncate($fw, 0); fputs ($fw,$perehodi); fclose($fw); Остольные проверки это на выбор (для красоты )
тестил по логике , делает GET['link'] числом ищет в массиве location такой ключ если находит прибавляет 1 в файл , не находит die () сохранит в файл "1" и зачем усложнять етим PHP: if (strlen($perehodi)>0) { $perehodi = intval($perehodi)+1; } else { $perehodi =1; если ето первый переход и файл пустой то пусто+1 то будет все равно 1
я тебе про это PHP: $fw=fopen ($_GET['link'],"w+"); а в начале он на intval проверяется, то есть если я введу 1qasd то будет создан файл 1qasd, и затирания файлов тогда не избежать, к примеру можно юзать, 1/../../../../../etc/passwd, его конечно врядли затрёшь, но это просто пример. таким образом можно затереть любой файл если прав хватит.