2009-03-17 98 views
7

Tengo un script php que se ejecuta sobre una URL. (por ejemplo, www.something.com/myscript?param=xy)¿Cómo puedo ejecutar un script PHP desde Java?

Cuando este script se ejecuta en un navegador, proporciona un resultado codificado, un número negativo o positivo.

Quiero ejecutar este script desde el código Java (J2EE) y almacenar ese resultado en algún objeto.

Estoy tratando de usar httpURLConnection para eso. Establezco una conexión pero no puedo obtener el resultado. No estoy seguro si ejecuto el script en absoluto.

+2

¿Qué sucede exactamente? Queremos mensajes de error ... –

+0

no hay mensajes de error, simplemente no sabía cómo buscar el resultado – trivunm

+0

> Cualquier ayuda sería apreciada; > No estoy seguro de si ejecuto el script en absoluto. Verifique los registros de su servidor web para ver si se está ejecutando y, en caso afirmativo, cuáles son los errores. Inútil sin estos. –

Respuesta

10
public class URLConnectionReader { 
    public static void main(String[] args) throws Exception { 
     URL yahoo = new URL("http://www.yahoo.com/"); 
     URLConnection yc = yahoo.openConnection(); 
     BufferedReader in = new BufferedReader(
           new InputStreamReader(
           yc.getInputStream())); 
     String inputLine; 

     while ((inputLine = in.readLine()) != null) 
      System.out.println(inputLine); 
     in.close(); 
    } 
} 

Este fragmento es de la clase particular de Java oficial (http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html). Esto debería ayudarte.

+0

esta es la solución, muchas gracias – trivunm

8

Si su aplicación J2EE se despliega en el mismo servidor el script PHP está activado, también se puede ejecutar directamente a través de como un proceso independiente de la siguiente manera:

public String execPHP(String scriptName, String param) { 
    try { 
     String line; 
     StringBuilder output = new StringBuilder(); 
     Process p = Runtime.getRuntime().exec("php " + scriptName + " " + param); 
     BufferedReader input = 
     new BufferedReader 
      (new InputStreamReader(p.getInputStream())); 
     while ((line = input.readLine()) != null) { 
      output.append(line); 
     } 
     input.close(); 
    } 
    catch (Exception err) { 
     err.printStackTrace(); 
    } 
    return output.toString(); 
    } 

El pago se efectúa la sobrecarga de crear y ejecutar un proceso, pero no creará una conexión de red cada vez que necesite ejecutar el script. Creo que dependiendo del tamaño de su salida, uno funcionará mejor que el otro.

+0

No tengo PHP en el mismo servidor, así que esto no funciona para mí – trivunm

+0

Intenté este ejemplo, pero no se genera nada desde PHP a Java. – PPPHP

8

Si está intentando ejecutarlo a través de HTTP, recomendaría las librerías Apache Commons HTTP Client . Hacen que sea increíblemente fácil realizar este tipo de tareas. Por ejemplo:

HttpClient http = new HttpClient(); 
    http.setParams(new HttpClientParams()); 
    http.setState(new HttpState()); 

    //For Get 
    GetMethod get = new GetMethod("http://www.something.com/myscript?param="+paramVar); 
    http.executeMethod(get); 

    // For Post 
    PostMethod post = new PostMethod("http://www.something.com/myscript"); 
    post.addParameter("param", paramVar); 
    http.executeMethod(post); 
0

En la nota relacionada, si usted está tratando de ejecutar un script php de un programa Java, puede consultar el siguiente código

 Process p = Runtime.getRuntime().exec("php foo.php"); 

     p.waitFor(); 

     String line; 

     BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream())); 
     while((line = error.readLine()) != null){ 
      System.out.println(line); 
     } 
     error.close(); 

     BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     while((line=input.readLine()) != null){ 
      System.out.println(line); 

     } 

     input.close(); 

     OutputStream outputStream = p.getOutputStream(); 
     PrintStream printStream = new PrintStream(outputStream); 
     printStream.println(); 
     printStream.flush(); 
     printStream.close(); 
0

me enfrentaba exactamente el mismo problema hoy en día. Para mí, lo que funcionó fue URLEncodificar los parámetros del script PHP utilizando el método java.net.URLEncoder.encode.

String sURL = "myURL"; 
String sParam="myparameters"; 
String sParam=java.net.URLEncoder.encode(sParam,"UTF-8"); 
String urlString=sURL + sParam;  
    HttpClient http = new HttpClient(); 
    try { 
     http.getHttpResponse(urlString); 
    } catch (AutomationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    http=null; 
Cuestiones relacionadas