ugrás a tartalomhoz

Smarty telepítés

Fedor · 2005. Nov. 10. (Cs), 23.36
Sziasztok!

Odaadták egy Smarty-t használó site anyagát, hogy folytassam, de egyelőre nem tudom a localhostomon megnyitni. Eddig még nem használtam Smarty-t, így az üzembehelyezése nem egészen tiszta számomra. A következő hibaüzenet jött:

"Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist, or is not a directory. in c:\localhost\smarty\libs\Smarty.class.php on line 1088"

A könyvtár létezett, viszont elvileg meg kellett volna adni a 777-es jogot ennek a könyvtárnak a leírás szerint. Erről nem sokat tudtam, de utánéztem, és az alábbi kódot találtam:

<?php
 $oldumask = umask(0);
 mkdir('dirname', 0777);
 umask($oldumask);
?>
Töröltem a könyvtárat, és ennek a segítségével hoztam létre újra, ennek ellenére maradt a hibaüzenet a régi. Mi lehet a probléma?

Üdv,
Fedor
 
1

Elérési út

attlad · 2005. Nov. 11. (P), 00.19
Egészen biztos ott van az a könyvtár, ahol keresi a Smarty? Abszolút elérési utat adj meg. (Ja és Windows alatt az mkdir mode paraméterének meg a unixos jogoknak nincs nagyon értelme.)

Attila
2

(Ez minek?)

sajt · 2005. Nov. 11. (P), 02.19
Nezzd meg, hogy a program hogyan allitja be a template_c konyvtarat. Valszeg ez a gond, hogy nem ott van, ahova szamitod. Esetleg mas.

--
Ámon Tamás - http://amon.hu
3

Esetleg más...

Fedor · 2005. Nov. 11. (P), 09.30

require('../smarty/libs/Smarty.class.php');

$smarty = new Smarty;

$smarty->template_dir = 'template';
$smarty->compile_dir = '../smarty/templates_c';
$smarty->config_dir = 'config';
$smarty->cache_dir = '../smarty/cache';
Szerintem jó helyen keresi.

Ebből a leírásból indultam ki:

http://news.php.net/php.smarty.dev/2703

Kipróbáltam közvetlen elérés megadásával is:

$smarty->template_dir = 'template';
$smarty->compile_dir = 'c:/localhost/smarty/templates_c';
$smarty->config_dir = 'config';
$smarty->cache_dir = 'c:/localhost/smarty/cache';
Az eredmény ugyanaz... nem tudom, hogy mit szúrhatok el, a smarty-n belül van egy demo könyvtár, az abban lévő cucc simán lefut...

Ezzekkel az elérési beállításokkal, írási jogokkal kapcsolatban bizonytalan vagyok, ha Windows XP-m van, és rajta Apache, akkor mit tegyek?

Üdv,
Fedor
4

nézd mit használ a Smarty!

Hojtsy Gábor · 2005. Nov. 14. (H), 00.01
Nos, itt a Smarty, szép nyílt forrású program. Nem rejtély, hogy mit csinál, meg lehet nézni. Szépen meg kell keresni a kódjában, hogy a Smarty error: the $compile_dir... hibaüzenetet hol generálja (szöveg keresés). Amint megvan, ott előtte látni fogod, hogy pontosan milyen patht használ fel (könnyen lehet, hogy a beállításodtól eltérő értékkel dolgozik, mondjuk normalizálta). Azaz még nem fogod látni, csak a kódot, ami felhasználja. Namost itt ideiglenesen belepiszkíthatsz, és kiirathatod, hogy mivel próbálkozik.

Ha ennek tényleg csak annyi az értéke, hogy 'templates_c', akkor a te inicializálásodhoz képest valami mást használ, azt kell megkeresned, hogy hol kezeli a változót, amit felhasználnál, ha nem azt használja, amit megadtál, akkor hol írja át, vagy miért használ mást. Ezek szöveg keresések a fájlban.

Nem úgy kellene tekinteni a Smartyra, mint egy fekete dobozra. Konkrét választ nem tudok adni, de valószínű, hogy különben is a módszert próbálnám megvilágítani, amivel rájöhetsz magadtól. Jobban jársz. Irány a szöveges keresés!
5

Ezt már próbáltam...

Fedor · 2005. Nov. 14. (H), 09.40
Természetesen ennyi süsükém nekem is van, azon már túl vagyok, hogy a smarty könyvtáron belül rákeressek mind a templates_c, mind a $compile_dir kifejezésre, de nem lettem okosabb, mindenhol az szerepel, hogy rakjam a templates_c könyvtárat a Smarty könyvtárba. Ott van, sőt próbáltam már az oldal anyagának a könyvtárába is rakni.

Üdv,
Fedor
6

Süsüke

Hojtsy Gábor · 2005. Nov. 14. (H), 12.41
Programozónak gondolod magad? Akkor talán itt lenne az ideje, hogy a fenti tanácsaim szerint ne a dokumentáció alapján várj el dolgokat, hanem belenyúlj a kódba! Hogyan fogalmazzam meg, hogy világos legyen? Itt van a fenti tanács sorozat egy kicsit konkrétabban, részben már utánaznéztem a problémád megoldásának.

Megkerestem neked a hiba forrását, a libs/internals/core.write.compiled_resource.php fájlban van a huszadik soron. Ez nem működik. Nem érdekel minket a dokumentáció, az izgat bennünket, hogy hogyan jön elő a hiba. A függvényben az is_dir() és az is_writable() hívás sem ad igazat. Tegyünk a két if elé egy kiíró kódot, mondjuk echo $smarty->compile_dir;, úgyis erre vagyunk kíváncsiak. Webfelületen újratöltve a programunkat ellenőrizzük, hogy ugyanaz az érték, amit mi a kódban megadtunk. Ha nem, akkor gyanús, mert valahol fel van dolgozva. Hasonló módon meg kell keresni, hogy hol. Ha mégis ugyanaz, mint amit megadtunk, akkor javítsuk ki a hibaüzenetet, és mint az alatta lévő hibaüzenetben, realpath() hívásba burkoljuk a compile_dir részt. Menjünk vissza a web felületre, és immár lássuk a teljes elérési utat, ahol a Smarty keresi, és ismerjük fel, hogy egyáltalán nem ott keresi, mint ahol gondoltuk volna. Javítsuk az inicializáló kódunkat.
7

Kezdő Süsüke...

Fedor · 2005. Nov. 14. (H), 14.43
Kezdő programozónak tartom magam, aki nem a programozói világból érkezett a php világába, hanem a hobbi html szerkesztésből indult, és megpróbálja folyamatosan, munka mellett bővíteni az ismereteit, és most épp egy totál új dologgal találta magát szembe. Miből induljak ki, ha nem a leírásokból?

Amúgy lehet, hogy félreérthető voltam, de persze nem csak a dokumentációban kerestem, hanem a forráskódban is, így magamtól is eljutottam odáig, hogy megpróbáljam kiiratni abban a fájlban, amit te is említesz, csak sikertelenül, rossz helyen nyúltam valószínűleg bele. Viszont nem is volt rá utána szükség, mert új ötletként megpróbáltam azt is, hogy kitöröltem az útvonalmeghatározásokat, és a templates_c könyvtárat beraktam a projektkönyvtárba. Így működik, csak épp nem úgy, ahogy elvileg a leírás szerint kéne. :-(

Üdv,
Fedor