Witajcie!

Mam okrutny problem z funkcja exec(). Mam formularz uploadu pliku na serwer, po ktorym to uploadzie odebrany plik powinien byc przeskanowany na okolicznosc wirusow. Wybralem mks-a (statycznego) ale problem dotyczy zdaje sie kazdej binarki.

Na stronie php o wykonywaniu programow sa wyszczegolnione funkcje shell_exec() i exec().
Przy tej pierwszej jest napisane, ze: "Execute command via shell..." a o tej drugiej, ze po prostu execute. Byc moze wysuwam zbyt daleko idace wnioski, ale wynikaloby z tego, ze ta druga shella nie potrzebuje.

Otoz ja _nie_mam_ shella. Strona stoi w chrootowanym srodowisku, w ktorym shella nie ma i nie bedzie. I tu pojawia sie problem. Jesli wgram /bin/sh ponizszy kod dziala swietnie:

  1. <?
  2. $mksBinarka = '/bin/mks32';
  3. $podejrzanyPlik = '/tmp/jakis.plik';
  4. exec($mksBinarka . ' ' . $podejrzanyPlik, $nicSieTuNieZapisze, $mksKodPowrotu);
  5. echo $mksKodPowrotu;
  6. ?>


Kiedy jednak usune powloke - $mksKodPowrotu zwraca 127 (wszystkie mozliwe bledy na raz) i procz tego nie dzieje sie nic. Literalnie nic. Zadnych wpisow do logow, nic.

Jesli wywolam mks-a chrootem (wciaz bez tego nieszczesnego shella) - skanuje az milo.

Czy ktos z Was ma moze jakis pomysl jak to razem pozenic? Czy jest jakas metoda, zeby:
1. php uruchomil proces zewnetrzny bez powloki i
2. Poczekal na zakonczenie tego procesu i przyjal od niego kod powrotu.

Pozdrowienia,
Podlamany mimo.

Aha, rzecz sie dzieje na Debianie i Slackware, php 4.3.3 i 4.3.8. php jako modul apacha...