[Resuelto] PDO OCI Acentos

Iniciado por ZeroVzla, 27 Febrero 2015, 21:33 PM

0 Miembros y 1 Visitante están viendo este tema.

ZeroVzla

Buen día,

Tengo problemas con los acentos y caracteres especiales como la ñ usando PDO_OCI. El ambiente es un servidor debian, nginx y php como cgi. Ya intente colocando el charset en la conexión: UTF-8, AL32UTF8. Si alguien me puede guiar al menos lo agradecería.

Saludos!.

ZeroVzla

Buen día a todos,

Pues hoy resolví el tema y quería compartir con ustedes la solución, así si alguno tienen el mismo problema no tiene que pasar una semana trastabillando en miles de foros así que sencillo:

En mi caso, y como expliqué con anterioridad, el php está instalado como FastCGI pero es llamado PHP-FPM (FastCGI Process Manager), lo indico ya que les ayudará en un futuro a buscar sobre problemas. Así pues, resulta que las configuraciones como el NLS_LANG, LD_LIBRARY_PATH, NLS_DATE_FORMAT etc.. no las toma de las variables de entorno del usuario que lo ejecuta (hablando en linux), en vez, la toma de su archivo de configuración llamado php-fpm.conf, lo que quiere decir que para setear dichas variables de entorno deberán colocar en el archivo mencionado una línea por cada variable tal cual el siguiente ejemplo:

env[NLS_LANG] = AMERICAN_AMERICA.AL32UTF8

Así que exportar las variables o setearlas en los .profile de los usuarios no servirá de mucho.

Luego lo que resta es reiniciar el php.

Adjunto el archivo en donde se explica todo sobre la instalación, bien sea con php como modulo de apache o como fpm y la integración con oracle.

http://www.oracle.com/technetwork/database/database-technologies/php/201212-ug-php-oracle-1884760.pdf

En particular revisar las páginas 78 (php como modulo de apache, en la cual indican que deben setear las variables al arrancar el server, y la página 84 en donde explican lo que comento en el post.

Me gustaría terminar con una nota que colocan en el archivo para que ni siquiera intenten usar putenv() en éste caso.

Note: Do not set Oracle environment variables in PHP scripts with putenv(). The web server
may load Oracle libraries and initialize Oracle data structures before running your script. With
persistent connections the environment from one script may affect subsequent scripts. Using
putenv() causes hard to track errors as the behavior is not consistent for all variables, web
servers, operating systems, or OCI8 functions.

Saludos