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í.
Avatar
Snorlax
Tvůrce
Avatar
Snorlax:18.10.2014 19:18

Zdravím, potřeboval bych poradit s chybou:

Fatal error: Uncaught --> Smarty: unable to write file ./templates_c/wrt54429e6dd0ed41_72672801 <-- thrown in /.../Smarty-3.1.19/libs/sysplugins/smarty_internal_write_file.php on line 46

tady je kus onoho smarty_internal_wri­te_file.php:

 // write to tmp file, then move to overt file lock race condition
 $_tmp_file = $_dirpath . DS . str_replace(array('.', ','), '_', uniqid('wrt', true));
 if (!file_put_contents($_tmp_file, $_contents)) {
     error_reporting($_error_reporting);
     throw new SmartyException("unable to write file {$_tmp_file}"); //řádek 46
}

Na internetu jsem se toho moc nedočetl, pouze něco s oprávněními. Tak jsem je všelijak zkoušel. Bohužel ani 777 na celej localhost tomu nebyl dostačující. Někde jsem i zahlédl 755, ani ten nepomohl. Chyba v zdrojáku to zřejmě nebude, jelikož ten web na Windowsu fungoval a když jsem ho pak dal na Linux tak to tam háže tohle.
Ještě mi to házelo error

Warning: strftime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /.../Smarty-3.1.19/libs/sysplugins/smarty_internal_templatecompilerbase.php on line 244

tu ale opravilo dodání řádku date.timezone = Europe/Prague v php.ini

Budu rád za jakoukoliv radu, díky předem :)

Odpovědět
18.10.2014 19:18
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Richard:18.10.2014 19:40

Když si měnil práva, změnil jsi je rekurzivně? Tedy, mají všechny složky i podsložky 777? Tipnul bych že tomu souboru do kterýho to chce zapisovat správná práva chybí.

Ale obecně si na to šel špatně, měnit práva je chyba (a měnit práva na 777 šílenost). Oprávnění tam chybělo z nějakého důvodu.

Nahoru Odpovědět
18.10.2014 19:40
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:18.10.2014 19:58

Jo, dával jsem to, ještě jsem to kontroval. A ano, vím že je to šílenost, ale já sám jsem z toho už šílený :D

Nahoru Odpovědět
18.10.2014 19:58
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Odpovídá na Snorlax
Michal Štěpánek:18.10.2014 20:02

To, že ti to na Windowsech fungovalo ještě neznamená, že na Linuxu to bude běhat taky. Setkal jsem se s tím, že stejný kód na win byl OK a na Linuxu jsem byl v pr... jak Baťa s dřevákama. Zkontroluj si přístupová práva do toho konkrétního adresáře, kam chceš zapisovat a hlavně nedávej Full na celej Localhost.

Nahoru Odpovědět
18.10.2014 20:02
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Snorlax:18.10.2014 20:10

Co myslíš konkrétním adresářem? Struktura webu je:
Projekt

  • app

-- model
-- view (soubory .tpl)
-- controller

  • libs (tam je i to smarty)
  • www

-- index.php

Samozřejmě je větší, ale asi nebude problém ve složce s obrázky...

Editováno 18.10.2014 20:12
Nahoru Odpovědět
18.10.2014 20:10
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Odpovídá na Snorlax
Richard:18.10.2014 20:12

Práva na zápis musí být na ./templates_c/

To že práva na zápis jsou na localhostu je k ničemu, když zapisuješ jinam. Řekni Smarty ať si to zapisuje někam do adresáře projektu třeba a máš klid.

Editováno 18.10.2014 20:13
Nahoru Odpovědět
18.10.2014 20:12
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:18.10.2014 20:13

No takovou složku jsem právě že nenašel...

Nahoru Odpovědět
18.10.2014 20:13
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Odpovídá na Snorlax
Richard:18.10.2014 20:14

Zřejmě vůbec neexistuje - další důvod proč to nejde. Někde se určitě nastavuje kam to má zapisovat, tak to změň.

Nahoru Odpovědět
18.10.2014 20:14
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:18.10.2014 20:24

našel jsem Smarty-3.1.19/Smarty­.class.php:681
->setCompileDir('.' . DS . 'templates_c' . DS)

Ale nevím odkud to mám počítat. Od indexu? Od složky kde je ta knihovna?
Co vím tak tam ta složka doteď nebyla a nějak ho to moc netrápilo...

Nahoru Odpovědět
18.10.2014 20:24
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Odpovídá na Snorlax
Richard:18.10.2014 20:48

Vyzkoušej, buďto absolutní cestu, nebo cestu od toho souboru. Liší se to podle nastavení.

Co je v tom DS ?

Editováno 18.10.2014 20:50
Nahoru Odpovědět
18.10.2014 20:48
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:18.10.2014 20:54

"/" - DirSeparator

Nahoru Odpovědět
18.10.2014 20:54
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Odpovídá na Snorlax
Richard:18.10.2014 21:03

Asi bych odstranil tečku a navedl to kam potřebuju.. /var/www ...

Nahoru Odpovědět
18.10.2014 21:03
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:18.10.2014 23:28

Ani to nepomohlo. Dal jsem to do složky s indexem, ještě jsem tomu pro jistotu zas dal práva 777 a pořád nic :/

Nahoru Odpovědět
18.10.2014 23:28
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Richard:19.10.2014 0:50

A když do v tý složce vytvoříš soubor někde mimo smarty - v nějakým testovacím skriptu tak se to vytvoří?

Nahoru Odpovědět
19.10.2014 0:50
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:19.10.2014 1:05

počkat to nechápu, jak to myslíš?

Nahoru Odpovědět
19.10.2014 1:05
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Odpovídá na Snorlax
Richard:19.10.2014 1:34

No jde mi o to jestli má problém jenom smarty, nebo je problém jinde - vytvořit test.php a v něm duplikovat to co dělá smarty. Pokud to projde bez chyby je problém ve smarty, pokud ne, je problém v právech a něco si udělal blbě.

Nahoru Odpovědět
19.10.2014 1:34
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:19.10.2014 1:53

Tak jsem zkoušel jen načíst nějaký .tpl a nejde to. Dokonce ani demo v tom Smarty nefunguje :/ furt to hází tu samo chybu. Jediná změna je že ani když jsem tam nastavil tu absolutní cestu na tu mou vytvořenou složku tak to nefunguje.

Fatal error: Uncaught --> Smarty: unable to write file /var/www/html/.../www/templates_c/wrt5442fcd13c0395_64195805 <-- thrown in /var/www/html/.../libs/Smarty-3.1.19/libs/sysplugins/smarty_internal_write_file.php on line 46
Nahoru Odpovědět
19.10.2014 1:53
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Richard
Člen
Avatar
Richard:19.10.2014 2:13

Počkej, načíst? Nám jde o zápis ne?
Postní někam nastavení php/apache, jaký distro? Verze php? Co logy?

Nahoru Odpovědět
19.10.2014 2:13
$action = $_GET['Life']; | Když dáš mínus, napiš proč!
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na Richard
Snorlax:19.10.2014 11:42

Tak moje phpinfo() vypadá takhle, z něj si asi vše potřebné vyčteš :)

http://www.editey.com/…Q/index.html

A co se týče logů, tak tam nic zajímavého nenajdeš.
V error_log nic zajímavého není (nečekaně ty errory co jsem tu psal):
Třeba tě bude zajímat po zapnutí, jestli z toho něco zajímavého vyčteš:

[Sun Oct 19 11:03:02.458305 2014] [core:notice] [pid 1130] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Sun Oct 19 11:03:02.709444 2014] [suexec:notice] [pid 1130] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.0.0.44. Set the 'ServerName' directive globally to suppress this message
[Sun Oct 19 11:03:02.917028 2014] [auth_digest:notice] [pid 1130] AH01757: generating secret for digest authentication ...
[Sun Oct 19 11:03:02.919100 2014] [lbmethod_heartbeat:notice] [pid 1130] AH02282: No slotmem from mod_heartmonitor
[Sun Oct 19 11:03:07.037228 2014] [mpm_prefork:notice] [pid 1130] AH00163: Apache/2.4.10 (Fedora) PHP/5.5.17 configured -- resuming normal operations
[Sun Oct 19 11:03:07.037278 2014] [core:notice] [pid 1130] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Sun Oct 19 11:11:07.060336 2014] [core:notice] [pid 996] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Sun Oct 19 11:11:07.500655 2014] [suexec:notice] [pid 996] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 10.0.0.44. Set the 'ServerName' directive globally to suppress this message
[Sun Oct 19 11:11:07.754191 2014] [auth_digest:notice] [pid 996] AH01757: generating secret for digest authentication ...
[Sun Oct 19 11:11:07.755478 2014] [lbmethod_heartbeat:notice] [pid 996] AH02282: No slotmem from mod_heartmonitor
[Sun Oct 19 11:11:14.521663 2014] [mpm_prefork:notice] [pid 996] AH00163: Apache/2.4.10 (Fedora) PHP/5.5.17 configured -- resuming normal operations
[Sun Oct 19 11:11:14.521725 2014] [core:notice] [pid 996] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
Nahoru Odpovědět
19.10.2014 11:42
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
Snorlax
Tvůrce
Avatar
Snorlax:26.10.2014 23:30

Nakonec mi pomohla tato rada:
http://stackoverflow.com/…l-bookings-t
a tento příkaz:

setsebool -P httpd_unified=1

I tak díky všem za snahu :)

Akceptované řešení
+20 Zkušeností
Řešení problému
Nahoru Odpovědět
26.10.2014 23:30
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
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 20 zpráv z 20.