Diskuze: ověřené existence webové adresy
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 4 zpráv z 4.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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
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;
}
}
?>
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.
Zobrazeno 4 zpráv z 4.