Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Jak ošetřit absolutní cesty includů v souboru, který je includovaný z presenteru

Aktivity
Avatar
Štěpán
Člen
Avatar
Štěpán:9.8.2018 18:43

Nový projekt v nette, ve kterém potřebuju používat starý systém v php (asi 600 historických souborů, časté requiry). Přistupuju do něj z presenteru, který se jmenuje Old:

class OldPresenter extends BasePresenter {

        private $oldContent='';

        public function renderDefault() {

                $this->template->oldContent= $this->oldContent;
        }

        public function actionDefault($file='index',$folder= null) {

                if($folder!== null)
                {

                        $folder.='/';
                }
                require "../vendor/old/{$folder}{$file}.php";
                $this->oldContent=$homepage->getOldContent();

                 $this->oldContent=Strings::replace($this->oldContent, [
                         '~\.php~i'=>'',
                        '~(["|\'])obr\/~'=>'\1/obr/'
                ]);
        }
}

Naštěstí v původním systému je třída hompage, která mi vrací obsah, co se má zobrazit. Nahrazuju si všechny odkazy na konkrétní skripty cestami k presenteru old, což mi funguje.
Původně to zobrazovalo cestu k souboru neco.php a já to nahradím na /old/neco, router to převede na /old/?file=neco a já to muzu includovat.

$router[] = new Route('/old[/<folder>]/<file>', array(
                                        'presenter' => 'Old',
                                        'action'        => 'default'
                                        ), Route::ONE_WAY);

Problém je, že každý skript z těch asi 800 na začátku má require('requ­ire.php'), ve kterém se načítají základní třídy, funkce apod. U skriptů, které jsou ve složce /vendor/old a mají require('requ­ire.php') je vše ok, ale pokud se jedná o jinou složku /vendor/old/slozka, všechny skripty tam mají require ('../require.php');
laděnka píše
require(../re­quire.php): failed to open stream: No such file or directory.

Asi proto, že includovaný skritpt je v nette soubor www/index.php a ne /vendor/old/sloz­ka/neco.php

Nenapadá prosím někoho, jak to ošetřit, těch souborů v těch složkách jsou stovky a ty includy nejsou jen na začátku a na ten jeden soubor.
Díky
Š+

Odpovědět
9.8.2018 18:43
Nikdy není člověk starý na to, aby se stal dobrým v tom, co ho baví.
Avatar
Štěpán
Člen
Avatar
Štěpán:9.8.2018 18:49

Ještě doplním, že jsem v zoufalství zkoušel v tom původním skriptu změnit require(../re­quire.php): na require(requi­re.php) i require(../../re­quire.php): a stejná hláška, že soubor neexistuje.:)

Nahoru Odpovědět
9.8.2018 18:49
Nikdy není člověk starý na to, aby se stal dobrým v tom, co ho baví.
Avatar
Štěpán
Člen
Avatar
Štěpán:9.8.2018 19:00

Tak jsem na to přišel nakonec sám:)

if($folder!== null)
{
        chdir("../vendor/old/$folder/");
}
else
{
         chdir("../vendor/old/");
}
require "{$file}.php";
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
9.8.2018 19:00
Nikdy není člověk starý na to, aby se stal dobrým v tom, co ho baví.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.