Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using PHP classes in a Java project

Is it possible to somehow use some of the PHP classes that come with Zend in a Java project? I'd like to think that there's always a way, but how?

like image 325
jblue Avatar asked May 19 '26 06:05

jblue


2 Answers

You could try using Quercus, a Java based PHP runtime. Other than that, you could write a web service in PHP, which is called by your Java code, or a command-line PHP script which is executed by Java.

like image 146
Jani Hartikainen Avatar answered May 21 '26 19:05

Jani Hartikainen


Question you should ask yourself first

First some questions you should ask your self, which could help use give you the best answer(because programming is a lot of times about trade-offs):

  • Can you run PHP code natively: If it is not possible to run PHP code natively via (http/CLI) then your only option would be to try if Quercus does the job.

  • How much concurrency does PHP have: Let's assume you don't call PHP much. Then I would consider writing a simple webservice(see below)because this is the easiest to implement. If not a PHP deamon which is running in the background waiting for work(PHP) to process which it receives from java message queue(deamon), and sends the message to queue.

  • How quickly should PHP respond to java: If quick then a daemon would be the way to go.

But I would first advice try to implement the easiest/quickest solution and benchmark it. The quickest solution could be written in a couple of minutes. The more difficult could take some time.

Solutions:

  • Quercus: If you can't run PHP natively(CLI/HTTP) then this is your only option.
  • Simple webservice: let's say you call http://localhost:8181/zend/doZend.php?a=a&b=b from within your Java program. This would call:

    1. doZend function with function parameters a&b from your corresponding PHP service
    2. return results to Java program which called PHP service.
  • A named pipe could also be quick/easy solution if you are in *nix. I assume this would out perform I think the queue part would perform better under high load, but this one is easier to implement.
  • MessageQueue in java/C: write a PHP deamon which reads from a queue(redis blocking list pop(*nix)/write your own java version) and puts the answer on another blocking queue from which your Java program will read the answer when available. This option is a little bit hard to implement, but if scaling is a must I think this is the way to go. The redis part could(If not possible to compile it) also be replaced by a simple java deamon which only does have a blocking queue if desired. But the redis variant is really fast/stable and I would really go with that.
like image 32
Alfred Avatar answered May 21 '26 19:05

Alfred



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!