Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Избранное > Взаимодействие PHP с Java.


Автор: Наставник 28.12.2004, 20:31
Тут повнимательнее покопался с php.ini и обнаружил, вот такую строчку
;extension=php_java.dll, после чего очень удивился, не уж то PHP может работать с кодом Java.
Просмотрев несколько книг, нашел, что да¸PHP замечательно взаимодействует с Java. Что меня очень порадовала, т.к. открывается дополнительная мощь языка Java, и теперь отпадает проблема скрытия кода, что для меня было очень актуальным.

Кому интересно, настроить PHP для взаимодействия с Java, можно следующим образом.
1. Раскомментируем в php.ini строку extension=php_java.dll
2. Добавляем или находим (у меня уже были эти строки в php.ini, только они были замоменированы) следующие строки в php.ini

[Java]
java.class.path = "e:\Maguma Desktop\php\extensions\php_java.jar;e:\myjava\packages\"
java.home = "e:\jdk\bin"
java.library = "e:\jdk\jre\bin\server\jvm.dll"
java.library.path = "e:\Maguma Desktop\php\extensions"

// e:\myjava\packages\ - это туда вы должны помещать свои пакеты разработанные и скомпилированные на Java

3. Делаем restart Apache и используя функцию phpinfo(); видим, что поддержка Java включена

4. Теперь создадим очень простой php файл, который обращается к пакетам Java (пример взят из хелпа PHP, за что большое спасибо, добавлены собственные комментарии). Итак:

Код

<?php
// создаем ссылку на встроенные класс java.lang.System пакета java.lang  (по умолчанию всегда включен в  
Java)
$system = new Java('java.lang.System');

// вызываем методы класса System
echo 'Java version=' . $system->getProperty('java.version') . '<br />';
echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br />';
echo 'OS=' . $system->getProperty('os.name') . ' ' .$system->getProperty('os.version') . ' on '  
.$system->getProperty('os.arch') . ' <br />';

// настраиваем формат вывода даты, передавая в конструктор класса SimpleDateFormat параметры
$formatter = new Java('java.text.SimpleDateFormat',"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");

echo $formatter->format(new Java('java.util.Date'));
echo "<br /> Это работает? Как не странно работает... :--))";
?>

сохраняем в файле phpplusjava.php
в результате вызвав этот php файл в окне браузера должно отобразиться примерно следующее:

Код

Java version=1.3.1
Java vendor=Sun Microsystems Inc.
OS=Windows 2000 5.1 on x86
вторник, Декабрь 28, 2004 at 4:37:39 PM Greenwich Mean Time
Это работает? Как не странно работает... :--))

5. Теперь разработает свой очень простой класс и свяжем с PHP

Код

public class Sum {

 public String sumString(double x, double y)
 {
   double addsum = x + y;
   String str = "Sum is  " + addsum;
   return str;
 }
}


сохраняем в папке e:\myjava\packages и называем Sum.java,
далее запускаем cmd, компилируем javac sum.jsva
в результате получаем байт-код в виде Sum.class (с которым в последствии и работает, при этом код скрыт, если даже Apache по какой-либо причине сглючит).

Далее создаем фаул, под названием javatest.php в котором пишем следующее

Код

<?
  $sum = new Java("Sum");
  $value1 = 10;
  $value2 = 11;

  echo $sum->sumString($value1, $value2);
  echo '<br \>И это тоже работает :-)) ';
?>

в результате вызвав этот php файл в окне браузера должно отобразиться примерно следующее:

Код

Sum is 21.0
И это тоже работает :-))


Да уж, вроде все, принцип показал. Спасибо кто это ещё читает. smile

Поскольку я немного удивлен, такой поддержкой со стороны PHP, мой вопрос заключается в следующем, может PHP взаимодействует не только с Java?

Всем спасибо.

Автор: Opik 28.12.2004, 21:56
интересно smile
Добавлено @ 21:58
Можно побольше примеров и инфы?

Автор: Наставник 28.12.2004, 22:01
Цитата(Opr @ 28.12.2004, 21:56)
Можно побольше примеров и инфы?


Да без проблем, выложу где-то в 4:00 утра.

но у меня есть вопрос, может кто-нибудь знает ответ.

Поскольку я САМ немного удивлен, такой поддержкой со стороны PHP, мой вопрос заключается в следующем, может PHP взаимодействует не только с Java?

Автор: Opik 28.12.2004, 22:05
Тока желательно примеры не из документации, а из книги, а то первая доспупна всем smile
Ты показал примеры использования т.е вызова Java функций из PHP, можно ещё показать как например получить информацию с аппета в PHP код.

Спасибо.

Автор: Opik 28.12.2004, 22:19
Есть взаимодейсвие с .NET (http://www.devarticles.com/c/a/PHP/Using-the-.NET-Assembly-in-PHP/2/)
Только добавлю, что на данный момент эти библиотеки экспериментальные...

Автор: Наставник 28.12.2004, 22:28
1. Насчет книги, в ней было написано про взаимодействие PHP + Java всего 1 страница, пример который привел там автор, был не верно написан, сам код на Java.
2. ссылка на дополнительный пример взаимодействия java и php http://www.onlamp.com/pub/a/php/2001/06/14/php_jav.html?page=2

А вообще я очень рад, за такую связь, ведь теперь можно как минимум получить полноценное множественное наследование, даже в 4-оё версии, да и не переживать за то, что клиент будет видеть код. Уже нашел одну CMS систему написанную на Java.
http://webcontent-m1.com/m1/en/

Ещё одним плюсом - это доступ к БД, поскольку я знаю как тяжело осуществляется доступ к БД на JDBC-ODBC, и знаю как легко в PHP, то лучше всего данные брать из БД с помощью БД передавать в Java, обрабатывать и возвращать PHP.

Повторю свой вопрос ещё раз..
Поскольку я САМ немного удивлен, такой поддержкой со стороны PHP, мой вопрос заключается в следующем, может PHP взаимодействует не только с Java?

Я спрашиваю, т.к. у меня установлено Maguma Studia? а там есть возможность визуально редактировать php.ini, т.к. вот в разделе подключения расширений для php, есть одна очень замечательная галочка, что-то типа .NET -- я «свалюсь» со стула если и такую связь PHP + . NET имеется в языке PHP. С Java было все более менее понятно, когда стал просматривать php.ini, а вот о .NET пока не нашел ни одного слова.

Добавлено @ 22:30
Цитата(Opr @ 28.12.2004, 22:19)
Есть взаимодейсвие с .NET (http://www.devarticles.com/c/a/PHP/Using-the-.NET-Assembly-in-PHP/2/)


ЗАМЕЧАТЕЛЬНО, спасибо за ссылку... разбираюсь. smile

Автор: skalex 29.12.2004, 09:47
Очень интересно... Действительно работает...
Только при запуске примера из документации к PHP у меня вылетает ошибка:
Код
can't open c:\java\j2sdk\lib\tzmappings.
ZoneInfo: c:\java\j2sdk\lib\zi\ZoneInfoMappings (The system cannot find the path specified)

Такого каталога (или файла) у меня действительно нет... Но что это за ошибка? Java сама по себе у меня работает без претензий (версия 1.4.2_04).
Далее идет результат работы скрипта.
Вот мои настройки в php.ini
Код

java.class.path = "c:\php\extensions\php_java.jar"
java.home = "c:\java\j2sdk"
java.library = "c:\java\j2sdk\jre\bin\server\jvm.dll"
java.library.path = "c:\php\extensions"


P.S.
Насколько я знаю, в java.class.path надо еще добавлять путь [каталог установки java]/jre/lib/rt.jar (чтобы получить доступ к пакетам java.*, javax.* и т. д.).

Автор: Наставник 29.12.2004, 15:14
1. Думаю Вам надо прописать следующий путь
java.home = "c:\java\j2sdk\bin"
вместо
Цитата(Mace @ 29.12.2004, 09:47)
java.home = "c:\java\j2sdk"

2. Надо бы указать, где вы будете хранить свои .class, для этого надо добавить в строку
java.class.path = "c:\php\extensions\php_java.jar"
следующее
java.class.path = "c:\php\extensions\php_java.jar;c:\myjava\packages\"
соответственно, на диске c, создать папку myjava\packages и в ней хранить свои .class

Успехов.

Автор: skalex 29.12.2004, 15:43
Да все это мне понятно... Когда я попробовал другой пример (классический HelloWorld) ошибка не появилась...
Интересный факт: если настройка java.home не установлена, то все равно все работает smile smile smile .

Автор: Наставник 29.12.2004, 15:49
Цитата(Mace @ 29.12.2004, 09:47)
Только при запуске примера из документации к PHP у меня вылетает ошибка:

Если вы говорите, про пример, который приведен при создании поста, то у меня все работало... хм, странно...
Цитата(Mace @ 29.12.2004, 15:43)
если настройка java.home не установлена

очень интересно, может быть PHP читает системную переменную окружения PATH, в которой у вас прописан путь к c:\java\j2sdk\bin".

Автор: skalex 29.12.2004, 17:32
Цитата
Если вы говорите, про пример, который приведен при создании поста, то у меня все работало... хм, странно...

Я скопировал пример из документации. И кстати, запускал из командной строки без Apache.

Даже без переменной окружения работает!

Автор: Наставник 29.12.2004, 17:36
Цитата(Mace @ 29.12.2004, 17:32)
Я скопировал пример из документации. И кстати, запускал из командной строки без Apache.

Даже без переменной окружения работает!


Вообще замечательно значит Apache не нужен, а вот с тем как PHP понимает где находится javac надо бы разобраться.

Автор: skalex 29.12.2004, 18:19
Цитата
Вообще замечательно значит Apache не нужен

Собственно так и должно быть... smile

А зачем ему javac ??? Ведь все классы то уже должны быть откомпилированы....

Автор: Наставник 29.12.2004, 18:44
Цитата(Mace @ 29.12.2004, 18:19)
А зачем ему javac ???

описался. имел ввиду java.

Автор: skalex 30.12.2004, 09:21
Я попробовал даже создать простейшее окно с помощью PHP+Java.
Код TFrame.java:
Код
import javax.swing.*;
public class TFrame extends JFrame {
  public TFrame(String title) {
     super(title);
  }
}


Код TFrame.php
Код
$obj = new Java('TFrame', "Test");
$obj->setDefaultCloseOperation(2);
$obj->setSize(100, 100);
$obj->setVisible(true);


Это работает, окно появляется но сразу же пропадает... smile Может это связано с тем, что я запускаю из командной строки (просто сейчас нет возможности попробовать запустить в браузере).

Автор: Наставник 30.12.2004, 12:56
Цитата(Mace @ 30.12.2004, 09:21)
попробовал даже создать простейшее окно с помощью PHP+Java.


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

Успехов.

Автор: Се ля ви 21.2.2005, 16:34
Интеграция достаточно поверхностная - хотелось бы иметь возможность переадресации запросов на сервлеты и использование EJB, паттернов и прокладок к БД типа Hibernate - но вообще интересно уже и это.

Кинте сюда линк из форума J2EE, что ли - а то "мужики-то не знают" smile
Я вот совершенно случайно забрёл, просматривая репу Наставника...

Автор: skalex 9.3.2005, 09:50
Вот еще немного информации: http://detail.phpclub.net/article/com_dotnet

Автор: BIRD 20.7.2005, 23:35
Цитата
2. Добавляем или находим (у меня уже были эти строки в php.ini, только они были замоменированы) следующие строки в php.ini


после всех выполненых действий (1-4) у меня выскакивает сообщение:

Warning
Unknown(): Unable to load dynamic libluary './php_java.dll' - Не найден указаный модуль.

в php.ini у меня такие строки:

[Java]
java.class.path = "C:\PHP\extensions\php_java.jar;C:\myjava\package"
java.home = "C:\Java\jdk1.5.0\bin\"
java.library = "C:\Java\jdk1.5.0\jre\bin\server\jvm.dll"
java.library.path = "C:\PHP\extensions\"

в чем проблемка? smile

Автор: KSF 25.4.2006, 08:57
А у меня при запуске примера выскакивает следующая ошибка  - Apache.exe - Ошибка приложения.
Инструкция по адресу "0x01d148a9" обратиласб к памяти по адресу "0x08010200". Память не может быть "written". Использую Apache2, php5. Что не так? 

Автор: Opik 31.5.2006, 17:15
Кто нить яву на линукс ставил? 

Автор: Endeveit 6.6.2006, 12:59
Цитата(Opik @  31.5.2006,  18:15 Найти цитируемый пост)
Кто нить яву на линукс ставил? 
я ставил 

Автор: Opik 7.6.2006, 13:00
Endeveit, 
расскажи пож-та. 
А то я нашел способы только с back-end,ом, и то, какие то нерабочие (или я что то не так делал)
Поделись впечатлениями, так сказать... 

Автор: Endeveit 7.6.2006, 13:15
да я собственно зашёл на http://java.sun.com/j2se/1.4.2/download.html, слил бинарник и запустил smile
 

Автор: nerezus 14.9.2006, 08:07
Цитата

Кто нить яву на линукс ставил? 
 sudo apt-get install sun-java5-jre sun-java5-plugin sun-java5-fonts

Автор: pythonwin 24.10.2006, 09:35
http://forum.vingrad.ru/topic-117168.html

Автор: Reptor 20.6.2007, 16:28
конечно тема интересная но у меня вопрос а чем апплеты хуже или не подходят? Таже Java да ещё и Swing нормально работает

Автор: Oflashp 3.8.2007, 14:32
Интересно. Но какой хостер в случае разработки приложения общего пользования будет включать JAVA поддержку?

Автор: Platon 29.10.2007, 22:40
А у меня такой вопрос...
Можно ли запускать межстраничное приложение сайта? Было бы круто если бы такая возможность была ^_^

Я иногда изъяснаюсь непонятно, поэтому еще раз: есть сайт, а у него работает свое внутреннее приложение.

Добавлено через 1 минуту и 33 секунды
И плюс еще 
Цитата
Fatal error: Unable to create Java Virtual Machine
 иногда выглядывает.

Автор: gibbzy 25.4.2008, 20:14
думаю немного не уместно испальзовать java интерфейсы в web приложениях ибо JVM стоит далеко не у всех пользователей для всего этого JS придумали ^^

Автор: Sannis 25.4.2008, 23:06
Подняли старую тему, да ещё и не знаете, что Java используют ещё и для server-side программирования ;)

Автор: Hidrag 26.4.2008, 20:47
Цитата(gibbzy @  25.4.2008,  20:14 Найти цитируемый пост)
думаю немного не уместно испальзовать java интерфейсы в web приложениях ибо JVM стоит далеко не у всех пользователей для всего этого JS придумали ^^ 

А разве в этом случае нужна Jvm на клиенте? Разве не на сервере?

Автор: Kakadu 11.5.2008, 15:12
Народ! Неужели VJM стоит не у всех пользователей?
P.S.
Разбирался в примерах вначале темы. Так и не понял что делать, если у меня нет php_java.dll.

Автор: skyboy 11.5.2008, 16:12
Kakadu, рачь о java на стороне сервера. разве в случае использования php на сервере и клиенту требуется скачивать и устанавливать РНР?
Цитата(Kakadu @  11.5.2008,  14:12 Найти цитируемый пост)
Так и не понял что делать, если у меня нет php_java.dll. 

а он тебе нужен?
какая версия PHP? откедова брал?

Автор: Kakadu 11.5.2008, 19:28
C Java всё понял.

РНР 5.1.1. Брал из UniformServer 3.3

Автор: Sannis 11.5.2008, 19:40
Его убрали из PECL'а, видимо прохо шла разработка. Сейчас, вроде бы он, доступен на http://sourceforge.net/projects/php-java-bridge.
Если у вас *nix, то ещё подробная статья нашлась: http://www.onlamp.com/pub/a/php/2001/06/14/php_jav.html, но всё-таки 2001 год.
Можно ещё рискнуть попробывать запустить http://www.flydrivers.ru/dll-files/P/php_java.dll.html, но думаю он устарел.

P.S. думаю стоит бросить эту затею...

Автор: Andrew_D 4.3.2009, 23:31
Делаю все так, как указано выше. Но запустить не получается :((( Выдает ошибку  на строчку:

$system = new Java('java.lang.System');

Ошибка:

Fatal error: Class 'Java' not found in Z:\home\localhost\w4\index.php on line 34

Что не так еще может быть ?

Автор: nerezus 6.3.2009, 02:35
Хм, интересно ) Но смысл: проще тогда уж напрямую с джавой работать =)

Автор: pythonwin 6.3.2009, 06:40
Цитата(nerezus @  6.3.2009,  05:35 Найти цитируемый пост)
Хм, интересно ) Но смысл: проще тогда уж напрямую с джавой работать =) 

наверное есть смысл если есть два готовых или почти готовых проекта, которые нужно "связать" между собой

Автор: salamanq 7.12.2009, 17:59
у меня денвер стоит, в папку пхп5 на виртуальном диске в директорию ext поставил пекл.
в пхп.ини добавил 

[Java]
java.class.path = "Z:\usr\local\php\ext\php_java.jar;E:\myjava\packages\"
java.home = "E:\Java\jdk1.6.0_16\bin\"
java.library = "E:\Java\jdk1.6.0_16\bin\jre\bin\server\jvm.dll"
java.library.path = "Z:\usr\local\php\ext\"

соо-но диск Z виртуальный созданный денвером, но выпадает ошибка 
запускаю старт денвер выпадает окно: приложение или библиотека  Z:\usr\local\php\ext\php_java.jar не является образом программы для windows nt ....

что делать....

Автор: SamDark 8.12.2009, 18:53
Народ, есть готовое решение: http://www.caucho.com/resin-3.0/quercus/

Автор: dobrolub 18.12.2009, 08:27
уже есть версия 4.0.2. обратите внимание на performance benchmarks http://www.caucho.com/articles/quercus.pdf


вот простейший пример, качаешь резину, ставишь, запускаешь и в директорию webapps/ROOT
кладешь простейший php
test.php

<?php>
echo "Hello World!";
?>

и всё smile

у резинового php куча преимуществ, кластеризация делается на ура, быстродействие и др. да и инсталляция проще.

Автор: Mishelik 8.1.2010, 02:27
пробовал настроить на php-5.2.9,
 Сделал все как написано в начале темы.
//php_java.jar как я понял  это любое своё приложение?..
Но phpinfo()  не показывает поддержку java,и программа далее $system = new Java('java.lang.System');  не выполняется ,но ошибки тоже нет..  В чем может быть проблема? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)