exec("ping ...") werkt niet in php maar wel in shell

Status
Niet open voor verdere reacties.

Cyroq

Gebruiker
Lid geworden
7 apr 2009
Berichten
180
Hoi programmeurs,

Ik heb een Raspberry Pi met webserver draaien, waarmee ik wil traceren wanneer mijn smartphone verbinding maakt met het draadloze netwerk. Als ik dit commando direct als commando invoer krijg ik netjes te zien dat mijn mobiel op het netwerk zit:
Code:
sudo ping -c 1 192.168.1.51 && echo "Welcome home" || echo "Nobody home"
Maar als ik dit commando via een php script uitvoer is het resultaat altijd 'Nobody home', zelfs als ik in plaats van mijn ip-adres bijvoorbeeld www.google.com invoer.
Code:
$read = exec('sudo ping -c 1 192.168.1.51 && echo "Welcome home" || echo "Nobody home"');
echo $read;
Het lijkt wel alsof "exec('ping..')" niet werkt wanneer deze door een phpbestand wordt uitgevoerd, maar ik heb geen idee waar ik het probleem moet zoeken. Wie kan me helpen?
 
a. Mogelijk werkt het niet vanwege sudo in het commando als daar gebruikersinput bij gevraagd wordt (zoals het root wachtwoord; je meldt daar niets over)...
b. Aansluitend op
If you're trying to run a command such as "gunzip -t" in shell_exec and getting an empty result, you might need to add 2>&1 to the end of the command, eg:

Won't always work:
echo shell_exec("gunzip -c -t $path_to_backup_file");

Should work:
echo shell_exec("gunzip -c -t $path_to_backup_file 2>&1");
zou (zie ook hier) kunnen werken:
Code:
$read = exec('sudo ping -c 1 192.168.1.51 2>&1 && echo "Welcome home" || echo "Nobody home"');
echo $read;

Tijs.
 
Bedankt voor je reactie.
Ik ga er vanuit dat het script wel wordt uitgevoerd, aangezien ik netjes een resultaat terug krijg. Het is alleen niet het resultaat wat ik verwacht.

Toevoegen van 2>&1 levert nieuwe inzichten op! Zonder sudo te gebruiken krijg ik deze foutmelding terug:
Code:
ping: icmp open socket: Operation not permitted
En met sudo deze error:
Code:
sudo: no tty present and no askpass program specified

Het gaat blijkbaar inderdaad mis met de sudo rechten. Ik heb begrepen dat ik in sudoers een bepaald script kan opgeven waarvoor geen wachtwoord nodig is in de trant van dit:
Code:
www-data ALL = NOPASSWD: /var/www/html/phpbestand.php
maar dat verandert niets. Wat gaat hier nog fout?
 
Laatst bewerkt:
Deze link volgend:
Kijk eens in /etc/sudoers
Staat daar:
Defaults requiretty
dan is het niet toegestaan om sudo commando's te draaien zonder tty of in een pseudo tty

In dat geval, test eens met, in /etc/sudoers, het toevoegen van een commentaarteken (=#)
#Defaults requiretty

Tijs.
 
Ik zie er niets staan over requiretty, wel env_reset, mail_badpass en secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin".

Ik heb ondertussen wel de oorzaak gevonden: niet het php-bestand moet een uitzondering zijn in sudoers, maar /bin/ping. Die toegevoegd en het werkt! Erg bedankt voor het zetje in de goede richting.
 
Ah... veel beter dat je een onschuldig commando als ping toevoegt [ipv. een heel script etc.]

Graag nog even de vraag de status opgelost geven.

Tijs.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan