2010-09-06 15 views
1

J'ai un fichier jar que j'ai créé et qui peut générer un fichier PDF. Je l'ai appelé à partir de la ligne de commande comme celui-ci -Call jar from PHP

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

Cela fonctionne bien, mais quand je l'appelle le même fichier jar à partir d'un fichier PHP avec le code suivant crée un fichier avec le nom correct mais son vide et a zéro octet.

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

Je suis sûr que cela est un problème pas avec le pot (car il fonctionne à partir de la ligne de commande) et je suis presque sûr que ce ne est pas à partir du fichier PHP (car il a créé le fichier vide, il doit ont été lus), donc je pense que le problème pourrait être avec les autorisations sur le répertoire? J'utilise linux et le PHP fonctionne avec XAMMP qui se trouve dans le répertoire OPT. Des idées?

Merci d'avance.

+1

Est-ce votre JAR ou celui d'un tiers? Laquelle? Comprenez-vous Java? – BalusC

+0

Je l'ai fait beaucoup de fois, cela devrait fonctionner comme prévu. Peut-être que c'est un problème d'utilisateur/droit. Avez-vous appelé la ligne de commande avec le même utilisateur que celui utilisé par votre serveur/php? – Timo

+0

Si vous pouvez "su" à l'utilisateur qu'Apache exécute que vous pouvez tester votre théorie des autorisations. 'su apache; java -jar ..etc..Peut ne pas fonctionner, l'utilisateur Apache n'a souvent pas de shell. Pourrait avoir besoin d'un travail de détective pour trouver l'utilisateur sur lequel Apache fonctionne, essayez 'ps aux | grep apache' ou 'ps aux | grep httpd'. L'utilisateur devrait être la première colonne de la sortie 'ps' – Robin

Répondre

0

Je ne suis pas sûr si vous avez le contrôle sur le code source Java, mais au moins les symptômes indiquent qu'il n'appelle pas close() sur le OutputStream ou Writer du fichier en question.


Mise à jour: essayez shell_exec() au lieu de voir ce que dit le résultat. Probablement, il a jeté une exception à mi-chemin qui a été écrit au stderr que vous avez complètement manqué dans le code PHP. Le exec() ne capture que le stdout.

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

Cela ne semble pas avoir fonctionné. Je ne pense pas que ce soit un problème de codage car je n'ai aucun problème à l'appeler depuis la ligne de commande. – usertest

+0

Voir la réponse à la question Probablement, vous pouvez trouver des informations plus intéressantes dans le stderr. – BalusC

+0

Salut, je viens de vous essayer de mettre à jour le code sans aucune chance. Maintenant, je suis sûr que c'est quelque chose à voir avec les permissions. J'ai essayé de créer manuellement un fichier texte, qui fonctionne. Puis quand j'essaie de sauver quelque chose que je ne peux pas. Je peux enregistrer après je chmod 777 tout dans le répertoire. Je dois le faire après chaque fichier que je crée manuellement. Comment puis-je m'assurer que tous les fichiers d'un répertoire spécifique sont toujours accessibles en écriture? Merci. – usertest