Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужно сделать страницу на php (https://forum.antichat.xyz/showthread.php?t=78086)

Ridikh 22.07.2008 19:29

Нужно сделать страницу на php
 
Нужно сделать страницу на php, чтобы все исходящие ссылки сделать локальными. На сайте есть 20 длинных ссылок и хочется заменить их.

например ссылку http://google.ru
заменить на http://yoursite.ru/out.php?1

а out.php методом GET получил бы единицу и переадресовал бы на http://google.ru

P3L3NG 22.07.2008 19:36

содержание out.php
PHP код:

<?php
$link 
$_GET['link'];
if (
$link 1)
{
header("Location: http://google.ru);
}
if (
$link = 2)
{
header("
Locationhttp://mail.ru);
}

...

if (
$link 20)
{
header("Location: http://new-anarchy.narod.ru);
}
?>

твоя страница html должна передавать ссыль туда в переменной link методом GET.
типа http://yoursite.ru/out.php?link=3

5triker 22.07.2008 19:41

имхо так удобней
PHP код:

<?php 
$location
=array (
'1'=>"http://google.com",
'2'=>"http://mail.ru",
....
);
header ("Location: ".$location[$_GET['link']]);
?>

и кстати в if нада писать не = а == , закрывать " в хедере

Ridikh 22.07.2008 19:50

спасибо вам, а можно сделать чтобы он статистику этих переходов считал?

5triker 22.07.2008 19:56

PHP код:

$fw=fopen ($_GET['link'],"w+");
fputs ($fw,file_get_contents($_GET['link'])+1); 

добавь

P3L3NG 22.07.2008 19:57

можно)
сделай например...
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


5triker 22.07.2008 20:00

Цитата:

чтобы вывести статистику юзай функцию:
PHP код:
$size = filesize($file);
echo $size;
зачем етот гемор с размером файла ?

Ridikh 22.07.2008 20:09

Цитата:

Сообщение от 5triker
PHP код:

$fw=fopen ($_GET['link'],"w+");
fputs ($fw,file_get_contents($_GET['link'])+1); 

добавь

немного непонял код (

5triker 22.07.2008 20:13

читает файл с именем линка прибавляет один записывает в файле получается число заходов по етому линку
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']]); 
?>


SQLHACK 23.07.2008 01:27

А кто нить вообще заботится о безопастности данных советов, советчики блин.
а если чел запрос сделает к произвольному файлу ?
Я так думаю этот код просто тупо затрёт любой файл на который ему хватит прав.
Продумайте код на 100%, если вы ему кого то советуете , тем более перед тем как запостить его на форуме под названием "Безопастность web-интерфейсов"

5triker 23.07.2008 10:58

тс спросил как обезопасить етот скрипт ? или тема называется "ТОЛЬКО безопасные скрипты" ? насколько я вижу , раздел 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']]);  
}
?>


SQLHACK 23.07.2008 11:59

И как это должно работать , сам то тестил?
Хотя бы по логике ?
То есть при линке 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); 
        }
    }


?>


Doom123 23.07.2008 12:34

SQLHACK Чувак не парься =)

PHP код:

 $fw=fopen ($logfile.$link.$ext,"a+");
 
flock($fwLOCK_EX);
 
$perehodi fread($fw,filesize($logfile.$link.$ext));
 if (
strlen($perehodi)>0
 { 
    
$perehodi intval($perehodi)+1
 } 
 else 
 {    
    
$perehodi =1;                     
 }
 
ftruncate($fw0);
fputs ($fw,$perehodi);
fclose($fw); 

Остольные проверки это на выбор (для красоты ;))

5triker 23.07.2008 13:42

Цитата:

И как это должно работать , сам то тестил?
Хотя бы по логике ?
То есть при линке index.php?link=1 в какой файл будет идти сохранение ?
тестил
по логике , делает GET['link'] числом ищет в массиве location такой ключ если находит прибавляет 1 в файл , не находит die ()
сохранит в файл "1"


и зачем усложнять етим
PHP код:

  if (strlen($perehodi)>0
            { 
                
$perehodi intval($perehodi)+1
            } 
            else 
            {    
                
$perehodi =1

если ето первый переход и файл пустой то пусто+1 то будет все равно 1

SQLHACK 23.07.2008 14:24

я тебе про это
PHP код:

 $fw=fopen ($_GET['link'],"w+"); 

а в начале он на intval проверяется, то есть если я введу 1qasd то будет создан файл 1qasd, и затирания файлов тогда не избежать, к примеру можно юзать, 1/../../../../../etc/passwd, его конечно врядли затрёшь, но это просто пример. таким образом можно затереть любой файл если прав хватит.

5triker 23.07.2008 14:37

там я прост забыл поменять $_GET['link'] на $link


Время: 20:08