Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сложности
 
 автор: @ndry   (22.04.2006 в 20:04)   письмо автору
 
 

Вот я написал скрипт простенького прокси:

parce.php

<div style="position:relative;">
<center><form action="?" method="get"> 
    <input type="Text" name="url" size="40" value="<?php echo $_GET['url']; ?>"> 
    <input type="Submit" value=">>"> 
    </form></center>
<hr></div><?

function parce($url)
{
    
$body = file_get_contents($url); // Считывание файла

    
preg_match('/\\b(?P<protocol>https?|ftp):\/\/(?P<domain>[-A-Z0-9.]+)(?P<file>\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?P<parameters>\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i', $url, $path_details); 
    
// Проверяем, верен ли введённый адрес 

    
$filehost = $path_details[2]; 
    
$protocol = $path_details[1]; 
    
    
$body = str_replace($protocol."://".$filehost, '', $body);
    
    
$body = preg_replace( "#background[/s]*=[/s]*([']*[\"]*)(.*?)([']*[\"]*)#is" , " background=\\1viev.php?url=".$protocol."://".$filehost."/\\2\\3" , $body);

    
$body = preg_replace( "#src[/s]*=[/s]*([']*[\"]*)(.*?)([']*[\"]*)#is" , " src=\\1viev.php?url=".$protocol."://".$filehost."/\\2\\3" , $body);

    
$body = preg_replace( "#href[/s]*=[/s]*([']*[\"]*)(.*?)([']*[\"]*)#is" , " href=\\1parce.php?url=".$protocol."://".$filehost."/\\2\\3" , $body);

    
$body = str_replace("://", "linkezprotokol", $body);
    
$body = str_replace("//", "/", $body);
    
$body = str_replace("linkezprotokol", "://", $body);
    
    echo 
$body;
}
if(
$_GET['url'])
{
    
parce($_GET['url']);
}
?>



viev.php

<?
function viev_open($url)
{
    
// Получение размера файла
    
$filepath = trim($url); 
    
// Делим путь к файлу на хост и "хвост" (для сокетов) 
    
preg_match('/\\b(?P<protocol>https?|ftp):\/\/(?P<domain>[-A-Z0-9.]+)(?P<file>\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?P<parameters>\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i', $filepath, $path_details); 
    
// Проверяем, верен ли введённый адрес 
    
if(isset($path_details[2]) && !empty($path_details[2])) 
    { 
        
$filehost = $path_details[2]; 
    } 
    else 
    { 
        echo 
"WRONG LINK!"; 
        exit; 
    } 
    
// Если "хвост" пуст, заполняем пустоту слешем, что бы не сглючили сокеты 
    
if(isset($path_details[3]) && !empty($path_details[3])) 
    {
        
$filepath = $path_details[3];
    } 
    else 
    {
        
$filepath = "/"; 
    }
     
    
// Подключаемся к файлу через сокеты 
    
$getfile = fsockopen($filehost, 80, $errno, $errstr, 30) or die("Can't connect ot the sever"); 
    
// Добавляем в буффер путь к файлу на сервере и сам хост 
    
fputs($getfile, "HEAD $filepath HTTP/1.0\nHOST: $filehost\n\n"); 
    
// Объявляенм буффер-переменную для заголовков 
    
$temp_headers = ""; 
    
// Читаем заголовки по 4 кб, пока не дойдём до конца сокет-файла 
    
while(!feof($getfile)) $temp_headers .= fgets($getfile, 4096); 
    
// Ищем в полученных заголовках Content-Length, если находим,читаем его значение 
    
if(ereg("Content-Length: ([0-9]+)", $temp_headers, $matched_array)) 
    { 
        
$filesize = $matched_array[1]; 
    } 
    
    if(
ereg("Content-Type: (.*)", $temp_headers, $matched_array)) 
    { 
        
$filtype = $matched_array[1]; 
    } 


    
header('Content-Type: '.$filtype); // Отправляем тип файла.
    
header('Content-Length: '.$filesize); // Отправляем его размер.
    
echo file_get_contents($url); // Считывание файла
    
exit();
}
if(
$_GET['url'])
{
    
viev_open($_GET['url']);
}



Есть сложности:
1. Если в файле есть сслыка типа "../index.php", то она не открывается
2. Шота viev.php не отображает картинки
3. Если открыть папку на любом сервере, типа http://localhost/chat/, то пути для кртинок не учитівають её. Те заместь правильного абсолютного путя http://localhost/chat/img.gif скрипт пытается загрузить картинку http://localhost/img.gif

И теоретические вопросы:
1. Как сделать чтоб автоматически распознавались ссылки на файлы?

Да и вобще может кто посоветует, как лучше его сделать и какие в нём есть ошибки и недостатки...

Благодарен за любую помощь

   
 
 автор: @ndry   (24.04.2006 в 20:17)   письмо автору
 
   для: @ndry   (22.04.2006 в 20:04)
 

--

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования