Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр 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($filehost80$errno$errstr30) 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($getfile4096); 
    
// Ищем в полученных заголовках 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 Яндекс.Метрика Яндекс цитирования