Home > Archive > PHP Programming > April 2006 > Problem to launch a program with system()
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Problem to launch a program with system()
|
|
| sylsau 2006-04-28, 7:59 am |
| 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=E9e une instance de SAXBuilder
try{
SAXBuilder sxb =3D new SAXBuilder();
System.out.println("Constructeur de SAX");
}catch(Throwable e){
e.printStackTrace();
}
}
}
public class Test {
public static void main (String[] args) {
PrintStream ps =3D null;
try{
ps =3D 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 =3D 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 =3D 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 =3D system("/usr/bin/javac Test.java", $retval);
After that, it doesn't compile the program. So, I tried that :
$line =3D 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
| |
| Colin McKinnon 2006-04-30, 6:59 pm |
| sylsau wrote:
> 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.
>
<snip>
> 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 check the CLASSPATH environment variable from within PHP. If its not
there. set it before running your java prog.
C.
|
|
|
|
|