Php запуск java скрипта

Запуск Java-файла из PHP

Я нашел пару других вопросов с моей проблемой, но решения не сработали. У меня есть веб-страница на моем локальном сервере, чтобы вы могли вводить текст для целого класса Java. Когда нажата кнопка отправки, я хочу, чтобы вывод отображался. Используя shell_exec, я могу скомпилировать java-файл. Тем не менее, я ничего не получаю, когда пытаюсь запустить его.

shell_exec("javac /folder/Test.java"); // works echo shell_exec("/usr/bin/java folder.Test"); // nothing is returned 

Я решил использовать полный путь к java, когда прочитал, что он решил проблему для кого-то другого. Когда я запускаю:

из командной строки он работает.

Файл Test.java выглядит так:

package folder; public class Test < public static void main(String[] args)< System.out.println("testing"); >> 

EDIT: Я не мог заставить w0rldart работать. Я действительно могу увидеть что-то, когда я попробую Матье. Я попытался добавить параметр -classpath (я не уверен, правильно ли я его использую)

echo shell_exec("java -classpath ./folder/ Test 2>&1"); 

Я получаю ту же ошибку, что и без -classpath:

Exception in thread "main" java.lang.NoClassDefFoundError: Test Caused by: java.lang.ClassNotFoundException: Test at java.net.URLClassLoader$1.run(URLClassLoader.java:217) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:205) at java.lang.ClassLoader.loadClass(ClassLoader.java:321) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294) at java.lang.ClassLoader.loadClass(ClassLoader.java:266) Could not find the main class: Test. Program will exit. 

ЭТО РАБОТАЕТ: Просто нужно было снять период с

echo shell_exec("java -classpath ./folder/ Test 2>&1"); //error echo shell_exec("java -classpath /folder/ Test 2>&1"); //works 

Я очень сомневаюсь, что это изменит ситуацию. Но, чтобы быть уверенным, вы попробовали добавить 2> и 1 после своей команды?

echo shell_exec("/usr/bin/java folder.Test 2>&1"); 

Я не думаю, что system.out.println использует stderr для отображения своего вывода, но, возможно, стоит попробовать …

Если вы хотите использовать тестовый класс из пакета папок, тогда Test.class необходимо сохранить в папке с именем folder. Тогда вам нужно иметь родительский каталог папки в CLASSPATH.

Поэтому, если ваша конфигурация такова: /rootdir/foo/folder/Test.class вы можете запустить тест следующим образом: java -classpath /rootdir/foo folder.Test .

Я думаю, что такое поведение одинаково, если вы используете java из shell_exec php.

Источник

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

Я пишу простой сценарий веб-загрузки. Целью является загрузка файла с использованием php, а затем вызов java-программы для обработки этого файла.
Я выполнил работу по загрузке файла, но я не могу запустить java-программу из сценария php.
Я пробовал exec() , shell_exec() и system() без каких-либо результатов.
Для этой команды я использовал « java Test », « java < directory >/Test », « /usr/bin/java < directory >/Test », даже настроил приложение как файл jar без каких-либо результатов. Фактическая строка кода, которую я использовал:

Обычно нет выхода. Однако, если у меня есть только shell_exec(«java») , тогда отображается последняя строка справки из java (« show splash screen with specified image »), которая показывает, что команда выполнена. Если я использую, например, s hell_exec(«whoami») я возвращаю «никто», что является правильным. Единственное, что делает java-файл, это создать файл, чтобы я мог видеть, что приложение успешно выполнено (приложение выполняется успешно, если я запускаю его в командной строке). Я установил разрешения для java-файла на 777, чтобы исключить любую возможность ошибок разрешения. Я боролся с этим некоторое время, пытаясь использовать все варианты без каких-либо результатов – файл никогда не создается (файл создается с абсолютным путем, так что он не создается, и я просто не могу найти файл). У кого-нибудь есть идеи?

Я боролся с этим некоторое время, пытаясь использовать все варианты без каких-либо результатов – файл никогда не создается (файл создается с абсолютным путем, так что он не создается, и я просто не могу найти файл). У кого-нибудь есть идеи?

То, что я думаю, проблема. Apache работает как «nobody» group? (Apache user?), Который выполнит java-скрипт, который попытается создать файл на диске где-нибудь. Я предполагаю, что у него нет разрешения на запись в это место. вы должны использовать эту папку так, чтобы пользователь Apache мог писать в эту папку.

Во-первых, я хотел бы указать вам, что вызов exec () из сценария может действительно взорвать ваш сервер. Я бы посоветовал вам использовать что-то вроде redis (см. Ниже).

Во-вторых, я думаю, что знаю, в чем проблема. Сначала вы должны попытаться запустить простой пример ниже, который отлично подходит для меня.

Сначала убедитесь, что разрешения установлены правильно. Потому что apache работает как никто (в большинстве случаев).

Я пробовал этот простой тест самостоятельно на ubuntu с php, установленным из репо.

Или вы можете попробовать 1 из следующих решений (что было бы даже лучшим решением):

  1. Напишите свою Java-программу как веб-сервис, например, поверх атмосферы-spade-сервера (простая / встроенная банка). Это можно было бы написать безумно быстро. Но при высокой нагрузке это будет не лучший вариант, я думаю. Тем не менее, я думаю, что для вас это будет более чем достаточно быстро. Даже в этом случае это будет намного быстрее, чем выполнение этого, потому что у вас не будет накладной JVM. Может взорвать ваш сервер, не так быстро, как exec ()
  2. Сделайте блокировку pop / push из структуры списка redis (* nix). Это будет довольно легко писать на * nux, потому что есть клиентские библиотеки для java / php. Скорость будет лучше всего, я думаю, потому что redis написан на C. Я сам использую redis.
  3. Используйте JMS, например, activemq . Также довольно легко писать, потому что хорошая поддержка библиотеки. Я сам не использовал JMS. Я использую решение redis. Скорость, я думаю, будет немного меньше, чем решение redis.

Я не знаю, но я пришел на крест PHP-JAVA-моста, может быть, это может помочь

Я тестировал это с отчетами Jasper, и он работает очень хорошо. Это позволит вам расширять Java-классы с помощью PHP или просто использовать класс Java, это был PHP.

use java\lang\String as JString; require_once("javabridge/java/Java.inc"); class String extends JString < function toString () < return "hello " . parent::toString(); >> $str = new String("Java"); echo $str->toString(); 
$temp = new Java('java.sql.Timestamp'); $javaObject = $temp->valueOf('2007-12-31 0:0:0'); $params = new Java("java.util.HashMap"); $params->put("text", "This is a test string"); $params->put("date",$javaObject); 

Возможно, он имеет отношение к пути, по которому выполняется exec. Возможно, вам нужно будет явно определить свой путь к классам с абсолютным путем к вашим .class или jar-файлам при вызове java.

&1");//shows # of errors echo "
"; echo exec("java theNameOfYourJavaProgram 2>&1");//this line executes it echo "
"; echo shell_exec("javac theNameOfYourJavaProgram.java 2>&1 ");//compiles it ?>

Источник

Запустите файл класса Java из скрипта PHP на веб-сайте

У меня есть веб-сайт и вы хотите разрешить пользователю запускать Java-файл на сервере с веб-сайта.

Я хочу, чтобы пользователь нажал кнопку, которая будет запускать файл Java на сервере. Все, что будет напечатано в стандарте программой Java, будет распечатано на веб-сайте для просмотра пользователем.

Как это можно сделать (вызов программы Java из PHP и подача стандарта из файла Java обратно на сайт PHP в режиме реального времени)?

Спасибо за ответы о том, как запустить программу Java с PHP. Однако я также хочу иметь возможность, так как программа Java печатает на stdout, где она будет печатать много текста по мере его выполнения, чтобы иметь возможность распечатывать это на веб-странице, чтобы пользователь мог видеть, на каком этапе Программа Java находится в ее исполнении.

Как это можно сделать и требует ли он каких-либо дополнительных AJAX или JavaScript или что-то в этом роде?

Функция PHP exec() – это путь, но вы должны быть очень осторожны в том, что вы разрешаете выполнить. Другими словами, не полагайтесь на ввод пользователя, поскольку это может потенциально поставить под угрозу весь ваш сервер.

Вызов приложения запуска Java-приложения с помощью exec, вы можете выполнить любое приложение Java с PHP, например

Поскольку вы упоминаете в реальном времени, я бы предложил настроить PHP на Java Bridge. Инициализация JVM по каждому запросу занимает много ресурсов.

PHP / Java Bridge – это реализация потокового сетевого протокола на основе XML, который может использоваться для подключения собственного скриптового движка, например PHP, Scheme или Python, с виртуальной машиной Java или ECMA 335. Он до 50 раз быстрее, чем локальный RPC через SOAP, требует меньше ресурсов на стороне веб-сервера. Он быстрее и надежнее, чем прямая связь через интерфейс Java Native, и он не требует дополнительных компонентов для вызова процедур Java из PHP или PHP-процедур с Java.

Проверьте exec и другие функции выполнения программы . Но делайте это очень осторожно, или это рецепт эксплойтов.

Я предпочел бы переносить класс Java в апплет Java, который затем можно вызвать из javascript-запроса на стороне клиента: см. http://www.rgagnon.com/javadetails/java-0170.html

В противном случае, если вызов выдает много текста на стандартный вывод или класс должен запускаться на сервере из-за системных зависимостей, вызов из php exec – это путь, но вам, вероятно, понадобится что-то вроде cometd для отображения текст на клиенте в режиме реального времени. Существуют реализации для различных наборов инструментов javascript, таких как Dojo или jQuery.

Для серверной стороны здесь, похоже, реализована комета в php.

Является ли функция passthru какой-либо функцией?

Источник

Форум PHP программистов ► PHP практикум ► PHP для знатоков

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35082
На форуме:
Карма:

Имеется ява приложение myprj.class. требуется его запустить в php скрипте . Знаю можно это сделать с помощью тега html или в самом коде php через функцию exec.
Подскажите как лучше или может ещё как-то можно.

Завсегдатай форума

Профиль
Журнал
Группа: ★ЛжеЭксперт★

Сообщений: 26770
Пользователь №: 21350
На форуме:
Карма: 756

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35082
На форуме:
Карма:

Завсегдатай форума

Профиль
Журнал
Группа: ★ЛжеЭксперт★

Сообщений: 26770
Пользователь №: 21350
На форуме:
Карма: 756

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35082
На форуме:
Карма:

Сообщений: 9606
Пользователь №: 26630
На форуме:
Карма: 664

Профиль
Группа: Пользователь
Сообщений: 19
Пользователь №: 35082
На форуме:
Карма:

Сообщений: 837
Пользователь №: 32378
На форуме:
Карма: 50

Завсегдатай форума

Профиль
Журнал
Группа: ★ЛжеЭксперт★

Сообщений: 26770
Пользователь №: 21350
На форуме:
Карма: 756

HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker

Источник

Читайте также:  Python matplotlib pyplot show
Оцените статью