Rishabh Lashkari
Rishabh Lashkari

Reputation: 638

Passing query from php to java

i em trying to fetch some query from an url and then pass them to a java program for further execution. The problem i am facing is that my php code is calling my java program but is not passing the values. till now i have worked on these codes,

PHP PROGRAM:

<?php
$phonecode= $_GET['phonecode'];
$keyword= $_GET['keyword'];
$location= $_GET['location'];
exec("C:\Users\Abc\Documents\NetBeansProjects\JavaApplication11\src\javaapplication11\main.java -jar jar/name.jar hello" . $phonecode . ' ' . $keyword . ' ' . $location, $output);
print_r($output);
?>

JAVA PROGRAM:

public class Main
{

    public static void main(String args[])
    {
        try
        {
            String phonecode = args[];
            System.out.println(args[]);
            System.out.println(phonecode);// i have only tried to print phonecode for now
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
} 

Upvotes: 0

Views: 162

Answers (2)

Elias Van Ootegem
Elias Van Ootegem

Reputation: 76405

Ok, a couple of issues with the Java code you've posted, here's a working version of what you posted:

class Main
{
    public static void main(String[] args)//String[] args, not String args[]
    {
        if (args.length == 0)
        {//check to see if we received arguments
            System.out.println("No arguments");
            return;
        }
        if ( args.length < 3)
        {//and make sure that there are enough args to continue
            System.out.println("To few arguments");
            return;
        }
        try
        {//this try-catch block can be left out
            String phonecode = args[0];//first arg
            String keyword = args[1];//second
            String location = args[2];//third
            //print out the values
            System.out.print("Phonecode: ");
            System.out.println(phonecode);
            System.out.print("keyword: ");
            System.out.println(keyword);
            System.out.print("location: ");
            System.out.println(location);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());//get the exception MESSAGE
        }
    }
}

Now, save that as a .java file, and compile it, it should churn out a Main.class file. I compiled it from the command-line:

javac main.java

I don't have netbeans installed, but I suspect the .class file will be written to a different directory, something like:

C:\Users\Abc\Documents\NetBeansProjects\JavaApplication11\bin\javaapplication11\Main.class
                                                     // note the BIN

Then, to execute, you need to run the java command, and pass it the path to this Main.class file, leaving out the .class extension. Thus, we end up with:

java /path/to/Main 123 keywrd loc

Should result in the output:

Phonecode: 123
keyword: keywrd
location: loc

In your PHP code:

exec('java /path/to/Main '.escapeshellarg($phonecode). ' '.escapeshellarg($keyword).' '.escapeshellarg($location), $output, $status);
if ($status === 0)
{//always check exit code, 0 indicates success
    var_dump($output);
}
else
    exit('Error: java exec failed: '.$status);

There are a couple of other issues, too: like $phonecode = $_GET['phonecode']; doesn't check if that $_GET param exists. If it doesn't your code will emit notices. To fix:

$phonecode = isset($_GET['phonecode']) ? $_GET['phonecode'] : '';

Other niggles include: the backslash is a special char in strings, it is used in escape sequences: \n is a newline char. PHP can deal with the *NIX directory separator /, even on windows. Use that, or escape the backslashes (C:\\Users\\Abc\\ and so on).
A file that only contains PHP code doesn't require the closing ?> tag. In fact: it is recommended you leave it out.

Upvotes: 3

Dexa
Dexa

Reputation: 1651

your java code should look like

 public static void main (String[] args) {
   for (String s: args) {
     System.out.println(s);
   }
 }

Note String[] args, not String args[]

Also on PHP side in exec you need space between string hello, and variable $phonecode if you want those to be looked as a 2 separate arguments.

Upvotes: 0

Related Questions