» »

[PHP] Composer ne najde/vključi razreda izven vendor mape

[PHP] Composer ne najde/vključi razreda izven vendor mape

krenpac ::

Naletel sem na problem, ki ga rešujem že zadnji 2 uri in enostavno ne najdem rešitve.

Uporabljam composer, vse vključene knjižice, ki so znotraj vendor mape, se lepo vključijo na stran. Ročno sem še ustvaril nekaj razredov znotraj mape controllers in teh mi pa ne vključi in ne vključi. :( Na localhost (windows) mi vse deluje 100% brez težav, ko presnamem na strežnik (linux) pa ne deluje.

Še koda...

Torej, bom poskusil biti izčrpen, če kdo potrebuje še kak podatek, naj kar vpraša.

Struktura map
..domains/stran.com/private_html/app/controllers/mainsite (tu notri so controllers, npr. HomeController.php itd. - jih ne morem vključiti)
..domains/stran.com/vendor/ (pač vključene knjižice - jih brez težav vključim)

Del vsebine, vrnejno polje, mape autoload_psr4.php (..domains/stran.com/vendor/composer/autoload_psr4.php)
...
'Twig\\' => array($vendorDir . '/twig/twig/src'), <- deluje 
'Controllers\\' => array($baseDir . '/app/controllers'), <- ne deluje
..


Če dumpam autoload.php...

...

["Controllers\"]=>
    array(1) {
      [0]=>
      string(71) "/home/*/domains/*.com/vendor/composer/../../app/controllers"
    }
...

Torej naj bi bila prava mapa "/home/*/domains/*.com/app/controllers" in dejansko to tudi je prava mapa ampak mi PHP kljub temu javi spodnjo napako...

[Tue Jul 11 14:32:09.901844 2017] [fcgid:warn] [pid *:tid *] [client *] mod_fcgid: stderr: PHP Fatal error:  Uncaught Error: Class 'Controllers\\MainSite\\HomeController' not found in /home/*/domains/*.com/init/boostrap.php:211


In naj še enkrat omenim, na localhost vse deluje 100% brez težav, na strežniku pa noče in noče pa sem spremenil že 1001 stvar in sploh ne vem več kaj naj še spremenim, ker meni se zdi, da bi enostavno moralo delati ampak ne deluje zato vas lepo prosim za pomoč.
  • spremenilo: krenpac ()

krenpac ::

Classe vključujem preko call_user_func_array() ampak to tako ne spremeni ničesar. Tudi, če jih vključim ročno, mi izpiše zgornjo napako. Torej težava je nekeje v tem frdamanem autoload.php, ker ne najde prave poti do class-a, pa čeprav se meni zdi, da je pot čisto prava + kot sem že omenil, koda na localhost deluje :/

Zgodovina sprememb…

  • spremenilo: krenpac ()

usoban ::

..domains/stran.com/private_html/app/controllers/mainsite


in
/home/*/domains/*.com/vendor/composer/../../app/controllers


mi ne izgledata enaki poti (kje se je izgubil private_html?)

Ce ti zadeva deluje lokalno, na serverju pa ne, se 3x preveri ce poti klapajo.

krenpac ::

usoban je izjavil:


..domains/stran.com/private_html/app/controllers/mainsite


in

/home/*/domains/*.com/vendor/composer/../../app/controllers


mi ne izgledata enaki poti (kje se je izgubil private_html?)



Tudi nista in prav je tako. Vendor, controllerji, models... itd. so izven "public/private" mape zaradi varnosti (tako imajo urejeno tudi vsi php frameworki, da se onemogči neposredni dostop).


usoban je izjavil:



Ce ti zadeva deluje lokalno, na serverju pa ne, se 3x preveri ce poti klapajo.



Preveril poprek in počez in sem že omenil, da se mi zdi, da je pot enostavno pravilna, čeprav PHP javi napako. Sem se še malo igral z namespaces in potmi z metodo ddPsr4() https://getcomposer.org/doc/01-basic-us... (čisto spodaj) ampk ni bilo sprememb. Mi je pa nekako uspelo locirati napako, rešitve še nisem našel. Očitno je težava spodaj (in ne v poteh, ki so očitno pravilne)...

Torej spodnje NE DELA

$class='Controllers\MainSite\HomeController';
$method = 'index';
call_user_func_array(array(new $class, $method), ...$vars);


Tole PA DELA (če ročno vpišem)

call_user_func_array(array(new Controllers\Mainsite\HomeController, 'index'), ...$vars);


??? Na localhost eno in drugo dela, na strežniku dela le prva verzij. Kakšna ideja, kako zgornje popraviti, da bo delalo tudi strežniku? Imam routing, tako da ročno vpisovanje jasno odpade. Potrebujem delujočo 1. rešitev. Pa če mogoče kdo ve, me zanima, zakaj zaboga sploh 1. verzija na strežniku ne deluje? Meni res ni jasno.

Zgodovina sprememb…

  • spremenilo: krenpac ()

krenpac ::

Ker ne morem več urejati sporočila, na STEŽNIKU DELUJE LE 2. VERZIJA, potrebujem pa delujoči 1.

krenpac ::

Ker se mi očitno že malo blede, bom raje dal kar printscreene.

Torej, za demo sem ustvaril 3 instance istega class. Zdaj pa poglejte to, ko pokličem vse tri, tretja instanca deluje, če pokličem samo 3., pa ne deluje. Meni se res že malo meša. A vidi kdo kje je napaka? 2. primer se loči od 1. le po tem, da sem prvi dve instanci zakomentiral, nič drugega (pa ne spreglejte exit() -> call_user_fun_array() se ne kliče).

WTF?

1. primer



Vse ok, v logu ni nobenega poročila o napakah.

2. primer (le prvi dve instanci sem zakomentiral)



Napaka iz loga...

[Wed Jul 12 09:38:48.062545 2017] [fcgid:warn] [pid .:tid .] [client .] mod_fcgid: stderr: PHP Fatal error: Uncaught Error: Class 'Controllers\\MainSite\\HomeController' not found in /home/./domains/..com/init/boostrap.php:244

Zgodovina sprememb…

  • spremenilo: krenpac ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

ios swift 1.2

Oddelek: Programiranje
311696 (1102) detroit
»

SMS iz linuxa

Oddelek: Pomoč in nasveti
444721 (2277) Apple
»

Magento - Sistem ne pošilja email-ov

Oddelek: Izdelava spletišč
9937 (756) BlueBerry
»

[Android]Cudno obnasanje aplikacije in emulatorja

Oddelek: Programiranje
71302 (1131) KernelPanic
»

Skripta easyfeeder in vključevanje novic

Oddelek: Izdelava spletišč
8959 (919) Bela01

Več podobnih tem