2010-09-06 57 views
1

我已經創建了一個可以生成PDF文件的jar文件。我從這樣的命令行把它叫做 -來自PHP的調用jar

java -jar project.jar 'Author, An---A Title' 

這工作得很好,但是當我打電話從下面的代碼的PHP文件相同的jar文件它會創建一個文件,使用正確的名稱,但其空有零字節。

<?php 
    echo exec("java -jar project.jar 'Author, An---A Title'"); 
?> 

我敢肯定,這是一個問題,不與罐子(因爲它在命令行工作),我幾乎可以肯定它不是從PHP文件(因爲它創建的空文件,所以它必須已被閱讀),所以我認爲這個問題可能是在目錄上的權限?我使用的是Linux,PHP是通過OPT目錄下的XAMMP運行的。有任何想法嗎?

在此先感謝。

+1

這是您自己的JAR還是第三方的?哪一個?你瞭解Java嗎? – BalusC 2010-09-06 18:24:21

+0

我已經做了很多次,應該按預期工作。也許這是一個用戶/正確的問題。你有沒有用你的webserver/php進程使用的用戶調用命令行? – Timo 2010-09-06 18:30:50

+0

如果你可以「su」給Apache運行的用戶,你可以測試你的權限理論。 'su apache; java -jar ..etc ..「可能不行,Apache用戶通常沒有shell。可能需要一些偵探工作來找出你的Apache運行的用戶,試試'ps aux | grep apache'或'ps aux | grep httpd'。用戶應該是'ps'輸出的第一列 – Robin 2010-09-06 18:44:52

回答

0

我不知道,如果你有控制Java源代碼,但至少症狀表明它沒有呼籲OutputStream或有關文件的Writerclose()


更新:儘量shell_exec(),而不是看到的結果說什麼。可能它在中途拋出了一些異常,寫入stderr,你完全錯過了PHP代碼中的 。 exec()即只捕獲stdout

$result = shell_exec("java -jar project.jar 'Author, An---A Title'"); 
if ($result) { 
    echo nl2br($result); 
} else { 
    echo "shell_exec() failed"; 
} 
+0

這似乎並沒有奏效。我不認爲它是一個編碼問題,因爲我從命令行調用它時沒有問題。 – usertest 2010-09-06 23:04:49

+0

查看答案更新。也許你可以在stderr中找到更多有趣的信息。 – BalusC 2010-09-06 23:22:28

+0

嗨,我只是試圖更新代碼,沒有運氣。現在我確定它與權限有關。我嘗試手動創建一個文本文件,它的工作原理。然後,當我試圖挽救一些我不能的東西時。我可以保存後,我chmod 777在目錄中的一切。我必須在手動創建每個文件後執行此操作。如何確保特定目錄中的所有文件始終可寫?謝謝。 – usertest 2010-09-07 12:33:52