Skocz do zawartości

moje problemy z php


TheMarcQ

Rekomendowane odpowiedzi

ostatnio próbuję nauczyć się php i mam czasem problemy z pisanymi przeze mnie programami i zamiast tworzyć coraz to kolejne tematy będę opisywał problemy tutaj.

 

Więc teraz mam tak:

Skrypt który pobierze treść tytułu poprzedniej strony

Odnośnik do komentarza
Udostępnij na innych stronach

Tymon szaleje z jakimiś kodami.

 

@topic Skoro nie chcesz powiedzieć o co chodzi.

Zakładam, że chodzi o <title></title>. Ponieważ PHP nie ma dostępu do DOMu, tytuł ten musi być powiązany z php:

<?php $title = "Tytuł"; ?>
<html>
<head>
<title><?php echo $title; ?></title>

Żeby ta zmienna była dostępna w następnych stronach, najlepiej zastosujmy sesje.

<?php $_SESSION['title'] = $title; ?>

Odnośnik do komentarza
Udostępnij na innych stronach

Tymon szaleje z jakimiś kodami.
Zwykła obsługa wyjątków.

 

To musisz posłać zapytanie HTTP i pobrać dokument, spreparować.

<?php
    $url = 'http://strona.pl/index.php';
    
    if( preg_match( '/^http:\/\/(.+?)\/(.*?)$/i', $url, $match ) )
    {
        if( $handle = @fsockopen( $match[1], 80 , $en, $es, 3 ) )
        {
            $header  = "GET /$match[2] HTTP/1.1\r\n";
            $header .= "Host: $match[1]\r\n";
            $header .= "Connection: close\r\n";
            $header .= "\r\n";
    
            fwrite( $handle, $header );
            
            $content = '';
            while( !feof( $handle ) )
            {
                $content .= fread( $handle, 512 );
                if( preg_match( '/<title>(.+?)<\/title>/i', $content, $match ) )
                {
                    echo $match[1]; // title
                    break;
                }
            }
            
            fclose( $handle );
        }
        else
            echo 'Nie mozna polaczyc';
    }
    else
        echo 'Niepoprawny URL';
?>

Odnośnik do komentarza
Udostępnij na innych stronach

Piczer, staram się. Z całym szacunkiem dla Ciebie, ale od dłuższego czasu nie widzę byś czymś zaświecił po za wpisem na Twoim blogu mówiącym o bezpieczeństwie, przyznaję, że choć rozwiązanie jest ok i spełnia zadanie, to nie należy do najlepszych.

 

Kofel, oczywiście.

Odnośnik do komentarza
Udostępnij na innych stronach

Bo nie było się jak wykazać, taki poziom w tym dziale.
Więc nie rozumiem po cholerę się ograniczasz i tu jeszcze przesiadujesz.

 

TheMarcQ, nie wiem co masz dokładnie w pliku, ale u mnie to co Ci tu podałem działa nie najgorzej.

Odnośnik do komentarza
Udostępnij na innych stronach

Piczer, staram się. Z całym szacunkiem dla Ciebie, ale od dłuższego czasu nie widzę byś czymś zaświecił po za wpisem na Twoim blogu mówiącym o bezpieczeństwie, przyznaję, że choć rozwiązanie jest ok i spełnia zadanie, to nie należy do najlepszych.

Ty też w życiu nigdy niczym nie zaświeciłeś.

 

Piczera znam od dłuższego czasu, współpracowałem z nim... wiem na co go stać.

Odnośnik do komentarza
Udostępnij na innych stronach

Ty też w życiu nigdy niczym nie zaświeciłeś.
Ogólnik.
Piczera znam od dłuższego czasu, współpracowałem z nim... wiem na co go stać.
Cieszy mnie to, nie zmienia to jednak mojego zdania na jego temat. Osobiście mam też gdzieś co on myśli o tym co ja myślę o nim i co myślicie o mnie.

 

Vice versa.
Your point.
Odnośnik do komentarza
Udostępnij na innych stronach

wy chyba urządziliście sobie mi tutaj jakąś dyskusję nie na temat

 

a tak wogole jak podejrzałem w firefoxie źródło było wyświetlone tak że do momentu:

if( preg_match( '/<title>

jest wszystko dobrze a potem od

(.+?)<\/title>/i', $content, $match )

kod zaczyna czytać jako zwykły html

 

macie:

http://mare.cba.pl/polej/

Odnośnik do komentarza
Udostępnij na innych stronach

Zwykła obsługa wyjątków.

 

To musisz posłać zapytanie HTTP i pobrać dokument, spreparować.

<?php
    $url = 'http://strona.pl/index.php';
    
    if( preg_match( '/^http:\/\/(.+?)\/(.*?)$/i', $url, $match ) )
    {
        if( $handle = @fsockopen( $match[1], 80 , $en, $es, 3 ) )
        {
            $header  = "GET /$match[2] HTTP/1.1\r\n";
            $header .= "Host: $match[1]\r\n";
            $header .= "Connection: close\r\n";
            $header .= "\r\n";
    
            fwrite( $handle, $header );
            
            $content = '';
            while( !feof( $handle ) )
            {
                $content .= fread( $handle, 512 );
                if( preg_match( '/<title>(.+?)<\/title>/i', $content, $match ) )
                {
                    echo $match[1]; // title
                    break;
                }
            }
            
            fclose( $handle );
        }
        else
            echo 'Nie mozna polaczyc';
    }
    else
        echo 'Niepoprawny URL';
?>

PO cho asz tyle kodu?

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
to może prościej: wystarczy mi jak w zmiennej będzie zapisywany URL ostatnio odwiedzonej strony(poprzedniej w historii)((żeby było wiedzieć skąd "przybył" na stronę))

 

 

$_SERVER['HTTP_REFERER'];

Odnośnik do komentarza
Udostępnij na innych stronach

można sobie przepełnić pamięć
Wiesz, u mnie to samo. Np. w sytuacji gdy brakuje tagu title w dokumencie, a jest on dość... duży. Rozwiązanie:
<?php

    function title( $url )
    {
        if( !preg_match( '/^http:\/\/(.+?)\/(.*?)$/i', $url, $match ) )
            return false;
    
        if( !( $handle = @fsockopen( $match[1], 80 , $null, $null, 3 ) ) )
            return false;

        fwrite( $handle,
            "GET /$match[2] HTTP/1.1\r\n" .
            "Host: $match[1]\r\n" .
            "Connection: close\r\n" .
            "\r\n"
        );
        
        $title = false;
        $buffer = '';
        while( !feof( $handle ) )
        {

            if( $title === false )
            {
                $buffer .= fread( $handle, 8 );

                if( strlen( $buffer ) > 16 )
                    $buffer = substr( $buffer, strlen( $buffer ) - 16 );
                    
                if( ( $position = strpos( $buffer, '<title>' ) ) !== false )
                    $title = substr( $buffer, $position + 7 );
            }

            if( $title !== false )
            {
                $title .= fread( $handle, 8 );

                if( ( $position = strpos( $title, '</title>' ) ) !== false )
                {
                    $title = substr( $title, 0, $position );
                    break;
                }
            }

        }
        
        fclose( $handle );

        return $title;

    }
    
    var_dump( title( 'http://site.pl/' ) );

?>

Tak, kombinuje. :)

 

TheMarcQ, proszę, masz to w funkcji.

 

EDIT

Poprawka, był błąd.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...