2009-03-17 35 views
7

Tôi có một tập lệnh php được thực hiện trên một URL. (ví dụ: www.something.com/myscript?param=xy)Làm cách nào để thực thi một tập lệnh PHP từ Java?

Khi tập lệnh này được thực thi trong trình duyệt, nó cung cấp kết quả được mã hóa, số âm hoặc số dương.

Tôi muốn thực thi tập lệnh này từ mã Java (J2EE) và lưu trữ kết quả đó trong một số đối tượng.

Tôi đang cố gắng sử dụng httpURLConnection cho điều đó. Tôi thiết lập kết nối nhưng không thể tìm nạp kết quả. Tôi không chắc liệu tôi có thực thi kịch bản hay không.

+2

Vì vậy, điều gì xảy ra chính xác? Chúng tôi muốn thông báo lỗi ... –

+0

không có thông báo lỗi, tôi chỉ không biết cách lấy kết quả – trivunm

+0

> Bất kỳ trợ giúp nào sẽ được đánh giá cao; > Tôi không chắc chắn liệu mình có thực thi kịch bản hay không. Kiểm tra nhật ký máy chủ web của bạn để xem liệu nó có đang được thực hiện hay không, và nếu có thì lỗi là gì. Vô dụng nếu không có những thứ này. –

Trả lời

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(); 
    } 
} 

Đoạn mã này là từ hướng dẫn Java chính thức (http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html). Điều này sẽ giúp bạn.

+0

đây là giải pháp, cảm ơn rất nhiều – trivunm

8

Nếu ứng dụng J2EE của bạn được triển khai trên cùng một máy chủ các tập lệnh PHP được bật, bạn cũng có thể thực hiện trực tiếp thông qua như một quá trình độc lập như thế này:

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(); 
    } 

Bạn sẽ trả phí của việc tạo và thực hiện một quá trình, nhưng bạn sẽ không tạo kết nối mạng mỗi khi bạn cần thực thi tập lệnh. Tôi nghĩ rằng tùy thuộc vào kích thước của đầu ra của bạn, một sẽ thực hiện tốt hơn so với khác.

+0

Tôi không có PHP trên cùng một máy chủ vì vậy điều này không làm việc cho tôi – trivunm

+0

Tôi đã thử ví dụ này nhưng không có gì được xuất từ ​​PHP sang Java. – PPPHP

8

Nếu bạn đang cố chạy nó qua HTTP, tôi khuyên bạn nên sử dụng thư viện Apache Commons HTTP Client . Họ làm cho nó vô cùng dễ dàng để thực hiện loại nhiệm vụ này. Ví dụ:

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

Trên lưu ý liên quan nếu bạn đang cố gắng để thực hiện một kịch bản php từ một chương trình java, bạn có thể tham khảo đoạn code sau

 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

tôi phải đối mặt với chính xác cùng một vấn đề ngày hôm nay. Đối với tôi, điều đó đã làm việc là URLEncoding các tham số tập lệnh PHP bằng cách sử dụng phương thức 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; 
Các vấn đề liên quan