Zobrazení revize projektu v PHP

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ascaria
Člen | 187
+
0
-

Zdravím,

jak můžu ve svém projektu přistoupit k aktuální revizi v NetBeansech jen pomocí PHP? Jde mi o to, aby se v patičce webu automaticky zobrazovala verze a nemusel bych se o ni starat…

Filip Procházka
Moderator | 4668
+
0
-

To není dobrý nápad. Tím že odhalíš konkrétní verzi, dáváš útočníkovi munici. Může si totiž dohledat jaké chyby obsahuje nástroj v dané verzi. Představ si, že by se objevily fatální chyby v Nette a ty bys ten projekt neaktualizoval. Pak by útočník nemusel vůbec zkoušet, co ti tam běží, ale rovnou by přešel k přesným typům útoků.

Proto se vypíná zobrazování verze PHP a Apache/nginx v patičkách chybových zpráv, co generuje server.

Nedělej to.

Ascaria
Člen | 187
+
0
-

Děkuji za upozornění. Přes to bych však rád měl v administraci webu nějaké číslo, co se každým komitem zvýší. Hyperaktivní klient často testuje web dřív, než nahrajeme změny, a dělá potom zbytečně problémy kvůli opraveným chybám.

Filip Procházka
Moderator | 4668
+
0
-

Ovšem v zabezpečené části administrace to problém určitě není :)

Revize použitého Nette máš zde. Úplně nejlepší je nastavovat nějakou konstantu při deployi, kterou pak snadno zobrazíš (dělá to tak i Nette).

Ascaria
Člen | 187
+
0
-

To by bylo super, akorád to v NetBeansech+Mercurial nemůžu najít kde to nastavit. :(

Filip Procházka
Moderator | 4668
+
0
-

Nette na to má build script

Ascaria
Člen | 187
+
0
-

Ten se mi zdá jako dost overkill na to že potřebuju vložit pár znaků… Hold dokud nenarazím na něco primitivního jak to zapisovat, tak to budu dělat ručně :X

voda
Člen | 561
+
0
-

Tak lze to udělat i jedním příkazem:

sed "s/\$VERSION\$/`hg identify`/" path/to/file.php
Filip Procházka
Moderator | 4668
+
0
-

Pokud máš git repozitář přístupný i na webu a používáš push-deploy (nebo pull-deploy) tak ti může stačit si stáhnout libovolnou třídu na práci s gitem a vypisovat cachované git log -n 1

Ascaria
Člen | 187
+
0
-

Nemám git a hg identify nevrací revizi ale složitě a dlouze počítá hash.

Do hgrc jsem zkusil nandat hook:

[hooks]
commit = echo committed $HG_NODE > web/temp/hook

Soubor to správně vytvoří, nicméně to nechce nahrazovat tu proměnnou, takže jsem jen v půlce.

Editoval Ascaria (17. 4. 2012 17:15)

Ascaria
Člen | 187
+
0
-

Tak se mi to podařilo vyřešit. Kdo by chtěl jednoduše zobrazovat verzi v administraci a používá NetBeans + Mercurial, může se inspirovat v následující metodě:

/**
 * Gets version revision.
 * @return Int
 */
public static function getRevision()
    {
    if(self::$revision === 0)
        {
        /*
        Soubor hgrc:
        [hooks]
        commit = hg tip > web/temp/changeset
        */
        // Cesta k souboru s changesetem, pokud existuje, vytáhneme z něj revizi
        $file = __DIR__.'/../../temp/changeset';
        if(is_file($file))
            {
            // Načteme si první rádku souboru
            $f = fopen($file, 'r');
            $line = fgets($f);
            fclose($f);
            // První číslo je revize "changeset:   71:fcfa26a6d5f4" a pokud bylo nalezeno, zapíše se do $revision
            if(preg_match('/[0-9]+/', $line, $matches) > 0)
                self::$revision = current($matches);
            }
        }
    return self::$revision;
    }

Soubor je potřeba jen nasměrovat například do složky temp v projektu. Soubor hgrc lze editovat např v TortoiseHg Workbenchi jako project settings > editace souboru, nebo přímo v „projectdir/.hg/hgrc“.

Hodinám luštění a ztraceným nervům zdar.

Editoval Ascaria (17. 4. 2012 19:41)

!Lukas7
Člen | 4
+
0
-

Díky, řešil jsem podobný problém.