Autor | Zpráva | ||
---|---|---|---|
midlan Profil |
Ahoj,
na localhostu mi autoloading funguje bezvadně, ale na serveru nikoliv. Vyzkoušel jsem už snad všechny můžné způsoby, ale žádný nefunugje. Už mě napadá jen, že to může být rozdílností webserverů. Na localhostu mám windows PHP 5.3.13 jako modul apache, na serveru máme linux nginx a PHP 5.5.2 jako FastCGI. Vytvořil jsem testovací skript, na localhostu funguje přesně podle očekávání. Ke stažení zde. Pro ty co nechtějí stahovat, obsah spouštěcího skriptu: <?php header('Content-Type: text/html; charset=UTF-8'); set_include_path('.'.DIRECTORY_SEPARATOR.'libs'); echo 'Sucessfuly registred: '; var_export(spl_autoload_register()); echo '<br />'; $obj = new Trida; $obj->ahoj(); Ve složce se spouštěcím skriptem je složka "libs" a v ní soubor Trida.php, jeho obsah: <?php echo 'Class file was sucessfully loaded!<br />'; class Trida { public function ahoj() { echo "metoda ahoj<br />"; } } výstup skriptu na serveru je následující: Sucessfuly registred: true Fatal error: spl_autoload(): Class Trida could not be loaded in /usr/share/webapps/dev-midlan/run.php on line 10 EDIT: ještě doplním, že include path se nastavuje také úspěšně (po zavolání get_include_path() vrací tu, která byla nastavena)
|
||
abc Profil |
#2 · Zasláno: 27. 8. 2013, 23:38:37
Nevím, zda to takto lze nebo ne, ale připadá mi to jako nesmysl.
Proč to neuděláš stejně jako je to v Example 1 v dokumentaci? http://cz2.php.net/function.spl_autoload_register |
||
Davex Profil |
#3 · Zasláno: 27. 8. 2013, 23:42:12
midlan:
„Ve složce se spouštěcím skriptem je složka "libs" a v ní soubor Trida.php“ Zkus soubor Trida.php přejmenovat na trida.php s malým t na začátku. |
||
juriad Profil |
midlan:
Zapomněl jsi uvést, že ukázka funguje na Windows (nerozlišuje velikost písmen), ale ne na Linuxu (na veliksti záleží). Podle dokumentace spl_autoload dostává funkce název třídy malými písmeny. Zmiňuje to někdo i v komentáři http://cz2.php.net/manual/en/function.spl-autoload.php#98762 |
||
midlan Profil |
#5 · Zasláno: 27. 8. 2013, 23:53:02 · Upravil/a: midlan
abc:
Nesmysl to není, lépe si prostudujte dokumentaci, kterou jste sám zaslal. Davex: juriad: Máte oba pravdu, je to tím velkým písmenem. Měl jsem zato, že jsem otestoval i tohle. juriad: „Zapomněl jsi uvést, že ukázka funguje na Windows (nerozlišuje velikost písmen), ale ne na Linuxu (na veliksti záleží).“ Na localhostu mám windows PHP 5.3.13 jako modul apache, na serveru máme linux nginx a PHP 5.5.2 jako FastCGI. Bylo by možné nějakým způsobem tu velikost písmen zachovat? Přecijen u složených názvů tříd je to přehlednější. |
||
juriad Profil |
#6 · Zasláno: 28. 8. 2013, 00:04:06
midlan:
Ou, to se omlouvám; hlavně, že jsem si přečetl a porovnal verze PHP a HTTP serverů :) Zachovat velikost písmen nejspíš nepůjde; ta funkce je podle komentáře z důvodu rychlosti implementovaná přímo v C a tam nemáš šanci ji nějak pozměnit (bez kompilace vlastní opatchované verze PHP). Ale mohl bys po vzoru odkázaného komentáře přidávat například podtržítko před každé neprvní velké písmeno v původním názvu třídy. Takže třída PejsekAKocicka by byla v souboru pejsek_a_kocicka.php |
||
midlan Profil |
juriad:
To je škoda. Moc nechápu proč to autor té funkce udělal takhle :( S těmi podtržítky by to nešlo, protože funkce spl_autoload nejenže hledá soubor s tím názvem, ale po načtení toho souboru si ověřuje i existenci požadované třídy (název třídy musí odpovídat názvu souboru). Navíc se mi to nelíbí. Budu se muset spokojit se zmenšenými názvy souborů. |
||
Časová prodleva: 11 let
|
0