Un amigo después de tener trabajando en un servidor una aplicación con manejo de openssl y php (para facturas electrónicas), el equipo falló entonces tuvo que mudarlo a otro servidor el cuál ya tenía instalado PHP pero al pasarlo al otro servidor nos topamos con el siguiente error:
- PHP has encountered an Access Violation at 00000000 -
Después de que estuvo revisando nos encontramos que el error se producía cuando trataba de ejecutar el comando openssl_sign() a pesar de que al correr un phpinfo parecía que todo estaba configurado correctamente (ya se imaginarán nuestra frustración sin poder generar facturas).
Tuvimos que hacer varias cosas para poder resolver este problema (quizá alla otras mejores pero esta fue la que nos funciono):
1 - Instalación del OpenSSL
La instalación del OpenSSL, no estaba funcionando, por lo que tuvimos que desinstalar por completo la aplicación y reinstalarla, en este sitio http://slproweb.com/products/Win32OpenSSL.html se puede descargar la versión que utilizamos fue la Win32 OpenSSL v0.9.8x.
2 - Hacer utilizando el comando directamente
Intentamos nuevamente utilizando el comando openssl_sign() pero siguió fallando, entonces cambiamos de utilizarlo de esa forma y mejor llamar directamente al comando utilizando shell_exec() pero el problema es que al ejecutar la instruccion openssl dgst ... etc., no pasaba absolutamente nada, no marcaba error ni tampoco existía alguna entrada en el log.
El problema eran dos cosas:
a) El comando que se debe utilizar para los ejecutables para tener un poco de control en el proceso es popen() aquí algo de info del comando: http://php.net/manual/es/function.popen.php .
La forma en que lo utilizamos fue:
-------
error_reporting(E_ALL);
$gestor = popen($ComandoOpenSSL.' 2>&1', 'r');
//Estos comandos son para depurar solamente
// $leer = fread($gestor, 2096);
// echo " --> contenido: $leer ";
pclose($gestor);
-----
b) Los permisos de usuario el shell_exec y el popen no funcionaban o no hacían nada debido a los permisos de usuario, la aplicación esta montada sobre un IIS por lo que era necesario darle permisos al usuario de invitado de internet, es decir al clásico IUSR_NOMBREEQUIPO para esto encontramos este sitio: http://www.somacon.com/p255.php.
Básicamente se trata que al archivo si al cmd.exe y al directorio c:\OpenSSL se le den permisos de lectura y ejecución al usuario IUSR_NOMBREEQUIPO es posible dependiendo de lo que haga su aplicación si requieren en uno u otro darle permiso de escritura.
Una vez realizado lo anterior por fin logramos reactivar el servicio :)
Espero te sea de utilidad.
Otras Referencias:
http://www.madboa.com/geek/openssl/
http://www.openssl.org/
http://www.php.net/manual/es/openssl.requirements.php
http://actron.wordpress.com/2010/11/16/facturacion-electronica-sello-openssl-php/
http://actron.wordpress.com/2010/11/18/facturacion-electronica-sello-php-y-openssl-mas-rapido/
jueves, 18 de octubre de 2012
miércoles, 17 de octubre de 2012
Python :: Obtener de la Fecha Actual el Día, Mes y Año
El manejo de Fechas en Python considero es de lo más sencillo por lo pronto he necesitado saber el día, mes y año.
Es muy simple aquí el código:
dimefecha.py
__________________________
# -*- coding: utf8 -*-
from datetime import date
d = date.today()
print "Día: ",d.day
print "Mes: ",d.month
print "Año: ",d.year
__________________________
NOTA: La parte que tiene # -*- coding: utf8 -*- es para que acepte caracteres especiales en UTF-8 como acentos y ñ.
Genial así de simple, dejo algo más de info, ojalá te sea de utilidad.
Referencias:
http://docs.python.org/library/datetime.html
http://effbot.org/librarybook/datetime.htm
http://stackoverflow.com/questions/6289474/working-with-utf-8-encoding-in-python-source
Es muy simple aquí el código:
dimefecha.py
__________________________
# -*- coding: utf8 -*-
from datetime import date
d = date.today()
print "Día: ",d.day
print "Mes: ",d.month
print "Año: ",d.year
__________________________
NOTA: La parte que tiene # -*- coding: utf8 -*- es para que acepte caracteres especiales en UTF-8 como acentos y ñ.
Genial así de simple, dejo algo más de info, ojalá te sea de utilidad.
Referencias:
http://docs.python.org/library/datetime.html
http://effbot.org/librarybook/datetime.htm
http://stackoverflow.com/questions/6289474/working-with-utf-8-encoding-in-python-source
martes, 9 de octubre de 2012
Django + GraphViz + Mountain Lion
GraphViz es una herramienta muy útil para generar automáticamente diagramas UML de las clases que se tienen en un proyecto, tuve algunos detalles para instalarlos en Mountain Lion, y al final los pasos se resumen en lo siguiente:
- Instalar Django-Extensions utilizando el siguiente comando:
- $ sudo easy_install django-extensions
- Más información en caso de problemas aquí:
- Instalar GraphViz la herramienta que nos permitirá ver los diagramas, el cuál se puede descargar desde aquí: http://www.graphviz.org/Download_macos.php
- En mi caso descargue la versión: graphviz-2.29.20121009.0445.pkg, que esta en el área de desarrollo.
- Posteriormente es necesario instalar PyGraphViz que es la herramienta que enlaza a Python con GraphViz aquí fue donde tuve algunos detalles, por lo que tuve que descargarlo utilizando el siguiente comando:
- $sudo svn co https://networkx.lanl.gov/svn/pygraphviz/trunk pygraphviz
- Con lo anterior se creará un directorio en el equipo es importante que modifiques los permisos al directorio como lectura y escritura.
- Posteriormente modificar el archivo setup.py, esto es las líneas:
# OSX, Linux, alternate location
library_path='/usr/local/lib/graphviz'
include_path='/usr/local/include/graphviz'
NOTA: Se debe quitar el # para descomentar, una vez realizado esto guardar el archivo.
- Posteriormente ejecutar el siguiente comando:
- $ python setup.py build
- Y Finalmente utilizar:
- $ python setup.py install
$ python manage.py graph_models --all-applications -g --output=miproyecto_uml.dot
Una vez ejecutado el comando se generará el archivo miproyecto_uml.dot que se puede abrir con el programa GraphViz que quedo instalado en el segundo paso.
Con la siguiente instrucción solo realizará el diagrama de la aplicación miaplicacion:
$ python manage.py graph_models miaplicacion -g -o miaplicacion_uml.dot
Con la siguiente instrucción solo realizará el diagrama de la aplicación miaplicacion:
$ python manage.py graph_models miaplicacion -g -o miaplicacion_uml.dot
Utilizando $ python manage.py graph_models --help se puede ver un listado de comandos que se pueden utilizar.
Saludos y espero te sea de utilidad.
jueves, 4 de octubre de 2012
Python y MySQL en OS X Mountain Lion
Primero debe descargar el MySQL para Mac e instalarlo.
Posteriormente deberá descargar la utilidad de http://sourceforge.net/projects/mysql-python/, también para los amantes de la terminal pueden utilizar los siguientes comandos:
$ wget http://superb-dca2.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b4/MySQL-python-1.2.4b4.tar.gz
$ tar -xf MySQL-python-1.2.4b4.tar.gz
Una vez desempaquetado el archivo se debe editar el archivo de nombre site.cfg ubicando la línea que dice:
#mysql_config = /usr/local/bin/mysql_config
por:
mysql_config = /usr/local/mysql/bin/mysql_config
Es importante quitar el símbolo # para que deje de ser comentario y por otro lado verificar que el archivo mysql_config se encuentre en ese directorio como en mi caso. Una vez realizado lo anterior ahora se procede a correr el comando:
$ sudo python setup.py build
Si no marco ningún warning o algún error quiere decir que vamos bien, ahora ejecutamos el siguiente comando:
$ sudo python setup.py install
Finalmente corremos el siguiente comando:
$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Este último comando debe arreglar un problema que se genera al querer utilizar la librería MySQLdb.
-----------
Traceback (most recent call last):
File "", line 1, in
File "/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/MySQLdb/__init__.py", line 19, in
import _mysql
ImportError: dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib Referenced
Referenced from: /Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/_mysql.so Reason
Reason: image not found
En este sitio fue donde encontre como arreglarlo:
(http://stackoverflow.com/questions/13440147/mysqldb-for-python-2-7-on-osx-10-8-2-and-both-are-64-bit)
-----------
Para ver si quedo bien podemos entrar nuevamente a la consola de python con el comando $ python, y luego teclear:
>>> import MySQLdb
Si no aparecen errores entonces quedo listo !
Espero te sea de utilidad.
Referencias:
http://luauf.com/2008/04/24/conectar-python-con-mysql/
https://groups.google.com/forum/?fromgroups=#!topic/django-es/_NRYFHVSgtA
http://nisthaonweb.com/blog/2012/02/setting-up-django-with-mysql-with-and-without-mamp/
NOTA:
Este post fue modificado el 17/01/2013 debido a que si se utilizaba la línea
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH
Se generaba un error en OSX ML con la siguiente leyenda:
dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
Posteriormente deberá descargar la utilidad de http://sourceforge.net/projects/mysql-python/, también para los amantes de la terminal pueden utilizar los siguientes comandos:
$ wget http://superb-dca2.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b4/MySQL-python-1.2.4b4.tar.gz
$ tar -xf MySQL-python-1.2.4b4.tar.gz
Una vez desempaquetado el archivo se debe editar el archivo de nombre site.cfg ubicando la línea que dice:
#mysql_config = /usr/local/bin/mysql_config
por:
mysql_config = /usr/local/mysql/bin/mysql_config
Es importante quitar el símbolo # para que deje de ser comentario y por otro lado verificar que el archivo mysql_config se encuentre en ese directorio como en mi caso. Una vez realizado lo anterior ahora se procede a correr el comando:
$ sudo python setup.py build
Si no marco ningún warning o algún error quiere decir que vamos bien, ahora ejecutamos el siguiente comando:
$ sudo python setup.py install
Finalmente corremos el siguiente comando:
$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Este último comando debe arreglar un problema que se genera al querer utilizar la librería MySQLdb.
-----------
Traceback (most recent call last):
File "
File "/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/MySQLdb/__init__.py", line 19, in
import _mysql
ImportError: dlopen(/Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib Referenced
Referenced from: /Library/Python/2.7/site-packages/MySQL_python-1.2.4b4-py2.7-macosx-10.8-intel.egg/_mysql.so Reason
Reason: image not found
En este sitio fue donde encontre como arreglarlo:
(http://stackoverflow.com/questions/13440147/mysqldb-for-python-2-7-on-osx-10-8-2-and-both-are-64-bit)
-----------
Para ver si quedo bien podemos entrar nuevamente a la consola de python con el comando $ python, y luego teclear:
>>> import MySQLdb
Si no aparecen errores entonces quedo listo !
Espero te sea de utilidad.
Referencias:
http://luauf.com/2008/04/24/conectar-python-con-mysql/
https://groups.google.com/forum/?fromgroups=#!topic/django-es/_NRYFHVSgtA
http://nisthaonweb.com/blog/2012/02/setting-up-django-with-mysql-with-and-without-mamp/
NOTA:
Este post fue modificado el 17/01/2013 debido a que si se utilizaba la línea
export DYLD_LIBRARY_PATH=/usr/local/
Se generaba un error en OSX ML con la siguiente leyenda:
dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
martes, 2 de octubre de 2012
Firebird campos multivalorados o con multivalores (multivalue) combinado con case
El día de hoy me enfrente al detalle de obtener un reporte con multi-valores, esto es en una fila colocar los datos de una tabla y posteriormente en una sola celda aparezcan datos de otra tabla donde esta vinculada del tipo foreign key, dejo aqui la consulta para que sirva de referencia...
select
factura, fecha,
case motivoservicio
when 1 then 'Falla en Software'
when 2 then 'Garantía'
when 3 then 'Mantenimiento Preventivo'
end as servicio,
(select nombre from sucursales where CLAVE=r.clave) as sucursal,
(select list(case id_tipo
when 1 then 'Reinstalación'
when 2 then 'Virus'
when 3 then 'Configuración'
when 4 then 'Otro'
end,' / ')
from tipos_soporte a
where r.factura = a.factura group by a.factura) as soporte,
from registro_servicios r
where
cancelado = 0 and
fecha = '2012-10-02'
Esto producirá un resultado como el siguiente:
factura | fecha | servicio | sucursal | soporte |
10291 | 2012-10-02 | Falla en Software | Vallarta | Reinstalación / Virus |
10292 | 2012-10-02 | Falla en Software | Vallarta | Virus / Configuración |
10301 | 2012-10-02 | Garantía | Cihuatlán | Otro |
10306 | 2012-10-02 | Garantía | Guadalajara | Virus |
Es importante hacer mención que esta consulta será compatible con firebird versión 2.1 en delante, por el uso de LIST().
Espero les sea de utilidad.
Referencias:
http://www.janus-software.com/fbmanual/manual.php?book=psql&topic=56
http://www.developeando.com/2009/02/firebird-21-list-function.html
http://www.firebirdsql.org/refdocs/langrefupd20-select.html#langrefupd20-aggregates
http://www.firebirdsql.org/file/documentation/reference_manuals/user_manuals/html/migration-mssql-syntax.html
http://www.firebirdsql.org/manual/nullguide-aggrfunc.html
Suscribirse a:
Entradas (Atom)