How can I execute a PHP script from Java?

后端 未结 6 374
迷失自我
迷失自我 2020-12-16 03:01

I have a php script which is executed over a URL. (e.g. www.something.com/myscript?param=xy)

When this script is executed in a browser it gives a coded result, a neg

相关标签:
6条回答
  • 2020-12-16 03:44
    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();
        }
    }
    

    This snippet is from the offical Java tutorial (http://java.sun.com/docs/books/tutorial/networking/urls/readingWriting.html). This should help you.

    0 讨论(0)
  • 2020-12-16 03:46

    If your J2EE app is deployed on the same server the PHP script is on, you can also execute it directly through as an independent process like this:

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

    You will pay the overhead of creating and executing a process, but you won't be creating a network connection every time you need to execute the script. I think that depending on the size of your output, one will perform better than the other.

    0 讨论(0)
  • 2020-12-16 03:51

    I faced exactly the same issue today. For me, that thing which worked was URLEncoding the PHP script parameters using java.net.URLEncoder.encode method.

    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 讨论(0)
  • 2020-12-16 03:52

    I faced similar situation where I need to call PHP function from java code and I have used below code to achieve this. In below code "/var/www/html/demo/demo.php" is the PHP file name and callToThisFunction() is the PHP function name. Hope this helpful for someone.

    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 讨论(0)
  • 2020-12-16 03:53

    If you are trying to run it over HTTP I would recommend the Apache Commons HTTP Client libraries. They make it incredibly easy to perform this type of task. For example:

        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 讨论(0)
  • 2020-12-16 04:06

    On the related note if you are trying to execute a php script from a java program , you may refer the following code

            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 讨论(0)
提交回复
热议问题