2010-09-10 22 views
8

Estoy tratando de ejecutar un archivo Jar en el back-end de mi código php. Pero no obtengo el resultado deseado. Hay un archivo jar que se ejecuta en segundo plano y devuelve el Page Rank de cualquiera de las palabras clave y Dominio dado a esto. Estoy adjuntando el código, por favor sugiéreme alguna solución, porque cuando lo ejecuto en el terminal, está dando salida correcta.¿Cómo ejecutar un comando de shell a través del código PHP?

Aquí está el código:

<?php 
set_time_limit(0); 
function returnJarPath() 
{ 
    $jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; 
    return $jarPath; 
} 
$jar = returnJarPath(); 
$command = "java -jar $jar aspdotnet/microsoft.com";//Passing the Argument to the Jar file. 


$shellOutput = shell_exec($command); 
    print "The Shell Output is : " ; var_dump($shellOutput);print "<br />"; 
exec($command,$executeCommmand); 
    print "The Exec returns the value : " ; var_dump($executeCommmand);print "<br />"; 
passthru($command,$passthruCommand); 
    print "The Passthru returns the value : " . $passthruCommand. "<br />"; 
?> 

simplemente he comprobado registro de errores de Apache y el último error que encontré fue:

sh: java: comando no encontrado

Pero como ya he dicho, he estado usando el mismo comando a través de SSH para ejecutar el comando Java. Por lo tanto, no existe la posibilidad de que JAVA no esté instalado en el servidor. Por favor, ayúdenme. de este lío ...

+0

¿Está obteniendo algún resultado? Cualquier error? – Buggabill

+0

@Buggabill: No. No a través de Php, pero obtengo la salida correcta a través de Terminal (consola). –

Respuesta

3

Si el archivo jar escribe en la salida estándar, puede usar exec.

Aquí es un ejemplo de cómo lo uso:

may be first: exec("cd jar dir"); // if jar fine needs to be executed from the same dir 
$output = exec("/usr/bin/java -jar $jar aspdotnet/microsoft.com"); 

Pero como usted dice:

sh: java: command not found 

Se significa que el no hay camino alias para java php. Simplemente use la ruta completa de java al ejecutable/usr/bin/java.

+0

¿Cómo debo usar tu forma de resolver mi problema? –

+0

primero encuentre la ruta java en promtp del comando de linux con este comando: which java. Devolverá/usr/bin/java. Úselo como una ruta completa en su comando "/ usr/bin/java -jar $ jar aspdotnet/microsoft.com". También es posible que deba enviar un cd al directorio jar si así lo desea el jar. – darpet

+0

Ya lo hice ... y funcionó. ¡Gracias a Bunch Darco! –

0

Dado que está llamando al java. Mi apuesta es que la salida se muestra en la consola de Java, y no en el shell, donde PHP podría extraer la información de texto.

¿Cómo resolver este dilema?

Bueno, podría escribir los resultados en un archivo, si tiene la fuente de Java para modificar, y luego leer ese archivo a través de php para obtener los resultados. La posibilidad de una colisión aquí sería bastante buena. La otra opción es hacer que Java se conecte a su base de datos MySQL (si tiene uno) y luego ejecutar el java y luego consultar la base de datos para la respuesta. Por supuesto, necesitaría pasarle a Java una forma para que ingrese los datos para insertar un registro que pueda identificar (un hash de algún tipo), nunca lo hice en Java, solo una teoría de cómo puede para hacerlo.

actualización

Es posible que desee probar la salida estándar como sugiere darko petreski como otra opción.

0

Si el código PHP se va a ejecutar en un servidor (y no a través de la línea de comandos), el usuario que ejecuta el ejecutable java es www-data, no usted.En ese caso, asegúrese de que www-data tenga los permisos para leer el archivo jar y ejecutar el ejecutable java

+0

El mensaje de error dice "java: comando no encontrado", no sobre privilegios. – darpet

0

Lo primero que verificaría/cambiaré es la línea en la función donde está construyendo la variable $jarPath esto:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar"; 

a esto:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "/myFolder/tools_new/includes/Rank.jar"; 

La barra al final puede no estar presente en $_SERVER['DOCUMENT_ROOT'], que podría causar problemas.

Estoy asumiendo que cuando se dice que se ejecuta desde la consola, que está ejecutando el comando java, así:

$ java -jar /rest/of/path/myFolder/tools_new/includes/Rank.jar aspdotnet/microsoft.com 

me aseguraría de que incluye la ruta al binario de java en la variable $command como así que ...

$command = "/path/to/java -jar $jar aspdotnet/microsoft.com"; 

el usuario propietario del proceso del servidor web no puede tener una variable $ PATH que incluye la ruta al binario de Java.

Cuestiones relacionadas