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í
×
    dnes 11:55 | Nová verze

    Open-source citační manažer Zotero (Wikipedie, GitHub) byl vydán v nové major verzi 10. Přehled novinek v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    dnes 00:44 | Nová verze

    Interaktivní editor binárních dat GNU poke byl vydán ve verzi 5.0 (seznam změn).

    |🇵🇸 | Komentářů: 8
    včera 18:55 | Nová verze

    Byla vydána verze 0.85 telnet a ssh klienta PuTTY (Wikipedie). Řešeno je 5 zranitelností.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | Zajímavý článek

    Byly publikovány novinky z vývoje GIMPu. Pracuje se na novém formátu souborů. Stávající binární XCF bude nahrazen "zazipovaným XML". XCF zůstane plně podporován pouze pro načítání starých souborů.

    Ladislav Hagara | Komentářů: 7
    včera 12:33 | Zajímavý projekt

    Workshop o umělé inteligenci v Dartmouthu proběhl před 70 lety, od 18. června do 17. srpna 1956. Dvouměsíční soustředění 6–11 informatiků, iniciované Johnem McCarthym, položilo základy oboru umělé inteligence.

    |🇵🇸 | Komentářů: 4
    včera 03:00 | Nová verze

    Po 9 týdnech vývoje od vydání Linuxu 7.1 oznámil Linus Torvalds vydání Linuxu 7.2. Podrobný přehled novinek a vylepšení na Linux Kernel Newbies nebo LWN.net: první a druhá polovina začleňovacího okna.

    Ladislav Hagara | Komentářů: 1
    16.8. 18:55 | Komunita

    Debian dnes slaví 33 let. Ian Murdock oznámil vydání "Debian Linux Release" 16. srpna 1993.

    Ladislav Hagara | Komentářů: 1
    16.8. 04:22 | Komunita

    Probíhá hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu mají na výběr 9 možností (návrhy A až H a žádný z nich).

    Ladislav Hagara | Komentářů: 0
    16.8. 01:22 | Nová verze

    Omarchy je linuxová distribuce s dlaždicovým správcem oken Hyprland. Založena je na Arch Linuxu. Vydána byla v nové major verzi 4.0.0 - The Quattro Release. Videopředstavení na YouTube. Celý desktop shell byl přepsán do Quickshellu. Přidána byla podpora pluginů.

    Ladislav Hagara | Komentářů: 1
    15.8. 13:33 | IT novinky

    Francouzská Ústavní rada zamítla zákaz používání sociálních sítí dětem mladším 15 let. Francouzská obdoba ústavního soudu uvedla, že opatření představuje nepřiměřený zásah do svobody projevu. Francouzský parlament zákaz schválil na konci července, začít platit měl od září. Šlo o první zákaz sociálních sítí pro děti v Evropě. Členové Ústavní rady se domnívají, že ustanovení „představuje zásah, který není přiměřený, nezbytný ani

    … více »
    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (2%)
     (18%)
     (30%)
     (7%)
     (6%)
     (2%)
     (15%)
     (22%)
    Celkem 2414 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    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: 636×

    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.