Strict Standards: Chyba

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

Ahoj všem.
Jeden dotaz. Používám nette 0.9.2 pro PHP 5.2, ale na serveru mam PHP 5.3.
Všechno šlape, jeno hází na začátku každé šablony chybu:

Strict Standards: Only variables should be passed by reference in D:\UniServer\www\libs\Nette\Loaders\LimitedScope.php on line 70

Verzi 0.9.2 pro PHP se mi nepodařilo rozjet (se jmenými prostory se zatím moc nekamarádím… :()
Dá se tato chyba nějak ošetřit v kódu, aby verze pro PHP 5.2 běžela pod 5.3?
Díky

Edit: Ještě jsem zapoměl, testoval jsem na serveru s 5.2 a tam ta chyba nevyskakuje.

Editoval Rampa (25. 11. 2009 11:25)

Jan Tvrdík
Nette guru | 2595
+
0
-

Co používáš za revizi?

Ondřej Mirtes
Člen | 1536
+
0
-

Já mám taky verzi pro PHP 5.2 na serveru s PHP 5.3 a tento problém nepozoruji, zkus updatovat Nette.

Jod
Člen | 701
+
0
-

Neviem či to neni tým, že func_get_arg sa nedá použiť ako parameter funkcie, aspoň mne to pred pár dňami php tvrdilo, keď som robil jednu fičuru :)
Takže buď si to prepíšeš sám, alebo počkáš až sa to fixne (ak sa to fixne).

David Grudl
Nette Core | 8228
+
0
-

Způsoboval to PHP bug #48912, ale ten se projevoval jen v souvislosti se jmennými prostory. Nemáš tam někde jmenný prostor? Jakou máš přesně verzi PHP?

Rampa
Člen | 65
+
0
-

tak jsem stáhnul verzi Nette Framework 0.9.2 (revision b9fd602 released on 2009–11–12) for PHP 5.3
PHP mám 5.3.0.

Jmenné prostory používám a tu chybu nějak nedokážu odstranit. :(

Dělá to přesně v tý funkci, jak je popsano v tom bugu:

<?php

if (!function_exists($_cb->blocks['content'][] = '_cbb095901b069_content')) { function _cbb095901b069_content() { extract(func_get_arg(0))
?>
cuga
Člen | 210
+
0
-

tez se mi tenhle problem ted zacal objevovat… spojuju ho s prestupem na 1.0dev verzi… na localhostu mi to nejspis tuhle chybu nevyhazuje, ale po nahrani na produkcni server active24, verze php 5.2.12, pri kazdem nacteni stranky vybehne do php_error.log cca 9 radku…

cuga
Člen | 210
+
0
-

eventuelne, jde nejak logovani chyb rict, ze by nejakou chybu nemel logovat?

cuga
Člen | 210
+
0
-

chybu vyhazuje kazdy radek s definici bloku

if (!function_exists($_cb->blocks['title'][] = '_cbbe3a2539605_title')) { function _cbbe3a2539605_title($_cb) { extract(func_get_arg(1))

muze nekdo zareagovat jestli to ma nejake reseni?

pravdepodobne se mu nelibi prave extract(func_get_arg(1))…

chyba se projevuje na produkcnim serveru apache, s PHP verzi 5.2.12 a Nette Framework 1.0-alpha pro PHP 5.2

Editoval cuga (13. 5. 2010 14:04)

cuga
Člen | 210
+
0
-

hmmm, uvazuju co pripsat, aby to vzbudilo nejakou reakci, nebo nette erekci?

despiq
Člen | 320
+
0
-

a jakou to vyhazuje tu chybu, strict standarts?
co to presne dela, musi to mit nejaky puvod,
skeleton taky vyhodi nejake errory?

David Grudl
Nette Core | 8228
+
0
-

Nevím, co k tomu napsat, protože se mi nestává a nejsem schopen to nasimulovat. Takže asi zkoušet postupně zjednodušovat PHP kód a zjistit, co to přesně způsobuje.

redhead
Člen | 1313
+
0
-

@cuga: zkus v té šabloně v tempu napsat:

//místo
extract(func_get_arg(1))
//tohle
extract($arg = func_get_arg(1))

Ale stejně si nemyslím, že by to měla být tahle konstrukce. Vždyť nepracuje s referencí..

Honza Kuchař
Člen | 1662
+
0
-

Ha je to asi opravdu chyba. Měl jsem ji taky v nějaké komponetě.

http://cz.php.net/…get-args.php

Changelog

Version Description
5.3.0 This function can now be used in parameter lists.
5.3.0 If this function is called from the outtermost scope of a file which has been included by calling include() or require() from within a function in the calling file, it now generates a warning and returns FALSE.

Dále

Notes

Note: Because this function depends on the current scope to determine parameter details, it cannot be used as a function parameter in versions prior to 5.3.0. If this value must be passed, the results should be assigned to a variable, and that variable should be passed.

Note: This function returns a copy of the passed arguments only, and does not account for default (non-passed) arguments.

cuga
Člen | 210
+
0
-

kdyz hodim na web neminifikovanou verzi nette tak mi to vyhodi do logu tuhle sadu hlasek

[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates._layout.phtml-3f29bc0ba81a1e8274825c3dcd22bf6a.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_www.doc.www.vysokeskoly.cz.www.cuga.libs.Extras.Navigation.menu.phtml-291fdf03f50f5928c09b82753817b5f3.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_www.doc....www.cuga.libs.Extras.Navigation.menu.phtml-291fdf03f50f5928c09b82753817b5f3.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_www.doc....www.cuga.libs.Extras.Navigation.menu.phtml-291fdf03f50f5928c09b82753817b5f3.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_www.doc.....www.cuga.libs.Extras.Navigation.menu.phtml-291fdf03f50f5928c09b82753817b5f3.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_www.doc.....www.cuga.libs.Extras.Navigation.menu.phtml-291fdf03f50f5928c09b82753817b5f3.php:11
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates._layout.phtml-3f29bc0ba81a1e8274825c3dcd22bf6a.php:35
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:59
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/app/temp/c-Nette.Template/_FrontModule.templates.Default.default.phtml-ab21dea56c28ea59573e7d0e07017188.php:27
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62
[2010-05-21 16-12-45] PHP Strict standards: Only variables should be passed by reference in /www/doc/.../www/cuga/libs/Nette/Loaders/LimitedScope.php:62

vyteckoval jsem nazev webu, tak aby se nekdo nedivil co to ma byt :)
Panda
Člen | 569
+
0
-

Zkusil bych upravit tento řádek takto:

. "if (!function_exists(\$_cb->blocks[" . var_export($name, TRUE) . "][] = '$func')) { function $func(\$_cb) { $arg = func_get_arg(1); extract($arg)\n?>$content<?php\n}}";
Honza Kuchař
Člen | 1662
+
0
-

@Panda: Přesně to jsem měl na mysli.

cuga
Člen | 210
+
0
-

po chvilce koumani panduv kod trosku upraveny funguje

. "if (!function_exists(\$_cb->blocks[" . var_export($name, TRUE) . "][] = '$func')) { function $func(\$_cb) { \$arg = func_get_arg(1); extract(\$arg)\n?>$content<?php\n}}";

diky panove

cuga
Člen | 210
+
0
-

jo a jeste je potreba v LimitedScope.php udelat stejnou upravu

David Grudl
Nette Core | 8228
+
0
-

Proč se tak děje jen na serveru active24?

cuga
Člen | 210
+
0
-

netusim, mozna nejake specifikum v nastaveni PHP nebo v jeho verzi?

Honza Kuchař
Člen | 1662
+
0
-

U mě na localhostu mi to udělalo taky, ale jen jednou a od té doby je to ok. (v tom doplňku) Tak nevím. Rozhodně je to jistější rozepsat.

medhi
Generous Backer | 255
+
0
-

My jsme si na lokální testovací server nahodili eAccelerator 0.9.6.1 a začalo to psát taky. Vypnuli ho a OK.