rastreator Posted April 15, 2014 Share Posted April 15, 2014 (edited) EDITADO: Tenía un error en el módulo de feedback en la página feedbackview, que se debía a que no es compatible con la versión de php 5.4, por lo que la solución fue cambiar a php 5.3 ¿Cómo se tendría que escribir esta línea de código para que no de un fatal error en php 5.4 y 5.5? (me interesa la 5.5 principalmente). $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); (El resto del código está en los siguientes post íntegro). El resto de la tienda parece que funciona bien con php 5.5, y el motivo de interesarme en actualizar, es que ahora me da problemas de fragmentación el cache APC que uso, por lo que lo he desactivado, y me comentan en loading (hosting que uso) que con opcache (disponible en php 5.5) eso no pasa, pero para usar esa versión debería solucionar antes el problema con ese módulo. ¿Es posible adaptar esa línea nada más a php 5.5, o es más complicado que eso? ¿Cómo habría que reescribirla? Mil gracias. Edited May 29, 2014 by rastreator (see edit history) Link to comment Share on other sites More sharing options...
shacker Posted April 21, 2014 Share Posted April 21, 2014 que hay en esta linea /ViewfeedbackController.php on line 35 Link to comment Share on other sites More sharing options...
rastreator Posted April 21, 2014 Author Share Posted April 21, 2014 (edited) ¡Hola Shacker! Qué coincidencia, justo hace unos minutos me acaban de decir los del hosting que el error está en esa línea... Lo que hay ahí es esto: $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); El archivo entero (por si quieres ver el contexto) es este: <?php /*Copyright 2011 ciroco05 email: [email protected] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3, as published by the Free Software Foundation. This file can't be removed. This module can't be sold. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ class ViewfeedbackControllerCore extends FrontController { public $php_self = 'viewfeedback.php'; public $ssl = true; public function process() { parent::process(); $result = array(); $id_lang = (int)self::$cookie->id_lang; if (!$id_lang) $id_lang = (int)(Configuration::get('PS_LANG_DEFAULT')); $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); $nArray = array(10, 20, 50); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $n = abs((int)(Tools::getValue('n', ((isset(self::$cookie->nb_item_per_page) AND self::$cookie->nb_item_per_page >= 10) ? self::$cookie->nb_item_per_page : (int)(10))))); $p = abs((int)(Tools::getValue('p', 1))); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); $range = 2; /* how many pages around page selected */ if ($p < 0) $p = 0; if (isset(self::$cookie->nb_item_per_page) AND $n != self::$cookie->nb_item_per_page AND in_array($n, $nArray)) self::$cookie->nb_item_per_page = $n; if ($p > ($nbProducts / $n)) $p = ceil($nbProducts / $n); $pages_nb = ceil($nbProducts / (int)($n)); $start = (int)($p - $range); if ($start < 1) $start = 1; $stop = (int)($p + $range); if ($stop > $pages_nb) $stop = (int)($pages_nb); $fdbs = self::$this->getFeedback($id_lang, (int)($p) - 1, (int)($n), false); self::$smarty->assign(array( 'nb_products' => $nbProducts, 'fdbs' => $fdbs, 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => (int)($pages_nb), 'p' => (int)($p), 'n' => (int)($n), 'nArray' => $nArray, 'range' => (int)($range), 'start' => (int)($start), 'stop' => (int)($stop), 'current_url' => $current_url )); } private function getFeedback($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false) { if ($pageNumber < 0) $pageNumber = 0; if ($nbProducts < 1) $nbProducts = 10; if ($count) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(`id_fb`) AS nb FROM `'._DB_PREFIX_.'feedback` WHERE `status` = 1 AND `permission` = 1'); return (int)($result['nb']); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'feedback` WHERE `status` = 1 AND `permission` = 1 ORDER BY `date` DESC LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts)); $i = 0; foreach ($result AS $dat) { $result[$i]['id_fb'] = $dat['id_fb']; $result[$i]['date'] = (((int)(Configuration::get('FDBFORMATDATA')) == 0) ? date('d-m-Y', strtotime($dat['date'])) : date('Y-m-d', strtotime($dat['date']))); $result[$i]['name'] = $dat['name']; $result[$i]['email'] = ""; $result[$i]['feedback'] = nl2br($dat['feedback']); $result[$i]['permission'] = $dat['permission']; $result[$i]['status'] = $dat['status']; $result[$i]['answer'] = nl2br($dat['answer']); $i++; } if (!$result) return false; return $result; } public function displayContent() { parent::displayContent(); self::$smarty->display(_PS_MODULE_DIR_.'feedback/viewfeedback.tpl'); } } Edited April 21, 2014 by rastreator (see edit history) Link to comment Share on other sites More sharing options...
rastreator Posted April 24, 2014 Author Share Posted April 24, 2014 ¿alguna pista? ¡No entiendo por qué tengo este error! Fatal error: Access to undeclared static property: ViewfeedbackControllerCore::$this in /var/www/vhosts/nosolopixel.com/httpdocs/controllers/ViewfeedbackController.php on line 35 No he cambiado nada en el módulo, de un día para otro dejó de funcionar.... La línea 35 de ese archivo es la misma en todas las versiones que he probado de ese módulo (y el archivo es idéntico en todas), he probado restaurando el módulo, los controladores y las páginas php de un backup de hace unos meses (cuando funcionaba bien) y sigue dando el error Link to comment Share on other sites More sharing options...
rastreator Posted April 28, 2014 Author Share Posted April 28, 2014 a falta de saber por donde tirar... Y viendo que el módulo funciona en todo menos en la página para ver las opiniones, que es esta, de momento he optado por la chapuza de crear un CMS con un copia-pega de las opiniones... Link to comment Share on other sites More sharing options...
shacker Posted May 13, 2014 Share Posted May 13, 2014 coloca una arroba en esa linea @$nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); 1 Link to comment Share on other sites More sharing options...
rastreator Posted May 14, 2014 Author Share Posted May 14, 2014 (edited) coloca una arroba en esa linea @$nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); Gracias shacker por la solución, finalmente era porque se "cambió" (yo no toqué nada...) en el hosting la versión de php (también falló otro módulo), la volví a poner en 5.3 y ahora todo vuelve a funcionar bien sin cambiar nada en los módulos. Un saludo. Edited May 27, 2014 by rastreator (see edit history) Link to comment Share on other sites More sharing options...
rastreator Posted May 27, 2014 Author Share Posted May 27, 2014 Tenía un error en el módulo de feedback en la página feedbackview, que se debía a que no es compatible con la versión de php 5.4, por lo que la solución fue cambiar a php 5.3 ¿Cómo se tendría que escribir esta línea de código para que no de un fatal error en php 5.4 y 5.5? (me interesa la 5.5 principalmente). Esta es la ĺínea que da error: $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); Ya probé a poner una @ delante como decia shacker, pero en php 5.4 y 5.5 sigue dando el mismo error. Aquí el código entero del archivo: <?php /*Copyright 2011 ciroco05 email: [email protected] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 3, as published by the Free Software Foundation. This file can't be removed. This module can't be sold. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ class ViewfeedbackControllerCore extends FrontController { public $php_self = 'viewfeedback.php'; public $ssl = true; public function process() { parent::process(); $result = array(); $id_lang = (int)self::$cookie->id_lang; if (!$id_lang) $id_lang = (int)(Configuration::get('PS_LANG_DEFAULT')); $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); $nArray = array(10, 20, 50); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $n = abs((int)(Tools::getValue('n', ((isset(self::$cookie->nb_item_per_page) AND self::$cookie->nb_item_per_page >= 10) ? self::$cookie->nb_item_per_page : (int)(10))))); $p = abs((int)(Tools::getValue('p', 1))); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); $range = 2; /* how many pages around page selected */ if ($p < 0) $p = 0; if (isset(self::$cookie->nb_item_per_page) AND $n != self::$cookie->nb_item_per_page AND in_array($n, $nArray)) self::$cookie->nb_item_per_page = $n; if ($p > ($nbProducts / $n)) $p = ceil($nbProducts / $n); $pages_nb = ceil($nbProducts / (int)($n)); $start = (int)($p - $range); if ($start < 1) $start = 1; $stop = (int)($p + $range); if ($stop > $pages_nb) $stop = (int)($pages_nb); $fdbs = self::$this->getFeedback($id_lang, (int)($p) - 1, (int)($n), false); self::$smarty->assign(array( 'nb_products' => $nbProducts, 'fdbs' => $fdbs, 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => (int)($pages_nb), 'p' => (int)($p), 'n' => (int)($n), 'nArray' => $nArray, 'range' => (int)($range), 'start' => (int)($start), 'stop' => (int)($stop), 'current_url' => $current_url )); } private function getFeedback($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false) { if ($pageNumber < 0) $pageNumber = 0; if ($nbProducts < 1) $nbProducts = 10; if ($count) { $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(`id_fb`) AS nb FROM `'._DB_PREFIX_.'feedback` WHERE `status` = 1 AND `permission` = 1'); return (int)($result['nb']); } $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' SELECT * FROM `'._DB_PREFIX_.'feedback` WHERE `status` = 1 AND `permission` = 1 ORDER BY `date` DESC LIMIT '.(int)($pageNumber * $nbProducts).', '.(int)($nbProducts)); $i = 0; foreach ($result AS $dat) { $result[$i]['id_fb'] = $dat['id_fb']; $result[$i]['date'] = (((int)(Configuration::get('FDBFORMATDATA')) == 0) ? date('d-m-Y', strtotime($dat['date'])) : date('Y-m-d', strtotime($dat['date']))); $result[$i]['name'] = $dat['name']; $result[$i]['email'] = ""; $result[$i]['feedback'] = nl2br($dat['feedback']); $result[$i]['permission'] = $dat['permission']; $result[$i]['status'] = $dat['status']; $result[$i]['answer'] = nl2br($dat['answer']); $i++; } if (!$result) return false; return $result; } public function displayContent() { parent::displayContent(); self::$smarty->display(_PS_MODULE_DIR_.'feedback/viewfeedback.tpl'); } } El resto de la tienda parece que funciona bien con php 5.5, y el motivo de interesarme en actualizar, es que ahora me da problemas de fragmentación el cache APC que uso, por lo que lo he desactivado, y me comentan en loading (hosting que uso) que con opcache (disponible en php 5.5) eso no pasa, pero para usar esa versión debería solucionar antes el problema con ese módulo. ¿Es posible adaptar esa línea nada más a php 5.5, o es más complicado que eso? ¿Cómo habría que reescribirla? Mil gracias. Link to comment Share on other sites More sharing options...
rastreator Posted May 27, 2014 Author Share Posted May 27, 2014 (edited) Me respondo según voy descubriendo. Aquí reportan algo parecido: https://bugs.php.net/bug.php?id=66199 Un error que en php 5.4.21 no ocurría y en 5.4.22 sí. Edited May 27, 2014 by rastreator (see edit history) Link to comment Share on other sites More sharing options...
rastreator Posted May 29, 2014 Author Share Posted May 29, 2014 Finalmente me han solucionado el problema los de loading, y les estoy muy agradecido. La solución fue cambiar esa línea 35 $nbProducts = (int)(self::$this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); Por esta otra $nbProducts = (int)($this->getFeedback($id_lang, isset($p) ? (int)($p) - 1 : NULL, isset($n) ? (int)($n) : NULL, true)); en el archivo /controllers/ViewFeedbackController.php O lo que es lomismo, cambiar self::$this por simplemente $this Link to comment Share on other sites More sharing options...
shacker Posted May 29, 2014 Share Posted May 29, 2014 gracias por compartirlo Link to comment Share on other sites More sharing options...
Recommended Posts