Просмотр полной версии : Нужно сделать страницу на php
Нужно сделать страницу на php, чтобы все исходящие ссылки сделать локальными. На сайте есть 20 длинных ссылок и хочется заменить их.
например ссылку http://google.ru
заменить на http://yoursite.ru/out.php?1
а out.php методом GET получил бы единицу и переадресовал бы на http://google.ru
содержание out.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
$location=array (
'1'=>"http://google.com",
'2'=>"http://mail.ru",
....
);
header ("Location: ".$location[$_GET['link']]);
?>
и кстати в if нада писать не = а == , закрывать " в хедере
спасибо вам, а можно сделать чтобы он статистику этих переходов считал?
$fw=fopen ($_GET['link'],"w+");
fputs ($fw,file_get_contents($_GET['link'])+1);
добавь
можно)
сделай например...
<?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);
?>
каждый раз будет записываться один байт (оди символ) в файл. (если не хочешь с базами заморачиваться)...
чтобы вывести статистику юзай функцию:
$size = filesize($file);
echo $size;
чтобы вывести статистику юзай функцию:
PHP код:
$size = filesize($file);
echo $size;
зачем етот гемор с размером файла ?
$fw=fopen ($_GET['link'],"w+");
fputs ($fw,file_get_contents($_GET['link'])+1);
добавь
немного непонял код (
читает файл с именем линка прибавляет один записывает в файле получается число заходов по етому линку
<?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
$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
$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 Чувак не парься =)
$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);
Остольные проверки это на выбор (для красоты ;))
И как это должно работать , сам то тестил?
Хотя бы по логике ?
То есть при линке index.php?link=1 в какой файл будет идти сохранение ?
тестил
по логике , делает GET['link'] числом ищет в массиве location такой ключ если находит прибавляет 1 в файл , не находит die ()
сохранит в файл "1"
и зачем усложнять етим
if (strlen($perehodi)>0)
{
$perehodi = intval($perehodi)+1;
}
else
{
$perehodi =1;
если ето первый переход и файл пустой то пусто+1 то будет все равно 1
я тебе про это
$fw=fopen ($_GET['link'],"w+");
а в начале он на intval проверяется, то есть если я введу 1qasd то будет создан файл 1qasd, и затирания файлов тогда не избежать, к примеру можно юзать, 1/../../../../../etc/passwd, его конечно врядли затрёшь, но это просто пример. таким образом можно затереть любой файл если прав хватит.
там я прост забыл поменять $_GET['link'] на $link
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot