Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/07/2013, 16:23
jasv
 
Fecha de Ingreso: julio-2008
Ubicación: Caldas, Antioquia, Colombia
Mensajes: 81
Antigüedad: 16 años, 4 meses
Puntos: 4
Problema permisos Apache + PHP + Jasper (linux)

Hola a todos.

Tengo un desarrollo de una aplicación PHP que genera reportes compilado en JasperReports. La forma en que lo hace es generando una instrucción que será ejecutada por medio de la función exec de PHP.

Código PHP:
$cmdline 'java -Djava.awt.headless=true -Djava.io.tmpdir=/opt/lampp/htdocs/crm2/cache/ -classpath "custom/ZuckerReports2/resources/:custom/ZuckerReports2/resources/areas_negocio.jasper_files/:modules/zr2_Report/jasper/zuckerreports-1.0.jar:modules/zr2_Report/jasper/commons-beanutils-1.8.0.jar:modules/zr2_Report/jasper/batik-anim.jar:modules/zr2_Report/jasper/bcel-5.2.jar:modules/zr2_Report/jasper/barcode4j-2.0.jar:modules/zr2_Report/jasper/ant-1.7.1.jar:modules/zr2_Report/jasper/jasperreports-5.1.0.jar:modules/zr2_Report/jasper/jasperreports-javaflow-4.0.0.jar:modules/zr2_Report/jasper/batik-css.jar:modules/zr2_Report/jasper/servlet.jar:modules/zr2_Report/jasper/commons-digester-1.7.jar:modules/zr2_Report/jasper/batik-awt-util.jar:modules/zr2_Report/jasper/antlr-2.7.5.jar:modules/zr2_Report/jasper/xml-apis-ext.jar:modules/zr2_Report/jasper/poi-3.6.jar:modules/zr2_Report/jasper/iText-2.1.7.jar:modules/zr2_Report/jasper/jxl-2.6.10.jar:modules/zr2_Report/jasper/commons-logging-1.0.4.jar:modules/zr2_Report/jasper/batik-gvt.jar:modules/zr2_Report/jasper/spring-beans-2.5.5.jar:modules/zr2_Report/jasper/mysql-connector-java-3.1.11-bin.jar:modules/zr2_Report/jasper/batik-parser.jar:modules/zr2_Report/jasper/batik-util.jar:modules/zr2_Report/jasper/hibernate3.jar:modules/zr2_Report/jasper/groovy-all-1.7.5.jar:modules/zr2_Report/jasper/barbecue-1.5-beta1.jar:modules/zr2_Report/jasper/jcommon-1.0.15.jar:modules/zr2_Report/jasper/log4j-1.2.15.jar:modules/zr2_Report/jasper/saaj-api-1.3.jar:modules/zr2_Report/jasper/jpa.jar:modules/zr2_Report/jasper/jfreechart-1.0.12.jar:modules/zr2_Report/jasper/spring-core-2.5.5.jar:modules/zr2_Report/jasper/mondrian-3.1.1.12687.jar:modules/zr2_Report/jasper/hsqldb-1.8.0-10.jar:modules/zr2_Report/jasper/jasperreports-applet-4.0.0.jar:modules/zr2_Report/jasper/batik-script.jar:modules/zr2_Report/jasper/serializer.jar:modules/zr2_Report/jasper/commons-collections-2.1.1.jar:modules/zr2_Report/jasper/batik-svggen.jar:modules/zr2_Report/jasper/batik-dom.jar:modules/zr2_Report/jasper/rhino-1.7R1.jar:modules/zr2_Report/jasper/batik-ext.jar:modules/zr2_Report/jasper/xml-apis.jar:modules/zr2_Report/jasper/batik-bridge.jar:modules/zr2_Report/jasper/xercesImpl-2.7.0.jar:modules/zr2_Report/jasper/batik-svg-dom.jar:modules/zr2_Report/jasper/jasperreports-fonts-4.0.0.jar:modules/zr2_Report/jasper/jdt-compiler-3.1.1.jar:modules/zr2_Report/jasper/xalan-2.7.1.jar:modules/zr2_Report/jasper/png-encoder-1.5.jar:modules/zr2_Report/jasper/bsh-2.0b4.jar:modules/zr2_Report/jasper/batik-xml.jar:modules/zr2_Report/jasper/jaxen-1.1.1.jar:modules/zr2_Report/jasper/commons-javaflow-20060411.jar" at.go_mobile.zuckerreports.JasperBatchMain custom/ZuckerReports2/temp/ef6b9f27-ebd6-39b0-f3cd-51e06c6247d5/cmd.properties 2>&1 ';

exec($cmdline$output$return_var);
var_dump($output$return_var); 
Ejecutando este comando me genera el siguiente error:

Código:
Exception in thread "main" java.lang.ExceptionInInitializerError
	at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:121)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:88)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:103)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:61)
	at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:153)
	at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:55)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:170)
	at at.go_mobile.zuckerreports.JasperBatchMain.main(JasperBatchMain.java:126)
Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.io.IOException: Problem reading font data.
	at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:108)
	at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:128)
	at net.sf.jasperreports.engine.fonts.SimpleFontFace.getInstance(SimpleFontFace.java:67)
	at net.sf.jasperreports.engine.fonts.SimpleFontFamily.setNormal(SimpleFontFamily.java:99)
	at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamily(SimpleFontExtensionHelper.java:261)
	at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.parseFontFamilies(SimpleFontExtensionHelper.java:232)
	at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:193)
	at net.sf.jasperreports.engine.fonts.SimpleFontExtensionHelper.loadFontFamilies(SimpleFontExtensionHelper.java:162)
	at net.sf.jasperreports.engine.fonts.FontExtensionsRegistry.getExtensions(FontExtensionsRegistry.java:56)
	at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.getExtensions(DefaultExtensionsRegistry.java:110)
	at net.sf.jasperreports.engine.util.JRStyledTextParser.(JRStyledTextParser.java:83)
	... 8 more
Caused by: java.io.IOException: Problem reading font data.
	at java.awt.Font.createFont0(Font.java:999)
	at java.awt.Font.createFont(Font.java:876)
	at net.sf.jasperreports.engine.fonts.SimpleFontFace.(SimpleFontFace.java:100)
	... 18 more
Sin embargo, cuando ejecuto la línea "java -Djava.awt.headless=true -Djava.io.tmpdir=/opt/lampp/htdocs/crm2/cache/ -classpath "custom/Zucker...." en la terminal de linux el reporte se genera PERFECTO.

Haciendo investigaciones parece ser un problema de permisos sobre la carpeta temporal que usa java. Sin embargo con el comando -Djava.io.tmpdir=/opt/lampp/htdocs/crm2/cache/ aseguro que la carpeta es escribible.
Lo que sí pude notar es que cuando ejecuto el código PHP antes mencionado se genera un archivo temporal en esta carpeta. Pero la genera con permisos 600 y como propietario el usuario configurado para el Apache.
Cuando lo ejecuto por terminal los archivos generados allí (que por cierto son mucho más) están asignados al usuario root (porque es el usuario con el que estoy logueado supongo) y con los mismos permisos.

Estoy asumiendo que es un problema de permisos, sin embargo no estoy 100%, agradecería cualquier ayuda para desentrañar este inconveniente.

Gracias de antemano.

Saludos.