2013-07-18 89 views
0

我具有一個PHP文件執行下一個命令問題:iReport的在Linux終端運行,但沒有用PHP exec命令

$cmd = '-Djava.awt.headless=true -Dlog4j.configuration=file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/log4j.properties -classpath 
"custom/ZuckerReports2/resources/:custom/ZuckerReports2/resources/areas_negocio.jasper_files/:modules/zr2_Report/jasper/jasperreports-javaflow-5.1.2.jar: 
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-applet-5.1.2.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/jasperreports-5.1.2.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/jasperreports-functions-5.1.2.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/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/joda-time-1.2.1.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/TestZucker.jar:modules/zr2_Report/jasper/batik-svg-dom.jar: 
modules/zr2_Report/jasper/jasperreports-fonts-5.1.2.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/4f558394-298d-4783-4600-51e812a588ef/cmd.properties 2>&1'; 
exec($cmd,$out,$res); 

該執行的結果是這樣的錯誤:

Exception in thread "main" java.lang.ExceptionInInitializerError 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:121) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:88) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:103) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(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.<init>(SimpleFontFace.java:108) 
    at net.sf.jasperreports.engine.fonts.SimpleFontFace.<init>(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.<clinit>(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.<init>(SimpleFontFace.java:100) 
    ... 18 more 

但是,當我在linux終端中直接運行命令時,報告生成正確。

這些是log4j的日誌文件中的行:

11:05:39,673 DEBUG ExtensionsEnvironment,main:78 - Instantiating extensions registry class net.sf.jasperreports.extensions.DefaultExtensionsRegistry 
11:05:39,683 DEBUG DefaultExtensionsRegistry,main:130 - Loading registries for cache key [email protected] 
11:05:39,684 DEBUG JRLoader,main:873 - Found resource jasperreports_extension.properties at jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-javaflow-5.1.2.jar!/jasperreports_extension.properties in classloader [email protected] 
11:05:39,685 DEBUG JRLoader,main:873 - Found resource jasperreports_extension.properties at jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-5.1.2.jar!/jasperreports_extension.properties in classloader [email protected] 
11:05:39,685 DEBUG JRLoader,main:873 - Found resource jasperreports_extension.properties at jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-functions-5.1.2.jar!/jasperreports_extension.properties in classloader [email protected] 
11:05:39,686 DEBUG JRLoader,main:873 - Found resource jasperreports_extension.properties at jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-fonts-5.1.2.jar!/jasperreports_extension.properties in classloader [email protected] 
11:05:39,695 DEBUG DefaultExtensionsRegistry,main:158 - Loading JasperReports extension properties resource jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-javaflow-5.1.2.jar!/jasperreports_extension.properties 
11:05:39,697 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.engine.style.PropertyStyleProviderExtensionFactory for property net.sf.jasperreports.extension.registry.factory.property.style.provider 
11:05:39,697 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for property.style.provider using factory class net.sf.jasperreports.engine.style.PropertyStyleProviderExtensionFactory 
11:05:39,699 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.headertoolbar.HeaderToolbarConditionalStyleProviderExtensionFactory for property net.sf.jasperreports.extension.registry.factory.header.toolbar.style.provider 
11:05:39,700 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for header.toolbar.style.provider using factory class net.sf.jasperreports.components.headertoolbar.HeaderToolbarConditionalStyleProviderExtensionFactory 
11:05:39,701 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.headertoolbar.HeaderToolbarParameterContributorExtensionFactory for property net.sf.jasperreports.extension.registry.factory.header.toolbar.parameter.contributor 
11:05:39,701 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for header.toolbar.parameter.contributor using factory class net.sf.jasperreports.components.headertoolbar.HeaderToolbarParameterContributorExtensionFactory 
11:05:39,702 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.governors.GovernorExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.governor 
11:05:39,703 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for governor using factory class net.sf.jasperreports.governors.GovernorExtensionsRegistryFactory 
11:05:39,704 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.web.util.ContentTypeMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.content.type.mapping 
11:05:39,704 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for content.type.mapping using factory class net.sf.jasperreports.web.util.ContentTypeMappingExtensionsRegistryFactory 
11:05:39,706 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.data.DefaultDataAdapterServiceExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.data.adapter.services 
11:05:39,706 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for data.adapter.services using factory class net.sf.jasperreports.data.DefaultDataAdapterServiceExtensionsRegistryFactory 
11:05:39,709 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.web.util.JacksonMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.jackson.mapping 
11:05:39,709 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for jackson.mapping using factory class net.sf.jasperreports.web.util.JacksonMappingExtensionsRegistryFactory 
11:05:39,710 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.engine.query.SQLQueryClauseFunctionsExtensions for property net.sf.jasperreports.extension.registry.factory.sql.clause.functions 
11:05:39,710 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for sql.clause.functions using factory class net.sf.jasperreports.engine.query.SQLQueryClauseFunctionsExtensions 
11:05:39,719 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.components 
11:05:39,720 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for components using factory class net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory 
11:05:39,746 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.extensions.DefaultExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.default 
11:05:39,746 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for default using factory class net.sf.jasperreports.extensions.DefaultExtensionsRegistryFactory 
11:05:39,748 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.repo.DefaultRepositoryExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.repository 
11:05:39,748 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for repository using factory class net.sf.jasperreports.repo.DefaultRepositoryExtensionsRegistryFactory 
11:05:39,749 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.util.CastorMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.castor.mapping 
11:05:39,749 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for castor.mapping using factory class net.sf.jasperreports.util.CastorMappingExtensionsRegistryFactory 
11:05:39,750 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.types.date.DateRangeQueryClauseExtensions for property net.sf.jasperreports.extension.registry.factory.date.range.clause.functions 
11:05:39,751 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for date.range.clause.functions using factory class net.sf.jasperreports.types.date.DateRangeQueryClauseExtensions 
11:05:39,754 DEBUG DefaultExtensionsRegistry,main:158 - Loading JasperReports extension properties resource jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-5.1.2.jar!/jasperreports_extension.properties 
11:05:39,758 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.engine.style.PropertyStyleProviderExtensionFactory for property net.sf.jasperreports.extension.registry.factory.property.style.provider 
11:05:39,766 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for property.style.provider using factory class net.sf.jasperreports.engine.style.PropertyStyleProviderExtensionFactory 
11:05:39,766 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.headertoolbar.HeaderToolbarConditionalStyleProviderExtensionFactory for property net.sf.jasperreports.extension.registry.factory.header.toolbar.style.provider 
11:05:39,767 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for header.toolbar.style.provider using factory class net.sf.jasperreports.components.headertoolbar.HeaderToolbarConditionalStyleProviderExtensionFactory 
11:05:39,767 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.headertoolbar.HeaderToolbarParameterContributorExtensionFactory for property net.sf.jasperreports.extension.registry.factory.header.toolbar.parameter.contributor 
11:05:39,767 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for header.toolbar.parameter.contributor using factory class net.sf.jasperreports.components.headertoolbar.HeaderToolbarParameterContributorExtensionFactory 
11:05:39,767 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.governors.GovernorExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.governor 
11:05:39,768 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for governor using factory class net.sf.jasperreports.governors.GovernorExtensionsRegistryFactory 
11:05:39,768 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.web.util.ContentTypeMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.content.type.mapping 
11:05:39,768 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for content.type.mapping using factory class net.sf.jasperreports.web.util.ContentTypeMappingExtensionsRegistryFactory 
11:05:39,768 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.data.DefaultDataAdapterServiceExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.data.adapter.services 
11:05:39,776 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for data.adapter.services using factory class net.sf.jasperreports.data.DefaultDataAdapterServiceExtensionsRegistryFactory 
11:05:39,776 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.web.util.JacksonMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.jackson.mapping 
11:05:39,776 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for jackson.mapping using factory class net.sf.jasperreports.web.util.JacksonMappingExtensionsRegistryFactory 
11:05:39,776 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.engine.query.SQLQueryClauseFunctionsExtensions for property net.sf.jasperreports.extension.registry.factory.sql.clause.functions 
11:05:39,776 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for sql.clause.functions using factory class net.sf.jasperreports.engine.query.SQLQueryClauseFunctionsExtensions 
11:05:39,777 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.components 
11:05:39,777 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for components using factory class net.sf.jasperreports.components.ComponentsExtensionsRegistryFactory 
11:05:39,777 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.extensions.DefaultExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.default 
11:05:39,777 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for default using factory class net.sf.jasperreports.extensions.DefaultExtensionsRegistryFactory 
11:05:39,777 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.repo.DefaultRepositoryExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.repository 
11:05:39,778 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for repository using factory class net.sf.jasperreports.repo.DefaultRepositoryExtensionsRegistryFactory 
11:05:39,778 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.util.CastorMappingExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.castor.mapping 
11:05:39,778 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for castor.mapping using factory class net.sf.jasperreports.util.CastorMappingExtensionsRegistryFactory 
11:05:39,778 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.types.date.DateRangeQueryClauseExtensions for property net.sf.jasperreports.extension.registry.factory.date.range.clause.functions 
11:05:39,778 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for date.range.clause.functions using factory class net.sf.jasperreports.types.date.DateRangeQueryClauseExtensions 
11:05:39,779 DEBUG DefaultExtensionsRegistry,main:158 - Loading JasperReports extension properties resource jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-functions-5.1.2.jar!/jasperreports_extension.properties 
11:05:39,779 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.functions.FunctionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.functions 
11:05:39,779 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for functions using factory class net.sf.jasperreports.functions.FunctionsRegistryFactory 
11:05:39,786 DEBUG DefaultExtensionsRegistry,main:158 - Loading JasperReports extension properties resource jar:file:/opt/lampp/htdocs/crm2/modules/zr2_Report/jasper/jasperreports-fonts-5.1.2.jar!/jasperreports_extension.properties 
11:05:39,787 DEBUG DefaultExtensionsRegistry,main:208 - Instantiating registry of type net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.simple.font.families 
11:05:39,787 DEBUG DefaultExtensionsRegistry,main:233 - Instantiating extensions registry for simple.font.families using factory class net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
+0

Java異常狀態顯示讀取字體文件時出現問題 - 因此無論是Java預期的位置(工作目錄),還是不允許讀取它(權限)。 ['chdir()'](http://php.net/chdir)到'exec()'調用之前在終端中使用的位置,以設置正確的工作目錄並重試。如果失敗,則可能是權限問題,在這種情況下,您需要確保在Java程序的所有相關文件上設置適當的權限,以便PHP運行的用戶可以根據需要訪問它們。 – DaveRandom

+0

感謝@DaveRandom,我只是做了一個測試,我認爲這確實是一個權限問題。我通過控制檯執行.php文件(php -f test.php),它也可以正常工作。事情是,PHP運行的用戶擁有對我在命令中的類路徑中詳細說明的文件的完全許可。還有其他文件我應該注意嗎? – junkie4musik

+0

那麼這個例外就是抱怨一個字體文件(儘管它沒有提示它正在嘗試讀取的路徑) - 所以你應該確保包中隨附的任何字體文件都可以訪問。字體文件最有可能的候選文件擴展名是.ttf和.otf,但還有[許多其他](http://www.fileinfo.com/filetypes/font)。它看起來像是在'/ opt/lampp/htdocs/crm2 /'下,所以首先嚐試'chmod -R 777/opt/lampp/htdocs/crm2/*',如果這樣做可以根據需要收緊權限。 – DaveRandom

回答