{"id":516,"date":"2012-07-15T17:59:26","date_gmt":"2012-07-15T15:59:26","guid":{"rendered":"http:\/\/intervia.com\/doc\/?p=516"},"modified":"2015-11-26T10:37:29","modified_gmt":"2015-11-26T09:37:29","slug":"problemas-con-vhcs2-al-actualizar-a-php-5-3","status":"publish","type":"post","link":"https:\/\/intervia.com\/doc\/problemas-con-vhcs2-al-actualizar-a-php-5-3\/","title":{"rendered":"Problemas con VHCS2 al actualizar a PHP 5.3"},"content":{"rendered":"<p class=\"lead\">Si tienes un servidor gestionado con VHCS2 y actualizas el PHP a la versi\u00f3n 5.3, por ejemplo al pasar de Debian Lenny a Squeeze, te encontrar\u00e1s con la desagradable sorpresa de que en vez de cargarse los textos y valores, aparecen s\u00f3lo los nombres de las variables.<\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p>Despu\u00e9s de actualizar PHP a la 5.3, te llevas la sorpresa cuando vas a entrar a VHCS2 y en vez de aparecer en el formulario de entrada nombre y usuario, aparece {TR_USERNAME} y {TR_PASSWORD}, y as\u00ed cada texto y cada valor de la pantalla, lo que inutiliza por completo su uso.<\/p>\n<p>&nbsp;<\/p>\n<p>Mi primer intento para arreglarlo fue tratar de hacer un downgrade de PHP 5.3 a 5.2, para el que hay varios tutoriales, pero resulta que Debian a retirado los repositorios de Lenny y aunque ten\u00eda los paquetes, despu\u00e9s de una hora con dpkg desist\u00ed de seguir peg\u00e1ndome con las dependencias.<\/p>\n<p>&nbsp;<\/p>\n<p>Otra soluci\u00f3n es actualizar a\u00a0ispCP Omega, pero lo que deber\u00eda ser algo f\u00e1cil ya que se trata de una versi\u00f3n moderna del propio VHCS2, en realidad es una pesadilla que dej\u00f3 parado el servidor con el que hice el intento por las diferencias en la configuraci\u00f3n de Apache y adem\u00e1s, ya no funcionan los scripts de actualizaci\u00f3n con las \u00faltimas versiones, as\u00ed que la migraci\u00f3n de la base de datos tendr\u00eda que hacerse a mano.<\/p>\n<p>&nbsp;<\/p>\n<p>As\u00ed que llegados a este punto, la \u00fanica soluci\u00f3n aparte de montar un servidor nuevo y migrar todos los virtuales a mano (algo que por nada quer\u00eda hacer), era encontrar donde estaba el fallo en VHCS2.<\/p>\n<p>&nbsp;<\/p>\n<p>Primero prob\u00e9 a buscar la soluci\u00f3n en Google, se que le ha pasado a m\u00e1s gente porque buscando los nombres de las variables encontr\u00e9 un mont\u00f3n de servidores con el mismo problema, e ingenuo de mi, pens\u00e9 que alguien habr\u00eda publicado la soluci\u00f3n, pero despu\u00e9s de una hora buscando, decid\u00ed ponerme a mirar el c\u00f3digo de VHCS2, que para mi desgracia no tiene ni un comentario.<\/p>\n<p>&nbsp;<\/p>\n<p>Despu\u00e9s de unas horas de ingenier\u00eda reversa, descubr\u00ed que el problema est\u00e1 en una funci\u00f3n que hace el \u00abparse\u00bb de los arrays que sustituyen las variables por sus valores de la base de datos, la funci\u00f3n es\u00a0<strong>substitute_dynamic<\/strong> y est\u00e1 en el archivo\u00a0<strong>gui\/include\/class.pTemplate.php<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>Ahora quedaba arreglarlo, pero lo que hice fue comprobar las funciones de ispCP Omega a ver si eran compatibles, ya que este si funciona con PHP 5.3, y resulta que no s\u00f3lo son compatibles, la mayor\u00eda de ellas son id\u00e9nticas, pero me fij\u00e9 que substitute_dynamic estaba muy modificada, as\u00ed que prob\u00e9 a sustituirla entera y &#8230; \u00a1funcion\u00f3!<\/p>\n<p>&nbsp;<\/p>\n<p>Para arreglarlo, lo \u00fanico que hay que hacer es editar el archivo <strong>gui\/include\/class.pTemplate.php<\/strong>\u00a0de VHCS2, borrar la funci\u00f3n\u00a0<strong>substitute_dynamic<\/strong> y poner la de ispCP Omega que est\u00e1 en el archivo <strong>gui\/include\/ispCP\/pTemplate.php<\/strong>.<\/p>\n<p>Se puede encontrar la funci\u00f3n en esta p\u00e1gina de Github:<br \/>\n<a href=\"https:\/\/github.com\/okbutton\/ispCP-distributed\/blob\/master\/gui\/include\/class.pTemplate.php\" target=\"_blank\">https:\/\/github.com\/okbutton\/ispCP-distributed\/blob\/master\/gui\/include\/class.pTemplate.php<\/a><\/p>\n<p>Este es el c\u00f3digo que us\u00e9 yo, aunque tiene un bucle con un doble else que deber\u00eda dar error, parece que con eso y todo funciona:<\/p>\n<pre><code class=\"language-php\">\r\nfunction substitute_dynamic($data){\r\n\r\n $this -&gt; sp = 0;\r\n\r\n $start_from = -1;\r\n\r\n $curl_b = substr($data, '{', $start_from);\r\n\r\n if ($curl_b) {\r\n\r\n $this -&gt; stack[$this -&gt; sp++] = array('{', $curl_b);\r\n\r\n $curl = $this -&gt; find_next_curl($data, $start_from);\r\n\r\n while ($curl) {\r\n\r\n if ($curl[0] == '{') {\r\n\r\n $this -&gt; stack[$this -&gt; sp++] = $curl;\r\n\r\n $start_from = $curl[1];\r\n\r\n } else {\r\n\r\n $curl_e = $curl[1];\r\n\r\n if ($this -&gt; sp &gt; 0) {\r\n\r\n $curl = $this -&gt; stack [--$this -&gt; sp]; \/* CHECK for empty stack must be done HERE ! *\/\r\n\r\n $curl_b = $curl[1];\r\n\r\n if ($curl_b &lt; $curl_e + 1) {\r\n\r\n $var_name = substr($data, $curl_b + 1, $curl_e - $curl_b - 1);\r\n\r\n \/*\r\n *\r\n * The whole WORK goes here :) ;\r\n *\r\n *\/\r\n\r\n if (preg_match('\/[A-Z0-9][A-Z0-9\\_]*\/', $var_name)) {\r\n\r\n if (isset($this -&gt; namespace[$var_name])) {\r\n\r\n $data = substr_replace($data, $this -&gt; namespace[$var_name], $curl_b, $curl_e - $curl_b + 1);\r\n\r\n $start_from = $curl_b - 1; \/* new value may also begin with '{' *\/\r\n\r\n } else if (isset($this -&gt; dtpl_data[$var_name])) {\r\n\r\n $data = substr_replace($data, $this -&gt; dtpl_data[$var_name], $curl_b, $curl_e - $curl_b + 1);\r\n\r\n $start_from = $curl_b - 1; \/* new value may also begin with '{' *\/\r\n\r\n } else {\r\n\r\n $start_from = $curl_b; \/* no soutable value found -&gt; go forward *\/\r\n\r\n }\r\n\r\n } else {\r\n\r\n $start_from = $curl_b; \/* go forward, we have {not varialbe} here :) *\/\r\n\r\n }\r\n\r\n } else {\r\n\r\n $start_from = $curl_e; \/* go forward, we have {} here :) *\/\r\n\r\n }\r\n\r\n } else {\r\n\r\n $start_from = $curl_e;\r\n\r\n }\r\n }\r\n\r\n $curl = $this -&gt; find_next_curl($data, $start_from);\r\n\r\n }\r\n\r\n return $data;\r\n\r\n } else {\r\n\r\n return $data; \/* tghere is nothing to substitute in $data *\/\r\n\r\n }\r\n}\r\n<\/code>\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si tienes un servidor gestionado con VHCS2 y actualizas el PHP a la versi\u00f3n 5.3, por ejemplo al pasar de Debian Lenny a Squeeze, te encontrar\u00e1s con la desagradable sorpresa de que en vez de cargarse los textos y valores, aparecen s\u00f3lo los nombres de las variables.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[],"class_list":["post-516","post","type-post","status-publish","format-standard","hentry","category-varios"],"_links":{"self":[{"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/posts\/516","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/comments?post=516"}],"version-history":[{"count":0,"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/posts\/516\/revisions"}],"wp:attachment":[{"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/media?parent=516"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/categories?post=516"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/intervia.com\/doc\/wp-json\/wp\/v2\/tags?post=516"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}