将查询从php传递给java

时间:2014-06-05 08:25:30

标签: java php

我试图从网址中获取一些查询,然后将它们传递给java程序以便进一步执行。我面临的问题是我的PHP代码调用我的java程序,但没有传递值。 到目前为止,我已经研究过这些代码,

PHP计划:

<?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计划:

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

2 个答案:

答案 0 :(得分:3)

好的,您发布的Java代码有几个问题,这里是您发布的工作版本:

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
        }
    }
}

现在,将其保存为.java文件,编译,它应该生成一个Main.class文件。我是从命令行编译的:

javac main.java

我没有安装netbeans,但我怀疑.class文件将被写入不同的目录,例如:

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

然后,要执行,您需要运行java命令,并将其传递给此Main.class文件的路径,省略.class扩展名。因此,我们最终得到:

java /path/to/Main 123 keywrd loc

应该导致输出:

Phonecode: 123
keyword: keywrd
location: loc

在您的PHP代码中:

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

还有其他一些问题:例如$phonecode = $_GET['phonecode'];并不检查$_GET参数是否存在。如果它没有,您的代码将发出通知。修复:

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

其他小问题包括:反斜杠是字符串中的特殊字符,用于转义序列:\n是换行符。即使在Windows上,PHP也可以处理* NIX目录分隔符/。使用它,或逃避反斜杠(C:\\Users\\Abc\\等) 包含PHP代码的文件不需要关闭?>标记。事实上:it is recommended you leave it out

答案 1 :(得分:0)

你的java代码应该是

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

注意String[] args,而不是String args[]

另外在exec的PHP端,你需要在字符串hello和变量$ phonecode之间留出空格,如果你想把它们看成是一个2个单独的参数。