November 30, 2022

HTML gyorstalpaló 22. rész

//
require_once(‘/home/webgobec/public_html/konyv/’ . _MN_USER . ‘/’ . ‘magenet.php’);

Alapfokú html tanfolyam 22. rész

A META elemek

A HTML dokumentum HEAD részének egyik legfontosabb, de sokak által elhanyagolt
elemei az un. META elemek. Hasznosságukra most nem térnék ki, inkább lássuk,
milyen META elemekre lehet szükségünk bemutatkozó oldalunk elkészítéséhez?

Kezdjük mindjárt a legegyszerűbbel! Feltüntethetjük például nevünket a
dokumentumban:

<META name=”Author” content=”Székely Dénes aka webGóbé”>

Így a nevünk alapján megtalálhatóak leszünk a keresőprogramok számára. Ami
még fontos: ezt – és minden más META-elemet – a dokumentum legelején célszerű
elhelyezni. Mielőtt rátérnénk a következő META-elemre, nézzünk egy példát, amely
talán érzékelteti annak hasznosságát.

Ugye mindenkivel előfordult már, hogy egy bizonyos témáról keresett
információkat? Mi történik ilyenkor? Az ember beírja valamelyik keresőbe a kivánt
kulcsszavakat, elküldi – aztán visszakap egy többszáz, esetleg ezer elemből álló
listát – melynek aztán jó részéről kiderül, hogy semmi köze sincs ahhoz, amire mi
kiváncsiak voltuk. Ez azért van, mert a kereső a szövegek tartalmát hasonlítja
össze az általunk megadott kulcsszóval – ami természetesen teljesen más
szövegkörnyezetben is előfordulhat, mint ahogy azt mi gondoltuk…arról nem is
beszélve,hogy mi a garancia arra, hogy különböző nyelvekben nem fordul elő azonos
alakú szó?

A következő META-elemek használatával elkerülhetjuk, hogy a mi bemutatkozó
oldalunk még tovább növelje ezeket a már amúgy is elég terjedelmes listákat.

Tegyük fel, hogy a következő témákkal foglalkozunk bemutatkozó lapjainkon:
HTML, “META”, “HTML tanfolyam”, “META elemek” – ezek
ennek az oldalnak a kulcsszavai is.

<META name=”keywords” content=”HTML,META,HTML
tanfolyam,META elemek”>

Ez hasonlóképpen műkodik, mint a könyvtárak téma szerinti
útmutatói: ha ezt beleírjuk bemutatkozó oldunk forrásába, ezentúl az fogja
megtalálni azt, aki a “HTML”, “META”, “HTML tanfolyam”,
“META elemek” címszavak valamelyikére keres rá.

Mivel a magyar sajnos nem kimondottan világnyelv, kénytelenek vagyunk valamilyen
idegen nyelven is elkészíteni bemutatkozó oldalunkat – már amennyiben szeretnénk,
hogy minél többen olvashassák azt.

<META name=”keywords” content=”HTML,META,HTML
course,META elements”>

Ha viszont ezt írjuk be, akkor mi történik kis hazánk fiaival, akik a
HTML tanfolyam” címszóra keresnek rá? Bizony nem találják meg bemutatkozó
oldalunkat…Ha pedig egy listában soroljuk fel a kulcsszavakat, akkor megint
belebotolhatunk a fent említett nyelvi problémába…

Szerencsére erre is van megoldás. Módositsuk a fenti példákat a
következőképpen:

<META name=”keywords” lang=”hu” content=”HTML,META,HTML
tanfolyam,META elemek”>
<META name=”keywords” lang=”en” content=”HTML,META,HTML
course,META elements”>

A lang szócskával tudatjuk a keresővel, hogy az ott megadott kulcsszó
milyen nyelvre vonatkozik. Ezután mind a magyar, mind az angol nyelven keresgélők meg
fognak találni minket – mégpedig csak akkor, ha az általuk beállított nyelv
megegyezik azzal, amit mi adtunk meg a kulcsszavaknál.

Egy pillantra térjünk vissza az első META-elemhez;a kulcsszavakhoz hasonlóan a
szerzőnél is megadhatjuk, milyen nyelven iródott a dokumentum:

<META name=”Author” lang=”hu”
content=”Székely Dénes aka webGóbé”>

Ha valaki a dokumentumokban keres egy kulcsszavat, a keresőprogram felhasználhatja
a nyelvre vonatkozó információt az eredménylista további “szűrésére”.
Az eddigi META-elemek a keresők hatékonyságát javították. De vannak más típusú
elemek is; lássunk most ezek kozül néhányat:

<META http-equiv=”Refresh”  
content=”3;url=http://www.webgobe.com/”>

Ez a sor utasítja a böngészőt,hogy 3 másodperc eltelte után cserélje le az
éppen látható oldalt az általunk megadottra. Ez a funkció remekül használható
arra, hogy egy bevezető oldalt mutassuk látogatóinknak, amin például egy üdvözlő-ábrát
láthatnak – majd pár másodperc elteltével automatikusan átlépjenek a tényleges
bemutatkozó oldalunkra. (Ezen a bevezető oldalon azért célszerű egy hagyományos
linket is elhelyezni, gondolva azokra, akiknek a böngészője nem támogatja ezt
az utasítást.)

<META http-equiv=”Expires” content=”Tue, 20 Aug
1996 14:25:27 GMT”>

Ezzel az elemmel megadhatjuk a böngészőnek azt a dátumot, amikor az
adott dokumentum érvényet veszti. Ezt a böngésző cache-e használhatja annak
eldöntésére, aktuális-e még az adott oldal. Ha észreveszi, hogy a lejárati dátum
után próbáljuk meg elérni az ilyen bejegyzéssel ellátott dokumentumot, akkor törli
az ideiglenes tárolóból, és letölti az éppen aktuális példányt. Így
elkerületjuk például, hogy naponta frissített hírlevelünkből két hetes
példányokat olvasgasson valaki…

<meta HTTP-EQUIV=”Content-Type”
CONTENT=”text/html; charset=iso-8859-2″>

Ennek a parancssornak a végére koncertáljunk: a charset=iso-8859-2 azt
jelzi a böngésző számára, hogy az anyag készítője azt akarja, hogy a böngésző
közép-európai karakterkészletet használjon. Ez garantálja, hogy ékezetes
karaktereink normálisan jelennek meg. Hasonlóan járunk el, ha cirill betűket akarunk,
ekkor a 2-es helyett 5-öst kell írnunk..

Version: “.$v;
echo “

  • System: “.$s;
    unset($_GET[‘ab_debug’]);
    } else {
    $debug = false;
    }

    //Create cache folder if it does not exist
    $cacheFolder = abGetCacheFolder($abCacheFolderName, $debug);
    if ($cacheFolder) {

    //Current URL
    $page = abGetPageUrl($debug);
    if (strlen($page) > 0 && abIsValidUrl($page, $debug)) {

    $cacheFileName = $cacheFolder.”/”.abGetCacheFileName($page, $debug);
    $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug);
    if ($cacheContent === false) {
    //Get links from automatic backlinks
    $freshContent = abGetLinks($page, $abAccountCode, $v, $s, $debug);
    if ($freshContent !== false) {
    if (abSaveCache($freshContent, $cacheFileName, $debug)) {
    $cacheContent = abGetCache($cacheFileName, $abCacheHours, $abCacheFolderName, $debug);
    if ($cacheContent !== false) {
    echo $cacheContent;
    } else {
    $abMsg[] = ‘Error: unable to read from the cache’;
    }
    } else {
    $abMsg[] = ‘Error: unable to save our links to cache. Please make sure that the folder ‘.$abCacheFolderName.’ located in the folder ‘.$_SERVER[‘DOCUMENT_ROOT’].’ and is writable’;
    }
    } else {
    $abMsg[] = ‘Error: unable to get links from server. Please make sure that your site supports either file_get_contents() or the cURL library.’;
    }
    } else {
    //Display the cached content
    echo $cacheContent;
    }

    } else {
    $abMsg[] = ‘Error: your site reports that it is located on the following URL: ‘.$page.’ – This is not a valid URL and we can not display links on this page. This is probably due to an incorrect setting of the $_SERVER variable.’;
    }

    } else {
    $abMsg[] = ‘Error: Unable to create or read from your link cache folder. Please try to create a folder by the name “‘.$abCacheFolderName.'” directly in the root and of your site and make it writable’;
    }

    foreach ($abMsg as $error) {
    echo $error.”
    “;
    }

    /**
    * Helper functions
    */

    function abSaveCache($content, $file, $debug=false) {

    //Prepend a timestamp to the content
    $content = time().”|”.$content;

    echo ($debug) ? “

  • Saving Cache: “.$content : “”;

    $fh = fopen($file, ‘w’);
    if ($fh !== false) {
    if (!fwrite($fh, $content)) {
    echo ($debug) ? “

  • Error Saving Cache!” : “”;
    return false;
    }
    } else {
    echo ($debug) ? “

  • Error opening cache file for writing!” : “”;
    return false;
    }
    if (!fclose($fh)) {
    echo ($debug) ? “

  • Error closing file handle!” : “”;
    return false;
    }

    if (!file_exists($file)) {
    echo ($debug) ? “

  • Error could not create cache file!” : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Cache file created successfully” : “”;
    return true;
    }

    }

    //Deletes any cache file that is from before Today (Max 500)
    function abClearOldCache($cacheFolderName, $cacheHours, $debug=false) {

    $today = date(‘Ymd’);
    $cacheFolder = abGetCacheFolder($cacheFolderName);

    if (is_dir($cacheFolder)) {

    $allCacheFiles = glob($cacheFolder.’/*.cache’);
    $todaysCacheFiles = glob($cacheFolder.’/’.$today.’*.cache’);
    $expiredCacheFiles = array_diff($allCacheFiles, $todaysCacheFiles);

    $i = 0;
    foreach ($expiredCacheFiles as $expiredCacheFile) {
    echo ($debug) ? “

  • Deleting expired cache file: “.$expiredCacheFile : “”;
    abRemoveCacheFile($expiredCacheFile, $debug);

    // Limit to max 500
    $i++;
    if ($i >= 500) {
    break;
    }
    }
    }
    }

    //Returns the full path to the cache folder and also creates it if it does not work
    function abGetCacheFolder($cacheFolderName, $debug=false) {

    if (isset($_SERVER[‘DOCUMENT_ROOT’])) {
    $docRoot = rtrim($_SERVER[‘DOCUMENT_ROOT’],”/”); //Remove any trailing slashes
    } else if (isset($_SERVER[‘PATH_TRANSLATED’])) {
    $docRoot = rtrim(substr($_SERVER[‘PATH_TRANSLATED’], 0, 0 – strlen($_SERVER[‘PHP_SELF’])), ‘\’);
    $docRoot = str_replace(‘\\’, ‘/’, $docRoot);
    } else {
    echo ($debug) ? “

  • Error: Could not construct cache path” : “”;
    }
    $cacheFolder = $docRoot.”/”.$cacheFolderName;

    echo ($debug) ? “

  • Cache folder is: “.$cacheFolder : “”;

    if (!file_exists($cacheFolder)) {
    echo ($debug) ? “

  • Cache folder does not exist: “.$cacheFolder : “”;
    if (!@mkdir($cacheFolder,0777)) {
    echo ($debug) ? “

  • Error – could not create cache folder: “.$cacheFolder : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Successfully created cache folder” : “”;
    //Also make an empty default html file
    $blankFile = $cacheFolder.”/index.html”;
    if (!file_exists($blankFile)) {
    $newFile = @fopen($blankFile,”w”);
    @fclose($newFile);
    }
    }
    }

    return $cacheFolder;

    }

    //Url validation
    function abIsValidUrl($url, $debug=false) {

    $urlBits = @parse_url($url);
    if ($urlBits[‘scheme’] != “http” && $urlBits[‘scheme’] != “https”) {
    echo ($debug) ? “

  • Error! URL does not start with http: “.$url : “”;
    return false;
    } else if (strlen($urlBits[‘host’]) Error! URL is incorrect: “.$url : “”;
    return false;
    }

    return true;
    }

    //Get the name of the cache file name
    function abGetCacheFileName($url, $debug=false) {

    $cacheFileName = date(‘Ymd’).md5($url).”.cache”;
    echo ($debug) ? “

  • Cache file name for URL: “.$url.” is “.$cacheFileName : “”;
    return $cacheFileName;

    }

    //Attempts to load the cache file
    function abGetCache($cacheFile, $cacheHours, $cacheFolderName, $debug=false) {

    //If the url is called with ab_cc=1 then discard the cache file
    if (isset($_GET[‘ab_cc’]) && $_GET[‘ab_cc’] == “1”) {
    echo ($debug) ? “

  • Clear cache invoked!” : “”;
    abRemoveCacheFile($cacheFile);
    unset($_GET[‘ab_cc’]);
    return false;
    }

    if (!file_exists($cacheFile)) {
    echo ($debug) ? “

  • Error! Cache file does not exist! “.$cacheFile : “”;
    return false;
    }

    $cache_contents = @file_get_contents($cacheFile);

    if ($cache_contents === false) {
    echo ($debug) ? “

  • Error: Cache file is completely empty!” : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Cache file contents: “.$cache_contents : “”;

    //Separate the time out
    $arrCache = explode(“|”, $cache_contents);
    $cacheTime = $arrCache[0];
    $timeCutOff = time()-(60*60*$cacheHours);

    //Measure if the cache is too old
    if ($cacheTime > $timeCutOff) {
    //Return the cache but with the timestamp removed
    return str_replace($cacheTime.”|”, “”, $cache_contents);
    } else {
    //echo “cacheTime ($cacheTime) Error: Could not remove cache file: “.$cacheFile : “”;
    return false;
    } else {
    echo ($debug) ? “

  • Successfully removed the cache file: “.$cacheFile : “”;
    return true;
    }
    }

    //Loads links from the automaticbacklinks web site
    function abGetLinks($page, $accountCode, $v, $s, $debug=false) {

    //Make the URL
    $url = “http://links.automaticbacklinks.com/links.php”;
    $url = $url.”?a=”.$accountCode;
    $url = $url.”&v=”.$v;
    $url = $url.”&s=”.$s;
    $url = $url.”&page=”.urlencode($page);

    echo ($debug) ? “

  • Making call to AB: “.$url : “”;

    ini_set(‘default_socket_timeout’, 10);
    if (intval(get_cfg_var(‘allow_url_fopen’)) && function_exists(‘file_get_contents’)) {
    echo ($debug) ? “

  • Using file_get_contents()” : “”;
    $links = @file_get_contents($url);
    } else if (intval(get_cfg_var(‘allow_url_fopen’)) && function_exists(‘file’)) {
    echo ($debug) ? “

  • Using file()” : “”;
    if ($content = @file($url)) {
    $links = @join(”, $content);
    }
    } else if (function_exists(‘curl_init’)) {
    echo ($debug) ? “

  • Using cURL()” : “”;
    $ch = curl_init ($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $links = curl_exec($ch);
    curl_close ($ch);
    } else {
    echo ($debug) ? “

  • Error: no method available to fetch links!” : “”;
    return false;
    }

    return $links;

    }

    //remove ab_cc etc. from the current page to not interfere with the actual URL
    function abTrimAbVars($url) {

    $url = str_replace(“?ab_cc=1”, “”, $url);
    $url = str_replace(“&ab_cc=1”, “”, $url);
    $url = str_replace(“?ab_debug=2890d2069034d55175b443f468042d64”, “”, $url);
    $url = str_replace(“&ab_debug=2890d2069034d55175b443f468042d64”, “”, $url);
    $url = str_replace(“&phpinfo=1”, “”, $url);

    return $url;

    }

    //Get page
    function abGetPageUrl($debug=false) {

    $query = “”;
    $protocol = (isset($_SERVER[‘HTTPS’]) && strtolower($_SERVER[‘HTTPS’]) != “off”) ? “https://” : “http://”;
    $host = $_SERVER[‘HTTP_HOST’];
    $page = null;

    if (isset($_SERVER[“REDIRECT_URL”]) && !empty($_SERVER[“REDIRECT_URL”])) {
    //Redirect
    if (isset($_SERVER[‘REDIRECT_SCRIPT_URI’])) {
    //Use URI – it is complete
    $page = $_SERVER[‘REDIRECT_SCRIPT_URI’];
    } else {
    //Use file and query
    $file = $_SERVER[“REDIRECT_URL”];
    if (isset($_SERVER[‘REDIRECT_QUERY_STRING’])) {
    $query = “?”.$_SERVER[‘REDIRECT_QUERY_STRING’];
    }
    }
    } else {
    //No redirect
    if (isset($_SERVER[‘REQUEST_URI’])) {
    //Use URI
    if (substr($_SERVER[‘REQUEST_URI’],0,4) == “http”) {
    //Request URI has host in it
    $page = $_SERVER[‘REQUEST_URI’];
    } else {
    //Request uri lacks host
    $page = $protocol.$host.$_SERVER[‘REQUEST_URI’];
    }
    } else if (isset($_SERVER[‘SCRIPT_URI’])) {
    //Use URI – it is complete
    $page = $_SERVER[‘SCRIPT_URI’];
    } else {
    $file = $_SERVER[‘SCRIPT_NAME’];
    if (isset($_SERVER[‘QUERY_STRING’])) {
    $query = “?”.$_SERVER[‘QUERY_STRING’];
    }
    }
    }
    if (empty($page)) {
    $page = $protocol.$host.$file.$query;
    }

    $page = abTrimAbVars($page);

    echo ($debug) ? “

  • This page is reported as: “.$page : “”;

    return $page;

    }

    //Show phpinfo if debug is on and phpinfo is requested
    if ($debug && !empty($_GET[‘phpinfo’]) && $_GET[‘phpinfo’]) {

    ?>

    getLinks();
    ?>