Nefunkcni casti Nette na hostingu
- lumi
- Člen | 4
Zdravim,
Mame aplikaci, ktera byla napsana v 2.2 a bezela na PHP5.4. Chteli jsme ji aktualizovat na nejnovejsi 2.4 a PHP 5.6. Takze jsme to zmenili a na localhoste s internim web serverem v PHP 5.6.33 fungovala bezproblemu. Takze jsme ji nahrali na hosting, kde je taky 5.6.33.
Nicmene chova se absolutne nepochopitelne.
Pokus zapnout Tracy v configuratoru haze vyjimku v Tracy\Debugger
class_exists expects at least 2 parameters given 1.
Pokud volame nejakou DB operaci s where tak prozmenu
preg_replace_callback expects 2 parameters given 4. To vyleti az
v Nette\Utils\Strings. Dela to v okamziku pouziti prikazu where() a nastaveni
parametru.
http://download.navrat.name/bug-php5.6.zip obsahuje jak exception vypisy, tak i phpinfo jak z localhostu tak i z hostingu. Nette checker taky, az na memcached, rika, ze je vse kompatibilni.
Nejsem vylozene PHPckar, ale prijde mi proste divne jak se mohou takto lisit stejne verze. Psal jsem uz i na hosting, ale treba me tady nekdo nasmeruje kde hledat chybu.
P.S. prosim nereste co je to za hosting. Problem jsem s nimi dosud nemel a presun se mi resit ani nechce.
- lumi
- Člen | 4
nejsem PHPckar ale prijde mi to divne toto funguje:
testoval jsem zapisem na konec app\bootstrap.php. takze by melo byt cele nette
uz najete.
class_exists('Nette\Configurator') => return true
ale toto ne:
array_map("class_exists",["Nette\Configurator"],);
array_map('class_exists',["Nette\Configurator"]);
casti z Tracy\Debugger kde je ten array_map pouzity. akorat jsem zamenil
nazvy trid. *
Samozrejme hosting odpovedel ze netusi a ze konfigurace je jina win vs. linux.
coz mi je jasne. ale co konkretne muze byt jinak, ze ma vliv na zpracovani
optional parametru.
Zend? nejaka jina knihovna?
- toto je origo kod co pada: vendor/Tracy/tracy/src/Tracy/Debugger.php
array_map('class_exists', ['Tracy\Bar', 'Tracy\BlueScreen', 'Tracy\DefaultBarPanel', 'Tracy\Dumper',
'Tracy\FireLogger', 'Tracy\Helpers', 'Tracy\Logger', ]);
Editoval lumi (16. 1. 2018 13:39)
- lumi
- Člen | 4
@CZechBoY prosil jsem nekomentovat ;). Vim o historii Bananu a o jeho problemech, ale neni mym cilem si na ne tady stezovat ale poradit kam je nasmerovat aby to fixli. Vsak jsem nektere jeho zamestance mel u statnic:D A kolem domu Kaluzy chodim na prochazky:).Tak vic co jsou zac:D A zaroven nechci aby to tady vyznelo, ze je obhajuji.
Zatim vse vzdy mi u nich jelo. A dokud to bylo Nette 2.2 a PhP 5.4 tak vse fungovalo. Dokonce vse fungovalo i po upgrade na 5.6 dokud jsem na server nenahral z meho PC novou verzi. Asi fungovala cache a prekompilovane zdrojaky.
Problem nastal az po nahrani Nette 2.4 smazani obsahu temp a log.
Podle me to musi byt proste jen neco v konfiguraci coz se pri silenosti jmenem PHP nedivim. Ono je totiz divne ze pokud si vezmu example z php dokumentace na array_map s tim spanish a dam ho do boostrap, tak jede i s tim optional parametrem ktery jsem si vyrobil. Jejich verze je toto:
PHP Version 5.6.33–1+ubuntu16.04.1+deb.sury.org+1
php info je v tom zipu co jsem uvedl v prvnim prispevku. Pokud pominu, ze maji
nejvyssi verzi 5.6. tak na druhou stranu maji nejnovejsi. Dokonce i ja jsem
musel na winech povysit z 5.6.32 abych mel to co oni.
Editoval lumi (16. 1. 2018 14:30)
- lumi
- Člen | 4
Takze to nepomohlo. Nicmene jsem vyseparoval 2 pripady kdy to PHP se chova divne. souvisi to s callbacky. Kusy kodu jsou vytazene z Nette\Utils\Strings a Tracy\Debugger a upravene aby to nemelo souvislost s Nette.
<?php
class A {
}
class B {
public function replace2() {
self::pcre('~\'[^\']*+\'|"[^"]*+"|\?[a-z]*|^\s*+(?:INSERT|REPLACE)\b|\b(?:SET|WHERE|HAVING|ORDER BY|GROUP BY|KEY UPDATE)(?=\s*\z|\s*\?)|/\*.*?\*/|--[^\n]*~si', [$this, 'callback'], 'select * from users where email = ?',-1);
}
public function pcre($pattern,$callbackMethod,$subject,$limit) {
call_user_func_array('preg_replace_callback',array($pattern,$callbackMethod,$subject,$limit));
}
public function replace() {
preg_replace_callback('~\'[^\']*+\'|"[^"]*+"|\?[a-z]*|^\s*+(?:INSERT|REPLACE)\b|\b(?:SET|WHERE|HAVING|ORDER BY|GROUP BY|KEY UPDATE)(?=\s*\z|\s*\?)|/\*.*?\*/|--[^\n]*~si', [$this, 'callback'], 'select * from users where email = ?');
}
public function callback($m) {
print_r($m);
}
}
echo "<html>";
echo "<body>";
print_r(array_map('class_exists', ['A']));
echo "<hr />";
var_dump(class_exists('A'));
echo "<hr />";
$b = new B();
$b->replace();
echo "<hr />";
$b->replace2();
echo "<hr />";
echo "</body></html>"
?>
melo by to vracet toto:
Array ( [0] ⇒ 1 )
bool(true)
Array ( [0] ⇒ ? )
Array ( [0] ⇒ ? )
vraci ale toto:
Array ( [0] ⇒ )
bool(true)
Array ( [0] ⇒ ? )