Я создал php-код для запуска java-файлов и предоставления результата пользователю через веб-браузер. В основном я пытаюсь создать интерактивную веб-консоль на основе barebones. Однако это также должно работать для java-файлов, которые имеют пользовательский ввод, такой как объект Scanner.
Вот пример java-файла для тестирования.
import java.util.Scanner; public class JavaScannerExample { public static void main (String[] args) { // create a scanner so we can read the command-line input Scanner scanner = new Scanner(System.in); // prompt for the user's name System.out.print("Enter your name: "); // get their input as a String String username = scanner.next(); // prompt for their age System.out.print("Enter your age: "); // get the age as an int int age = scanner.nextInt(); System.out.println(String.format("%s, your age is %d", username, age)); } }
В настоящее время я решил, как это сделать в php. С предопределенным набором параметров.
<?php $JAVA_HOME = "C:\Java\jdk1.7.0_79"; $PATH = "$JAVA_HOME\bin"; putenv("JAVA_HOME=$JAVA_HOME"); putenv("PATH=$PATH"); $result = shell_exec("javac JavaScannerExample.java 2>&1"); $progout = ""; $inputlist = array("32", "Mike"); if ($result == ""){ $options = ["bypass_shell" => true]; $proc=proc_open("java JavaScannerExample", array( array("pipe","r"), array("pipe","w"), array("pipe","w") ), $pipes,NULL,NULL,$options); if (is_resource($proc)) { $line_limit = 1024; $bool = true; while ($bool) { sleep(1); $b = proc_get_status($proc)["running"]; if ($b == 1) { // There are still questions $inputval = array_pop($inputlist); $q = fread($pipes[1], $line_limit); $progout = $progout.$q.' '.$inputval.'<br>'; fwrite($pipes[0],$inputval."\n"); }else{ //Program finished executions.. Get final line $bool = false; $finaloutput = fread($pipes[1], $line_limit); $progout = '<br>'.$progout.$finaloutput; fclose($pipes[0]); fclose($pipes[1]); }//End Else }//End While echo $progout; }//End Proc }//End If else{ echo $result; } ?>
Вот результат выполнения PHP-кода с образцом java-файла
Enter your name: Mike Enter your age: 32 Mike, your age is 32
Если вы посмотрите на линию
$inputlist = array("32", "Mike");
Я передаю параметры жестко закодированным образом.
Однако я хочу, чтобы пользователь мог вводить данные через веб-браузер для параметров. Поэтому вместо строки
$inputval = array_pop($inputlist);
Мне нужно приостановить выполнение PHP-кода. Затем, получите параметр от пользователя и сохраните его в переменной $ inputval и выполните php-код. Я думаю, нам, возможно, придется использовать javascript / jquery, используя ajax для этого. Но я не знаю, как это сделать.
Пожалуйста, помогите мне с этим вопросом. Пример кода / Псевдокод будет высоко оценен.