Harici bir kütüphane bağımlı java programını çağıran

4 Cevap java

Ben web arayüzü ile kullanmak için php bir java programı çağırmak için çalışıyorum.

Java program harici lib bağlıdır: Commons-cli-1.2.jar

Böylece temelde java programı çağırmadan önce vermeniz gerekir; ama ilk önce onu dışa sanki:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar');

: sonra da java programı diyoruz

shell_exec('java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o');

Ben her çağrı için farklı kabukları oluşturur düşünüyorum; sonra ihracat java program üzerinde herhangi bir etkisi yoktur. Ya da ben yanlış?

Aksi takdirde, bu çıkışı sunucuya bir dosya olmalıdır. Ama sadece o değil. Peki, sorun ne? Herhangi bir fikir?

edit: ben bunun için tam yolunu belirtmek zorunda böylece bu tür para_i gibi bazı parametreler, bir girdi dosya adı için duruyor çünkü Ancak olabilir? Girdi dosyası aynı çalışma dizinde ise sadece varsayalım, çünkü o olacak herhangi bir sorun olmaz?

düzenlemek-2: i ;) komut satırını kullandığınızda düzgün çıktılar

4 Cevap

haklısın, her shell_exec ayrı bir kabuk oluşturur.

env CLASSPATH=whatever java -switches

Ben kullanmak istiyorum

shell_exec('java -cp $CLASSPATH:/home/yourname/dir/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

ve (bu çok önemli) (/home/yourname demek) senin dizine gerçek yolu ile tilde (~) değiştirin. ~ Kabuk tarafından genişletilmiş ve kullanarak yeniden'' Seni kabuk hangi bağımlı olmasıdır.

Çalıştırmak istediğiniz komutları ile basit bir kabuk komut dosyası oluşturma sahipsiniz. Bu da bir sorun değil yani bir kabuk argümanlar geçebilir.

örneğin

 echo "Running Script..."
 java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $1 -d $2 -e $3 -o $4 > message

vb

Sonra bazı parametreler ile ilk komut satırından arama deneyin. Bu çıkışı yaptı? Sonra php script çağıran deneyin. Bu çıkışı yaptı? Olmadı o zaman izinlerini kontrol etmek gerekebilir. Ben sadece bir dosya yazma izni yoktu bir Java programı ile bir süre önce simiolar deneyim oldu.

Bunu böyle aramak gerekir.

shell_exec('java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

Başka bir seçenek ayrı ayrı 2 komutlar vermek için, ama bu gibi aynı kabuğa:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

edit: some shells don't let you call export while you're setting up the variable. so this may be safer than the second option above:

shell_exec('CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; export CLASSPATH; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

another edit: If none of the above work then you're going to have to do some more trouble shooting. Does your java program work from the command prompt?

java -cp $CLASSPATH:/home/user/lib/commons-cli-1.2.jar ComputePagerank -i param1 -d param2 -e param3 -o param4 > message