abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:55 | Zajímavý projekt

    Společnost Hugging Face ve spolupráci se společností Pollen Robotics představila open source robota Reachy Mini (YouTube). Předobjednat lze lite verzi za 299 dolarů a wireless verzi s Raspberry Pi 5 za 449 dolarů.

    Ladislav Hagara | Komentářů: 4
    11.7. 16:44 | Komunita

    Dnes v 17:30 bude oficiálně vydána open source počítačová hra DOGWALK vytvořena v 3D softwaru Blender a herním enginu Godot. Release party proběhne na YouTube od 17:00.

    Ladislav Hagara | Komentářů: 3
    11.7. 14:55 | Humor

    McDonald's se spojil se společností Paradox a pracovníky nabírá také pomocí AI řešení s virtuální asistentkou Olivii běžící na webu McHire. Ian Carroll a Sam Curry se na toto AI řešení blíže podívali a opravdu je překvapilo, že se mohli přihlásit pomocí jména 123456 a hesla 123456 a získat přístup k údajům o 64 milionech uchazečů o práci.

    Ladislav Hagara | Komentářů: 15
    11.7. 00:11 | Nová verze

    Byla vydána (𝕏) červnová aktualizace aneb nová verze 1.102 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.102 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    10.7. 21:00 | Bezpečnostní upozornění

    Byla vydána nová verze 2.4.64 svobodného multiplatformního webového serveru Apache (httpd). Řešeno je mimo jiné 8 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 4
    10.7. 15:22 | Nová verze

    Společnost xAI na síti 𝕏 představila Grok 4, tj. novou verzi svého AI LLM modelu Grok.

    Ladislav Hagara | Komentářů: 12
    10.7. 12:55 | Bezpečnostní upozornění

    Ministerstvo vnitra odhalilo závažný kyberincident v IT systému resortu. Systém, do kterého se dostal útočník bez oprávnění, byl odpojen a nedošlo k odcizení dat [𝕏].

    Ladislav Hagara | Komentářů: 16
    10.7. 11:55 | Humor

    Před rokem byla streamovací služba HBO Max přejmenována na Max. Dle managementu slovo HBO v názvu nebylo důležité. Včera byl Max přejmenován zpět na HBO Max. Kolik milionů dolarů to stálo? 😂

    Ladislav Hagara | Komentářů: 16
    10.7. 02:11 | Nová verze

    Byla vydána nová major verze 8.0.0 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata (Wikipedie). Přehled novinek v oficiálním oznámení a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    10.7. 01:11 | Nová verze

    Mastodon (Wikipedie) - sociální síť, která není na prodej - byl vydán ve verzi 4.4. Přehled novinek s náhledy a videi v oznámení na blogu.

    Ladislav Hagara | Komentářů: 1
    Jaký je váš oblíbený skriptovací jazyk?
     (59%)
     (27%)
     (7%)
     (3%)
     (1%)
     (1%)
     (4%)
    Celkem 391 hlasů
     Komentářů: 16, poslední 8.6. 21:05
    Rozcestník

    Dotaz: PHP: include konfigurace v prilinkovanem adresari

    15.10.2009 11:22 ph0enix | skóre: 18 | Praha
    PHP: include konfigurace v prilinkovanem adresari
    Přečteno: 428×

    Ahoj, v jednom projektu jsem dospel do stavu, ze mam sadu skriptu pro zobrazovani statistickych dat jenz jsou stejne pro vice instanci a vystup je ovlivnovan pouze nastavenim konfiguracnich promennych. Dal jsem vsechny tyto soubory do samostatneho adresare a vytvoril na nej symbolicky odkaz. V tuto chvili ale resim jak spravne a elegantne vyresit nacitani konfigurace z nadrazeneho adresare.

    proj1/
      config_vars.php
      stats => ../common/stats/
    proj2/
      config_vars.php
      stats => ../common/stats/
    common/stats/
      index.php
    

    Bohuzel pokud v takto umistenem skriptu /proj1/stats/index.php chci nacist projektove specifickou konfiguraci pomoci include('../config_vars.php'), je tento soubor hledan v adresari common namisto proj1. Pokud vytvorim adresar stats a nalinkuji jednotlive skripty, vse funguje jak ocekavam. Touto cestou se vsak nechci ubirat nebot projektovych adresaru je k desitce a pocet skriptu jde take do desitek.

    Mate nejaky napad jak to elegantne vyresit?


    Řešení dotazu:


    Odpovědi

    15.10.2009 21:20 12345 | skóre: 41 | blog:
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari
    include dirname($_SERVER['SCRIPT_FILENAME']) . '/../config_vars.php';

    ?
    16.10.2009 10:22 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    To bohuzel nefunguje. Je to ekvivalentni k include('../config_vars.php');. Pri pouziti teto konstrukce je nacten soubor /common/config_vars.php namisto ocekavaneho /proj1/config_vars.php (pokud se se ke skriptu pristupuje pres link v adresari proj1. Vypada to, ze nejprve se nahradi link a pak v takto ziskanem adresari udela krok do nadrazeneho adresare ve kterem hleda pozadovany soubor.

    16.10.2009 10:44 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    Zrejme jsem neco nepochopil... Shell se chova naprosto stejne. Pokud se nastavim do proj1 tak pozadavek na editaci souboru

    vi ./stats/../config_vars.php

    otevre soubor config_vars.php z adresare common namisto z proj1. Tedy jako by nahradil link fyzickym umistenim tj.

    vi ./../common/stats/../config_vars.php

    Muze mi to nekdo znalejsi vysvetlit? Toto chovani je pro mne docela neprijemnym prekvapenim.

    16.10.2009 14:06 chochi | skóre: 29 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari
    Sice se toto chovani muze zda divnem, ale ve skutecnosti je jedine spravne. Problem totiz je ze konstrukce ".." neznamena nadrazeny adresar jak je uveden v ceste, ale znamena adresar, kteri je v aktualni adresari ulozen v souborovem system jako parent. Pr:
    chocholj@cz995891 r $ ls -laRi
    .:
    total 16
    4723576 drwxr-xr-x 4 chocholj users 4096 2009-10-16 14:56 .
    4723905 drwxr-xr-x 30 chocholj users 4096 2009-10-16 14:56 ..
    4732494 drwxr-xr-x 3 chocholj users 4096 2009-10-16 14:56 aa
    4732737 drwxr-xr-x 2 chocholj users 4096 2009-10-16 15:00 bb

    ./aa:
    total 16
    4732494 drwxr-xr-x 3 chocholj users 4096 2009-10-16 14:56 .
    4723576 drwxr-xr-x 4 chocholj users 4096 2009-10-16 14:56 ..
    4732968 drwxr-xr-x 2 chocholj users 4096 2009-10-16 14:56 stats
    4732965 -rw-r--r-- 1 chocholj users 4 2009-10-16 14:56 txt

    ./aa/stats:
    total 8
    4732968 drwxr-xr-x 2 chocholj users 4096 2009-10-16 14:56 .
    4732494 drwxr-xr-x 3 chocholj users 4096 2009-10-16 14:56 ..

    ./bb:
    total 12
    4732737 drwxr-xr-x 2 chocholj users 4096 2009-10-16 15:00 .
    4723576 drwxr-xr-x 4 chocholj users 4096 2009-10-16 14:56 ..
    4139335 lrwxrwxrwx 1 chocholj users 11 2009-10-16 15:00 stats -> ../aa/stats
    4732967 -rw-r--r-- 1 chocholj users 4 2009-10-16 14:56 txt
    chocholj@cz995891 r $ ls -laRi bb/stats/
    bb/stats/:
    total 8
    4732968 drwxr-xr-x 2 chocholj users 4096 2009-10-16 14:56 .
    4732494 drwxr-xr-x 3 chocholj users 4096 2009-10-16 14:56 ..

    Oznacene adresare jsou vsechny stejne (pozna se to podle cisla inode):
    ./aa = ./aa/. = ./aa/stats/.. = ./bb/stats/..
    16.10.2009 11:18 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    Tak jsem to vyresil pomoci generovani kodu a volani eval(). Vytvoril jsem si funkce na normalizaci cesty a generovani PHP kodu jenz ulozi do zasobniku prave vkladany soubor, provede include a uklidi zasobnik. Pomocne funkce a inicializace zasobniku vypadaji nasledovne

    // oprava cesty
    function file_path_unify($param_filename) {
      $param_filename = str_replace('\\', '/', $param_filename);
      $param_filename = preg_replace('/\/+/', '/', $param_filename);
      $param_filename = str_replace('/./', '/', $param_filename);
      $param_filename = preg_replace('/\/[^\.\/]+\/\.\.\//', '/', $param_filename);
    
      return $param_filename;
    }
    // vygenerovani kodu pro include
    function get_relative_include($param_filename, $param_once = 0) {
      $result  = 'array_push($INC_STACK, file_path_unify(dirname($INC_STACK[count($INC_STACK) - 1]) . "/" . "' .
        $param_filename . '"));';
      if ($param_once) {
        $result .= 'include_once($INC_STACK[count($INC_STACK) - 1]);';
      } else {
        $result .= 'include($INC_STACK[count($INC_STACK) - 1]);';
      }
      $result .= 'array_pop($INC_STACK);';
    
      return $result;
    }
    
    // inicializace zasobniku volani
    $INC_STACK = Array($_SERVER['SCRIPT_FILENAME']);
    

    Ve vlastnim skriptu /proj1/stats/index.php pak konfiguracni soubor nactu pomoci

    eval(get_relative_include("../config_vars.php"));
    

    Takto mohu soubory vkladat ve vice urovnich zanoreni a ve vsech pouzivat relativni cesty k aktualne provadenemu souboru se zachovanim cesty pres kterou jsem se k souboru dostal a nikoliv k jeho fyzickemu umisteni na disku.

    16.10.2009 12:46 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari
    Nestacilo by dat nekam na zacatek ini_set('include_path', ini_get('include_path') . ':' . dirname($_SERVER['SCRIPT_FILENAME']));? Prijdeme mi trochu prasacke kvuli takovehle blbosti pouzivat eval.
    16.10.2009 14:45 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    To bohuzel nevyresi pozadavek na vlozeni souboru z nadrazeneho adresare. Taktez zrejme bude problem v pripade, ze soubor stejneho jmena je i v aktualnim adresari.

    Řešení 1× (ph0enix (tazatel))
    16.10.2009 16:42 12345 | skóre: 41 | blog:
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari
    Dostat se v cestě o jeden adresář výše přece jde i bez použití "..". Stačí třeba použít dirname dvakrát:

    include dirname(dirname($_SERVER['SCRIPT_FILENAME'])) . '/config_vars.php';

    IMHO je na tak jednoduchý problém zbytečné vymýšlet kejkle s nějakou globální proměnnou, *_replace a (chraň Tučňák!) eval :-)
    AraxoN avatar 16.10.2009 18:05 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    jj, eval() je zlo.

    K pôvodnej otázke: ja to riešim tak, že spoločné skripty sú len na jednom mieste, a odkaz na toto miesto sa napíše do configu.

    19.10.2009 09:34 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: PHP: include konfigurace v prilinkovanem adresari

    Tohle reseni mne nenapadlo. Diky.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.