Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / April 2006

Tip: Looking for answers? Try searching our database.

Problem with a JAVA program launched in a PHP program

Thread view: 
sylsau - 28 Apr 2006 13:55 GMT
Hello,

I wrote a JAVA program which uses the JAVA API JDOM 1.0 (of this site
www.jdom.org)
I put the archive jdom.jar in the directory /usr/share/java/jdom.jar
and I added this path in the CLASSPATH variable.
The program runs normally when I launch it in a unix shell.

Now, I want to launch this JAVA program in a PHP program with system()
function for example. I have an Apache server with PHP 4 who runs. The
variable safe_mode of PHP is at off. So, the program PHP can launch
executable program.

But, It doesn't because of CLASSPATH problem I think. So, to understand
where is the problem I recuced my programs and this is the 2 programs :

- program JAVA :

import java.io.*;
import org.jdom.*;
import org.jdom.input.*;

class TestSAX{

    TestSAX()
    {

    }

    void instanciateSAXBuilder()
    {
            //On crée une instance de SAXBuilder
            try{
            SAXBuilder sxb = new SAXBuilder();

            System.out.println("Constructeur de SAX");

            }catch(Throwable e){

                e.printStackTrace();
                }
    }

}

public class Test {
 public static void main (String[] args) {

   PrintStream ps = null;

   try{

  ps = new PrintStream("./test.txt");

   }catch(Exception e){

       e.printStackTrace();

   }

   System.setOut(ps);
   System.setErr(ps);
   System.out.println("test");

    try {
     System.out.println("Step 1");
     TestSAX ts = new TestSAX();
     System.out.println("Step 2");
     ts.instanciateSAXBuilder();
     System.out.println("Step 3");
   } catch (Throwable t) {
     System.out.println("FAILED");
     t.printStackTrace();
   }

 }

}

- program PHP

<?php

    $line = system("/usr/bin/java -cp /usr/share/java/jdom.jar Test",
$retval);
    echo"Statut : ".$retval;

?>

On my computer, Apache runs on the user www-data. And i tried to
execute my program JAVA on this user and it runs normally. Besides, the
CLASSPATH of the user www-data contain the path to jdom.jar

This is the error message (contained in the file test.txt) after the
execution of the PHP program :

test
Step 1
FAILED
java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder
    at Test.main(Test.java:51)

So, it seems that the program doesn't find the SAXBuilder class what it
wants to tell that the CLASSPATH is not good when PHP launch the
program JAVA. But, I put the option -cp by launching the JAVA program
in the PHP program so the CLASSPATH put in this option should be good.

To be sure that this option could run, I made the following PHP program

$line = system("/usr/bin/javac Test.java", $retval);

After that, it doesn't compile the program. So, I tried that :

$line = system("/usr/bin/javac -cp /usr/share/java/jdom.jar Test.java",
$retval);

And there, the program is normally compiled !
So, it's strange that here the CLASSPATH runs and in the other example
it doesn't run.

Somebody will have and idea about modifications that I can do on the
programs ?

Thanks to help me.

Sylvain
Steve Sobol - 29 Apr 2006 22:53 GMT
> Now, I want to launch this JAVA program in a PHP program with system()
> function for example. I have an Apache server with PHP 4 who runs. The
> variable safe_mode of PHP is at off. So, the program PHP can launch
> executable program.

What is the classpath inside the shell launched by the call to system() ??

Signature

Steve Sobol, Professional Geek ** Java/VB/VC/PHP/Perl ** Linux/*BSD/Windows
Apple Valley, CA
Resident of Southern California -
the home of beautiful people and butt-ugly traffic jams



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.