Nefunkcni casti Nette na hostingu

lumi
Člen | 4
+
0
-

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.

Pavel Kravčík
Člen | 1180
+
0
-

Tipuju problém na hostingu nebo špatně nahraný vendor.

lumi
Člen | 4
+
0
-

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)

CZechBoY
Člen | 3608
+
+1
-

To spíš vypadá, že banán je furt jen špatnej hosting… :D

lumi
Člen | 4
+
0
-

@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)

Jan Endel
Člen | 1016
+
0
-

Postupoval bych takto:

  • smazat celý adresář vendor na serveru i lokálně
  • pustit lokálně composer install
  • nahrát adresář vendor na server
  • smazat všechny cache (opcache, temp adresář, …)

Editoval Jan Endel (16. 1. 2018 14:49)

lumi
Člen | 4
+
0
-

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] ⇒ ? )