Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wołanie Javy z PHP
Forum PHP.pl > Forum > PHP
ppk
Dzień dobry!

Mam następujący problem:

Na serwerze jest plik /cr.php o następującej treści:

  1. <?php
  2. exec("java -jar klasa.jar plik.xml");


Pominąwszy kwestię, że powyższe rozwiązanie nie działa spod frameworka symfony (czego nie rozumiem, ale nie ważne), skrypt wykazuje dziwne zachowanie:

Gdy wołam ze swojego komputera skrypt:

http://adres.serwera/cr.php

wszystko działa tak jak trzeba, klasa Javy produkuje odpowiednie pliki itd.

Natomiast, gdy wołam ten skrypt z poziomu PHP, np.:

  1. <?php
  2. $plik = file_get_contents("http://localhost/cr.php");


Java zwraca error (problem z odczytem pliku).

Zupełnie nie rozumiem tego zachowania, będę wdzięczny za jakąkolwiek wskazówkę na temat tego dlaczego zachowanie skryptu jest tak różne w podobnych w końcu sytuacjach.

Pozdrawiam,
/PPK
michaJlS
a jesteś pewien, że w tym drugim przypadku to java zwraca błąd?
ppk
Tak, zdecydowanie. Właśnie dlatego tego nie rozumiem.

Pozdrawiam,
/PPK
michaJlS
i głupie pytanie, ale http://adres.serwera/ wskazuje na to samo co http://localhost/ ? ew. wklej błąd z java
fander
Kolego, file_get_contents nie wykonuje ci kodu zawartego w pliku który podajesz w ścieżce, pobierasz w ten sposób zawartość pliku (jak sama nazwa funkcji wskazuje content = zawartość), błąd pewnie zwraca ci php, ponieważ nie jest w stanie pobrać pliku ze ścieżki (pewnie masz zablokowane na serwerze wywoływanie zdalnych plików). Aby działało to albo użyj include($sciezkaDoPliku) lub skorzystaj z curla
mortus
@fander Użycie file_get_contents w ten sposób:
  1. $zmienna = file_get_contents("http://localhost/cr.php");
spowoduje wykonanie skryptu php, i pobranie treści przez ten skrypt wygenerowanej. Oczywiście odpowiednie dyrektywy php muszą być włączone. Gdyby natomiast atrybut wspomnianej funkcji był ścieżką bezwzględną, to wtedy zostanie wczytana zawartość pliku (choć w przypadku pliku php wszystko się posypie).

Co do problemu: co znaczy stwierdzenie "gdy wołam ze swojego komputera skrypt"? Zajrzyj również do manuala PHP.
Crozin
Cytat
Pominąwszy kwestię, że powyższe rozwiązanie nie działa spod frameworka symfony
Symfony nie ma absolutnie nic do tego.

Być może program w Javie jest wywoływany przez użytkownika, który nie ma uprawnień do odczytywania/zapisywania plików w danym katalogu.
ppk
Dziękuję za pomoc, znalazłem już rozwiązanie swojego problemu, które leżało zupełnie gdzie indziej, tzn. nie było związane ani z Javą ani z Symfony.

Powód był bardzo prozaiczny i bardzo głupi: nie zamykałem generowanego pliku (wołając z Symfony), więc klasa Javy nie miała co przetwarzać sad.gif

Pozdrawiam,
/PPK
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.