První pokus o spuštění dle doc.nette.org/cs/installation

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jik
Člen | 149
+
0
-

Zdravím,
zkouším rozjet Nette a mám problém.
http://localhost/…/checker.php hlásí OK, ovšem

http://localhost/…sandbox/www/ nahlásí toto:

Nette\Utils\RegexpException

preg_match(): Compilation failed: POSIX collating elements are not supported at offset 148 in pattern: ~^ ( (?P<name>\?|/?[a-z]\w+(?:[.:]\w+)+(?!::|\())| ## ?, name, /name, but not function( or class:: (?P<noescape>!?)(?P<shortname>/?[=\~#%^&_]?) ## [!] [=] expression to print )(?P<args>.?) (?P<modifiers>\|a-z‚|„(?:\\.|[^“\\])„|[^‘“]+))? ()$~isx

37: $container->application->run();

Co je to – nějaký chybějící balík? ale který? Doma mám OpenSUSE 12.1 s PHP 5.3.8 resp. 9 (oba se stejným výsledkem), zajímavé, že v práci OpenSUSE 11.4 PHP z hlavy nevím jaké, to naskočilo dobře. Myslím, že ani v práci jsem nic extra neinstaloval.

děkuji a zdravím

jik

juzna.cz
Člen | 248
+
0
-

Muzes se prosim podivat na phpinfo() a vypsat sekci pcre. Mrkni, zda se lisi mezi stroji, kde ti to jde a kde ti to nejde.

Ja mam PCRE verzi 8.12 2011–01–15 a zadny problem mi to nehlasi. Podle googlu na tom novem OpenSUSE by melo byt 8.13, ktere asi pridava nejake validace

Editoval juzna.cz (4. 2. 2012 1:07)

jik
Člen | 149
+
0
-

Je to tak:

PCRE (Perl Compatible Regular Expressions) Support enabled
PCRE Library Version 8.13 2011–08–16

jik
Člen | 149
+
0
-

Tak OpenSUSE 11.4 má PCRE ve verzi 8.10.

Co by se s tím rozumně jednoduše dalo dělat? Musím začít něco vyšívat a uvažoval jsem o tomto – je nějaká cesta Nette zprovoznit (v dohledné době)? Zatím neuvažuji o návratu na OS11.4, nehledě na to, že by to byla stejně krátkozrakost.

juzna.cz
Člen | 248
+
0
-

Zkus si s prislusnym regularnim vyrazem pohrat tak, aby nenadaval. Pak nam muzes rict, jak jsi to opravil. Ostatni to asi nevykoumaji, kdyz maji verzi PCRE ve ktere jim to funguje.

Milo
Nette Core | 1283
+
0
-

Zkus v tom reguláru udělat následující změnu, tj. aby za hranatou závorkou nebylo rovnítko.

(?P<shortname>/?[=\~#%^&_]?)
(?P<shortname>/?[#=\~%^&_]?)
Milo
Nette Core | 1283
+
0
-

Nebo ještě jinak, dej před to rovnítko backslash.

(?P<shortname>/?[=\~#%^&_]?)
(?P<shortname>/?[\=\~#%^&_]?)
jik
Člen | 149
+
0
-

Velice děkuji. Funguje – oba návrhy. Takový přídavný dotaz – vo co gou?

Milo
Nette Core | 1283
+
0
-

Nejsem si jistý. Nějaká chyba ve verzi PCRE 8.13 při zpracování collating elements a/nebo komentářů.

pokornymartin
Člen | 8
+
0
-

Dobry den,

pokousim se taktez zprovoznit posledni verzi (NetteFramework-2.0.8-PHP5.3.zip) na Kubuntu 10.12 a nedari se mi:

vsechny kontroly jsou OK, ale po pristupu na stranku http://localhost/…sandbox/www/ dostanu tuto odpoved:

Nette\Utils\RegexpException

preg_match(): Compilation failed: internal error: previously-checked referenced subpattern not found at offset 474 in pattern: ~ (?:(?<=\n|^)[ \t]*)?<(?P<closing>/?)(?P<tag>[a-z0-9:]+)| ## begin of HTML tag <tag </tag - ignores <!DOCTYPE <(?P<htmlcomment>!--)| ## begin of HTML comment <!-- (?P<comment>\{(?![\s'"{}])\*.*?\*\}\n{0,2})| \{(?![\s'"{}]) (?P<macro>(?:'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"|\{ (?P<inner>'(?:\\.|[^'\\])*'|"(?:\\.|[^"\\])*"|\{(?P>inner)\}|[^'"{}])*+ \}|[^'"{}])+?) \} (?P<rmargin>[ \t]*(?=\n))? ## macro tag ~xsi`

zkousel jsem upravit Parser.php a porad stejny vysledek – muzete mi prosim poradit co s tim?

dekuji

Jan Tvrdík
Nette guru | 2595
+
0
-

@pokornymartin: Jakou máš verzi PHP a verzi pcre?

pokornymartin
Člen | 8
+
0
-

PHP: 5.4.7
PCRE: 8.12 2011–01–15

je to z baliku XAMPP 1.8.1.

Milo
Nette Core | 1283
+
0
-

Mě tenhle regexp s PCRE 8.12 projde, ale chyba možná závisí na parsovaném obsahu. Řešilo se to už tady na fóru.

Bude to chtít trochu debugování, protože se ten RE sestavuje dynamicky.

@pokornymartin: Mohl bys udělat pár dumpů a pastnout je sem? A aby se zachovaly konce řádků…
V souboru Nette\Latte\Parser.php na začátek metody match():

private function match($re)
{
	\Nette\Diagnostics\Debugger::$maxLen = 1e6;
	dump($this->input);
	dump($re);
	if (....)

EDIT: A bude stačit pastnout jen ten poslední, než to spadne.

Editoval Milo (18. 2. 2013 20:50)

pokornymartin
Člen | 8
+
0
-

omlouvam se za natvrdlost.. ale ten dump se zobrazi kde?

Do souboru Nette\Latte\Parser.php na začátek metody match() jsem pridal ty tri radky, ale pri zavoalni stranky http://localhost/…sandbox/www/ se zobrazuje vse beze zmeny …

diky za trpelivost

Milo
Nette Core | 1283
+
0
-

Zobrazí se v prohlížeči v kódu stránky. Jestli Ti s tou chybou PCRE vyskočila laděnka, tak ty dumpy budou schované pod ní. Klikni v pravém horním rohu…

pokornymartin
Člen | 8
+
0
-

toto?:

File: …/libs/Nette/Utils/Strings.php Line: 460

450:         * @param  int  offset in bytes
451:         * @return mixed
452:         */
453:        public static function match($subject, $pattern, $flags = 0, $offset = 0)
454:        {
455:            if ($offset > strlen($subject)) {
456:                return NULL;
457:            }
458:            set_error_handler(function($severity, $message) use ($pattern) { // preg_last_error does not return compile errors
459:                restore_error_handler();
460:                throw new RegexpException("$message in pattern: $pattern");
461:            });
462:            $res = preg_match($pattern, $subject, $m, $flags, $offset);
463:            restore_error_handler();
464:            if (preg_last_error()) { // run-time error

Editoval pokornymartin (19. 2. 2013 10:32)

Milo
Nette Core | 1283
+
0
-

Ne, to je laděnka. Já potřebuji obsah těch proměnných co se dumpují.

Když se Ti zobrazí laděnka (červená obrazovka), zmáčkni Esc a ona se schová a uvidíš normální stránku.

pokornymartin
Člen | 8
+
0
-

hmm, tak tam se mi zobrazi prazdna stranka, jen s Debugger Barem vpravo dole a cervenou sipkou ladenky vpravo nahore

Milo
Nette Core | 1283
+
0
-

Tak to zkus uložit někam do souboru a pak ho sem pastnout:

private function match($re)
{
	$out = var_export($this->input, TRUE) . "\n" . var_export($re, TRUE) . "\n\n\n";
	file_put_contents('/cesta/do/tempu/dump.file', $out, FILE_APPEND);
	if (....)
enumag
Člen | 2118
+
0
-

Pokud potřebujete dumpovat, není jednodušší použít barDump?

Milo
Nette Core | 1283
+
0
-

Rád bych, aby dumpy nebyly ořízlé a zachovaly se konce řádků a taby…

pokornymartin
Člen | 8
+
0
-

bohuzel se mi nedari vubec nic z toho dostat :(
zkusim to rozjet na jinem PC a ozvu se

Milo
Nette Core | 1283
+
0
-

Zkompiloval jsem si PHP 5.4.7 s PCRE 8.12 a sandbox normálně rozjedu. Upravoval jsi v něm něco?

pokornymartin
Člen | 8
+
0
-

vubec nic – jen jsem rozbalil archiv do rootu www (nette) … a nic :(
kontrola probehne OK, ale dal se nedostanu

EDIT: ted jsem to nahrnul na jine PC a tady to funguje bez problemu na prvni spusteni

PHP Version 5.3.10–1ubuntu3.5
PCRE Library Version 8.12 2011–01–15

zkusim na tom puvodnim prekopat PHP

Editoval pokornymartin (19. 2. 2013 21:52)

Milo
Nette Core | 1283
+
0
-

Tohle bude těžko odhalitelný bug. Co jsem googlil, občas se objeví i v novější verzi PCRE. Hodně by pomohlo, kdyby se Ti podařilo udělat ty dumpy do souboru a ten soubor zazipoval a vystavil někam ke stažení.

Milo
Nette Core | 1283
+
0
-

Btw… když jsi dopisoval ten dump, určitě jsi upravoval Parser.php ve správné složce?
sandbox/libs/Nette/Latte/Parser.php

Milo
Nette Core | 1283
+
0
-

A ještě jedna věc mě napadla… před dumpem je potřeba vymazat temp.

pokornymartin
Člen | 8
+
0
-

tak uz to funguje – vyhodil jsem XAMPP a veskera nastaveni apache, php atd.
nacisto nainstaloval LAMP
verze PHP: 5.4.6–1ubuntu1.1
PCRE: 8.30 2012–02–04

a frci to :) diky moc za rady!