Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween
Avatar
Martin Suchodol
Redaktor
Avatar
Martin Suchodol:3.4.2020 11:45

Ahoj, poradí mi někdo co mám špatně? Vždy mi to ukazuje že stránka je out

řeším teď takový problém a to že potřebuji znát zda adresy uložené v databázi existují. Takže mě napadlo třeba jednou za hodinu volat cronem kód který by to provedl. Ovšem problém je že se nejedná o odkaz typu

http://www.example.cz

ale o něco jako

http://www.example.cz/neco1, http://www.example.cz/neco2, http://www.example.cz/neco3 atd.

tak mě napadlo zda dokáže takováto podmínka ověřit i tyto adresy

$host = 'example.cz/neco2;
if($socket [email protected] fsockopen($host, 80, $errno, $errstr, 30)

Ovšem v tom je problém, jakmile cokoliv přidám za lomítko tak mi to hlásí že stránka neexistuje. Dá se to nějak udelat?

Editováno 3.4.2020 11:46
 
Odpovědět
3.4.2020 11:45
Avatar
Martin Kašpar:3.4.2020 13:14

Ahoj, url není hostname, to sis špatně načetl účel a dokumentaci k fsockopen.

Ty potřebuješ znát http response kód a podle něho se rozhodnout, zda budeš adresu považovat za funkční nebo ne. Šlo by to udělat i obyčejným zjišťováním, zda Ti file_get_contents nevrátí false, ale tam nerozlišíš přesměrovanou od fungující nebo neexistující od chyby serveru. Lepší je na to použít curl a adresy si podle http rsponse kódu rozdělit.

$urls = ['https://www.jablotron.cz/', 'https://www.jablotron.com/cz/produkty/', 'https://www.jablotron.com/cz/abcdefg'];
foreach($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch,  CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    echo $url . ' - ' . $code . '<br/>';
}

Výstupem bude

https://www.jablotron.cz/ - 301
https://www.jablotron.com/cz/produkty/ - 200
https://www.jablotron.com/cz/abcdefg - 404
 
Nahoru Odpovědět
3.4.2020 13:14
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.4.2020 19:41
https://www.php.net/manual/en/function.fsockopen.php
<?php
// check if a server is up by connecting to a port
function chkServer($host, $port)
{
    $hostip = @gethostbyname($host); // resloves IP from Hostname returns hostname on failure

    if ($hostip == $host) // if the IP is not resloved
    {
        echo "Server is down or does not exist";
    }
    else
    {
        if (!$x = @fsockopen($hostip, $port, $errno, $errstr, 5)) // attempt to connect
        {
            echo "Server is down";
        }
        else
        {
            echo "Server is up";
            if ($x)
            {
                @fclose($x); //close connection
            }
        }
    }
}
?>

---

<?php
    class kali_utils {
        function games_list($kali_server_ip, $kali_server_port) {
            $result = array();
            $fp = fsockopen($kali_server_ip, $kali_server_port, $errno, $error, 30);
            if (!$fp) {
                $result["errno"] = $errno;
                $result["error"] = $error;
            }
            else {
                fputs($fp, "KALIQ");
                $header = fread($fp, 5);
                $bytes_left = socket_get_status($fp);
                if ($bytes_left > 0) {
                    $result["results"] = fread($fp, $bytes_left["unread_bytes"]);
                }
                else {
                    $result["results"] = "";
                }
                fclose($fp);
            }
            return $result;
        }
    }
?>
 
Nahoru Odpovědět
3.4.2020 19:41
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:3.4.2020 19:44
https://www.php.net/manual/en/function.fsockopen.php#58196
 Kiki_EF | 14 years ago
Additional ICQ status request over proxy
<?php
function icq_uin($uin)
{
    if (! is_numeric($uin))
        return false;
    $proxy_name = 'proxy.mydomain.de';
    $proxy_port = 8080;
    $proxy_user = "";
    $proxy_pass = "";
    $proxy_cont = '';
    $request_url = "http://status.icq.com/online.gif?icq=$uin";

    $proxy_fp = fsockopen($proxy_name, $proxy_port);
    if (!$proxy_fp)
        return false;
    fputs($proxy_fp, "GET $request_url HTTP/1.0\r\nHost: $proxy_name\r\n");
    fputs($proxy_fp, "Proxy-Authorization: Basic ". base64_encode ("$proxy_user:$proxy_pass")."\r\n\r\n");
    while(!feof($proxy_fp)){
        $proxy_cont .= fread($proxy_fp,4096);
    }
    fclose($proxy_fp);
    $proxy_cont = substr($proxy_cont, strpos($proxy_cont,"\r\n\r\n")+4);
    if (strstr($proxy_cont, 'online1'))
        return 'online';
    if (strstr($proxy_cont, 'online0'))
        return 'offline';
    if (strstr($proxy_cont, 'online2'))
        return 'disabled';
}
echo "User is ".icq_uin(123456789012345);
?>

Priste zkus online dokumentaci. To, co zkousis je pripojeni na server. Po pripojeni chces stahovat data, to je uz se dela jinak, fputs. To mas jako prikaz sql_connect a sql_query.

Editováno 3.4.2020 19:45
 
Nahoru Odpovědět
3.4.2020 19:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.