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


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

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

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

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

 7
Author: GEOCHET, 2009-03-17

6 answers

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 ). Это должно вам помочь.

 10
Author: Mork0075, 2009-03-17 19:16:56

Если ваше приложение 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();
  }

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

 9
Author: Pablo Santa Cruz, 2009-03-17 19:35:38

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

    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);
 8
Author: Dr.Pil, 2009-03-17 20:50:00

В соответствующем примечании, если вы пытаетесь выполнить 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();
 1
Author: samaitra, 2013-01-31 14:10:11

Сегодня я столкнулся с точно такой же проблемой. Для меня то, что сработало, - это URL-кодирование параметров PHP-скрипта с использованием java.net .URLEncoder.метод кодирования.

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;
 0
Author: MansoorShaikh, 2014-08-07 07:14:31

Я столкнулся с аналогичной ситуацией, когда мне нужно вызвать функцию PHP из кода java, и я использовал приведенный ниже код для достижения этой цели. В приведенном ниже коде"/var/www/html/demo/demo.php " - это имя файла PHP, а callToThisFunction() - имя функции PHP. Надеюсь, это кому-то поможет.

public static void execPHP() {

        Process process = null;

        try {

            process = Runtime.getRuntime().exec(new String[]{"php", "-r", "require '/var/www/html/demo/demo.php'; callToThisFunction();"});

            process.waitFor();

            String line;

            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

            while ((line = errorReader.readLine()) != null) {
                System.out.println(line);
            }

            errorReader.close();

            BufferedReader outputReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            while ((line = outputReader.readLine()) != null) {
                System.out.println(line);

            }

            outputReader.close();

        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

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

    }
 0
Author: Amol Suryawanshi, 2018-09-19 12:55:56