Как я могу выполнить PHP-скрипт из Java?

У меня есть php-скрипт, который выполняется по URL-адресу. (например, www.something.com/myscript?param=xy)

Когда этот скрипт выполняется в браузере, он дает закодированный результат, отрицательное или положительное число.

Я хочу выполнить этот скрипт из Java-кода (J2EE) и сохранить результат в каком-то объекте.

Я пытаюсь использовать httpURLConnection для этого. Я устанавливаю соединение, но не могу получить результат. Я не уверен, что вообще исполняю сценарий.

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

Этот фрагмент из официального учебника Java ( http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html ). Это должно помочь вам.

Если ваше приложение J2EE развернуто на том же сервере, скрипт PHP включен, вы также можете выполнить его непосредственно через независимый процесс, например:

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

Вы будете оплачивать накладные расходы на создание и выполнение процесса, но вы не будете создавать сетевое подключение каждый раз, когда вам нужно выполнить сценарий. Я думаю, что в зависимости от размера вашей продукции один будет работать лучше, чем другой.

Если вы пытаетесь запустить его по HTTP, я бы порекомендовал библиотеки Apache Commons HTTP Client . Они делают невероятно легким выполнение этой задачи. Например:

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

В отношении соответствующей заметки, если вы пытаетесь выполнить php-скрипт из java-программы, вы можете ссылаться на следующий код

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

Сегодня я столкнулся с такой же проблемой. Для меня эта работа была URLEncoding параметров скрипта PHP с использованием метода 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;