Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Coś a'la w3cache w php...
Forum PHP.pl > Forum > PHP
Bakus
Chciałem stworzyć coś a'la w3cache, ale przez stronę internetową...
Znalazłem Snoopy, ale on niestety nie działa do końca jak chciałem...
Z tąd moje pytanie:
Jak stworzyć wyrażenie regularne, które na stronie zamieniało by wszystkie zewnętrzne odnośniki na odwołanie do skryptu pobierającego pliki?
Cytat
<a href="index.php"><img src="obrazek.jpg"></a>
Cytat
<a href="get_page.php?a=http://adres.serwera/i/stronki/index.php"><img src="get_img.php?a=http://adres.serwera/i/obrazek.jpg"></a>

plik get_page.php pobiera strony (i to w nim dochodzi do parsowania strony) a plik get_img.php pobiera potrzebne pliki z serwera z przechwytywaną stroną...
Dla serwerów, które są publicznie dostępne można zastosować[php:1:eaca027b41]<?php
print str_replace("</head>", '<base href="http://adres.serwera/i/stronki/"></head>', $content);
?>[/php:1:eaca027b41]aczkolwiek serwer z ktorego będę pobierał informacje znajduje się w intranecie i nie jest dostępny z zewnątrz, więc to rozwiązanie odpada...

Macie jakieś pomysły jak to rozwiązać ?
Dodam tylko, że wszelkie rozwiązania z cyklu postawienia/rekonfiguracji proxy w intranecie odpadają...
Zbłąkany
A musi byc koniecznie wyrazenie regularne?? Ja wymyslilem cos takiego, moze sie przyda do czegos tobie smile.gif
[php:1:c6bc60532a]<?php
$adres_serw=""; // Zmienna podstawiona za adres serwera z ktorego strona jest parsowana
$kod_stronki='<a href="index.php"><img src="obrazek.jpg"></a>';
$nowy_kod=explode('"', $kod_stronki);
$przed_pierw_adr=$nowy_kod[0];
$miedzy_adr=$nowy_kod[2];
$po_drugim_adr=$nowy_kod[4];
$pierwszy_adr=$nowy_kod[1];
$drugi_adr=$nowy_kod[3];
$pierwszy_adr_zmien="get_page.php?a=".$adres_serw."".$pierwszy_adr."";
$drugi_adr_zmien="get_img.php?a=".$adres_serw."".$drugi_adr."";
$wynik="".$przed_pierw_adr.""".$pierwszy_adr_zmien.""".$miedzy_adr.""".$drugi_adr_zmien.""".$po_drugim_adr."";
echo("$wynik");
?>[/php:1:c6bc60532a]
Bakus
na dobry początek wrzuciłem do testu moją stronę...
przedstawię cały wynik...
[xml:1:5bcee0f672]<!DOCTYPE html PUBLIC "get_page.php?a=http://192.168.0.1/-//W3C//DTD XHTML 1.0 Transitional//EN" "get_img.php?a=http://192.168.0.1/http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns=[/xml:1:5bcee0f672]
i na tym koniec...
całość pehapa:[php:1:5bcee0f672]<?php
$adres_serw="http://192.168.0.1/"; // Zmienna podstawiona za adres serwera z ktorego strona jest parsowana
$kod_stronki=@implode('', @file($adres_serw));
$nowy_kod=explode('"', $kod_stronki);
$przed_pierw_adr=$nowy_kod[0];
$miedzy_adr=$nowy_kod[2];
$po_drugim_adr=$nowy_kod[4];
$pierwszy_adr=$nowy_kod[1];
$drugi_adr=$nowy_kod[3];
$pierwszy_adr_zmien="get_page.php?a=".$adres_serw."".$pierwszy_adr."";
$drugi_adr_zmien="get_img.php?a=".$adres_serw."".$drugi_adr."";
$wynik="".$przed_pierw_adr.""".$pierwszy_adr_zmien.""".$miedzy_adr.""".$drugi_adr_zmien.""".$po_drugim_adr."";
echo("$wynik");
?>[/php:1:5bcee0f672]
Zbłąkany
Wiem ze kijowo wyszlo winksmiley.jpg ale po drobnych poprawkach pewnie by wyszlo smile.gif nagle mnie olsnilo smile.gif mozna by tak dzielic ale kazda strona cos byc ja przez to przerzucal musialaby miec same " zamiast ' chociaz ten problem na pewno by dalo jakos rade rozwiazac smile.gif przedstawie teraz cale zadanie z mojego punktu widzenia mi sie wydaje ze to jest dobre podejscie: kazda strona jest otwierana jakims znacznikiem np takim:
[xml:1:7c3eb6cc0e]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">[/xml:1:7c3eb6cc0e]
do czego zmierzam pierwszy znacznik otwierajacy jest zawsze przed tym co znajduje sie w "" lub '' jesli zalozymy ze kazda strona ma otwarte i zamkniete znaczniki " lub ' to jak podzielisz wartosc calego kod stronki za pomoca explode('"', $kod_stronki); to co druga wartosc liczac od pierwszej nie od zerowej bedzie zawierac odpowiednie wartosci smile.gif mozna by wykonac petle for($i=1;$i<count($nowy_kod);$i++){
}
Moznaby zmodyfikowac moj skrypt, np w taki sposob:
[php:1:7c3eb6cc0e]<?php
$adres_serw=""; // Zmienna podstawiona za adres serwera z ktorego strona jest parsowana
$kod_stronki='jakis kod bla bla bla';
$nowy_kod=explode('"', $kod_stronki);

$czesc="$nowy_kod[0]";
for ($i=1;$i<count($nowy_kod);$i++) {

if(){ // warunek: czy liczba jest nieparzysta
if(){ // warunek: czy dany znacznik to link czy jakis inny znacznik wskazuje na link (tutaj uzycie wyrazenia regularnego by bylo idealne)
// jesli tak to zamieniaj adresy na get_page badz get_img za pomoca $czesc.="nowy adres"
} else {
// jesli nie to zostaw bez zmian i doklej za pomoca $czesc.="$nowy_kod[$i]"
}
} else {
// jesli nie to zostaw bez zmian i doklej za pomoca $czesc.="$nowy_kod[$i]"
}

}
?>[/php:1:7c3eb6cc0e]
Moze teraz wyjasnilem cala sytuacje ale niemam zbyt duzo czasu aby napisac caly kod smile.gif ufam ze po przeczytaniu tego juz wiesz co chcialem osiagnac:)
Liko
Może i głupi kod ale tylko coś takiego mi przyszło na myśl.
Kod
<?php

function reg( $ret )

{

$ret =

    preg_replace("#[url]([a-z]+?://){1}([a-z0-9-.,?!%*_#:;~&$@/=+()]+)[/url]#si", "<a href="get_page.php?a=12">12</a>", $ret);

$ret =

    preg_replace("#[url]([a-z0-9-.,?!%*_#:;~&$@/=+()]+)[/url]#si", "<a href="get_page.php?a=http://1">1</a>", $ret);



$ret =

    preg_replace( "#[url=([a-z]+?://){1}([a-z0-9-.,?!%*_#:;~&$@/=+()]+)](.*?)[/url]#si", "<a href="get_page.php?a=12">3</a>", $ret);

$ret =

    preg_replace("#[url=([a-z0-9-.,?!%*_#:;~&$@/=+()]+)](.*?)[/url]#si", "<a href="get_page.php?a=http://1">2</a>", $ret);

$ret =

    preg_replace("#[img]([a-z]+?://){1}([a-z0-9-.,?!%*_#:;~&$@/=+()]+)[/img]#si", "<img src="get_image.php?a=12" alt="" />", $ret);

$ret =

    preg_replace("#[img]([a-z0-9-.,?!%*_#:;~&$@/=+()]+)[/img]#si", "<img src="get_image.php?a=1" alt=""/>", $ret);



return $ret;

}



ob_start("reg");

echo '<?xml version="1.0" encoding="iso-8859-2"?>';

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">

<head>

<title>

</title>

</head>

<body>

<p>

[url=http://google.pl]Google[/url]<br />[url]www.google.pl[/url]<br />

[url=http://google.pl][img]www.google.pl/images/hp0.gif[/img][/url]

</p>

</body>

</html>

<?php

ob_end_flush();

?>


Przepraszam, że w tych znacznikach, ale jak dałem w php to nie było widać niektórych rzeczy.
Bakus
jak na nazie znalazłem... zobaczymy co z tego wydzie...
http://cvs.sourceforge.net/viewcvs.py/php-proxy/Dean/

_________________
UpDated: Liko nie chodzi o bbcode, czy coś w tym stylu, a o proxy w php...
moim zadaniem jest udostępnienie w ten sposób 2 stron z serwera wewnątrz sieci lokalnej na zewnątrz przy pomocy php, który będzie odpalany na serwerze łączącym sieć lokalną z internetem... i wszyscy z internetu mają mieć możliwość oglądania tych 2 stron...
Bakus
Dean działa na dobrą sprawę na dość obszernym rozwinięciu Twojej myśli... punkt się należy... winksmiley.jpg

A co do http://cvs.sourceforge.net/viewcvs.py/php-proxy/Dean/ to mogę go śmiało polecić, ale dodam tylko, że trzeba zamienić w pliku URLproxyServer.php
[php:1:d5f94ce0ad]<?php
foreach($head as $h) header($h);
?>[/php:1:d5f94ce0ad]
na:[php:1:d5f94ce0ad]<?php
foreach($head as $h)
{
if($h != 'Content-Disposition: attachment; filename=')
{
Header($h);
}
}
?>[/php:1:d5f94ce0ad]i wszystko działa ok... winksmiley.jpg

ot: [i oto mój tysiąc pierwszy post...]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.