Planuję przeprojektować moją stronę, zrezygnować z Postnuke'a, a tym samym z forum jako modułu i przejść na phpBB2. Jednoczesnie nie chciałbym tracić linków z innych stron do mojego obecnego forum, dlatego mam taki problem do rozwiązania:
Do serwera przychodzi zapytanie:
http://www.mojastrona.pl/index.php?name=PN...pic&p=3860#3860. Po zmianie na phpBB2 taka strona już nie istnieje, więc skrypt php, wyciąga 3860#3860 i konwertuje adres na:
http://www.mojastrona.pl/phpbb2/viewtopic.php?p=3860#3860.
W innym wypadku Użytkownicy otrzymają komunikat o braku strony.
Czy macie moze jakiś pomysł na rozwiązanie tego problemu?
Znalazłem taki skrypt,
<?php
#usage:
$r = new HTTPRequest('http://www.mojastrona.pl/phpbb2/viewtopic.php?p=3860#3860');
echo $r->DownloadToString();
class HTTPRequest
{
var $_fp; // HTTP socket
var $_url; // full URL
var $_host; // HTTP host
var $_protocol; // protocol (HTTP/HTTPS)
var $_uri; // request URI
var $_port; // port
// scan url
function _scan_url()
{
$req = $this->_url;
if($pos === false)
$host = substr($req, 0
, $pos);
if(strpos($host, ':') !== false) {
list
($this->_host
, $this->_port
) = explode(':', $host); }
else
{
$this->_host = $host;
$this->_port = ($this->_protocol == 'https') ? 443 : 80;
}
$this->_uri
= substr($req, $pos); if($this->_uri == '')
$this->_uri = '/';
}
// constructor
function HTTPRequest($url)
{
$this->_url = $url;
$this->_scan_url();
}
// download URL to string
function DownloadToString()
{
$crlf = "\r\n";
// generate request
$req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf
. 'Host: ' . $this->_host . $crlf
. $crlf;
// fetch
$this->_fp
= fsockopen(($this->_protocol
== 'https' ?
'ssl://' : '') . $this->_host
, $this->_port
); $response .= fread($this->_fp
, 1024
);
// split header and body
$pos = strpos($response, $crlf . $crlf); if($pos === false)
return($response);
$header = substr($response, 0
, $pos);
// parse headers
foreach($lines as $line)
if(($pos = strpos($line, ':')) !== false)
// redirection?
if(isset($headers['location'])) {
$http = new HTTPRequest($headers['location']);
return($http->DownloadToString($http));
}
else
{
return($body);
}
}
}
?>
który wyświetli stronę zdefiniowaną w trzeciej linijce kodu. Wiem, że funkcja
parse_url zwraca w tablicy asocjacyjnej wszystkie składowe przetwarzanego URL'a. W tym wypadku składową adresu query - po znaku ? czyli "?name=PNphpBB2&file=viewtopic&p=3860#3860" Niestety nie potrafie połączyć tego wszystkiego razem.
Proszę o pomoc.
Pozdrawiam