PHP shell_exec whois command geen output

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Daniel van Seggelen

Daniel van Seggelen

23/10/2022 07:48:57
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$exp = shell_exec('whois domeinmetexp_date.net | grep Expiry');
echo "<pre>".$exp."</pre>";


Wat ik ook probeer er komt geen output.
Ik draait php 8.1
centos 8.

Ik snap niet dat alleen ik dit kan krijgen.
Als ik het commando via de CLI uitvoer, werkt het perfect, maar krijg niks in php terug.

Toevoeging op 23/10/2022 08:51:26:

Shell_exec is verwijderd uit php.ini

Toevoeging op 23/10/2022 09:19:48:

Als ik andere commande's als:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$whois = exec("php -v", $output, $retval);


Invoer, dan krijg ik wel :

Returned with status 0 and output: Array ( [0] => PHP 8.1.10 (cli) (built: Sep 12 2022 05:52:28) (NTS) [1] => Copyright (c) The PHP Group [2] => Zend Engine v4.1.10, Copyright (c) Zend Technologies )

En whois werkt nogmaals gewoon goed in de command line. Wat kan hier nu fout zijn?
 
PHP hulp

PHP hulp

05/02/2023 05:42:53
 
Willem vp

Willem vp

29/10/2022 00:20:16
Quote Anchor link
Niet alle registries geven de Expiry Date via whois. Probeer eens te greppen op bijvoorbeeld Status en kijk of dat wel werkt.

Edit:
In je voorbeeld gebruik je een .net-domein. De .net-registry maakt gebruik van de "Registrar Registration Expiration Date" in plaats van de "Registry Expiry Date". Greppen op "Expir" zou in dat geval wellicht een handige optie kunnen zijn.
Gewijzigd op 29/10/2022 00:40:55 door Willem vp
 
Ivo P

Ivo P

29/10/2022 13:02:24
Quote Anchor link
gebruik altijd een compleet path.

Bijvoorbeeld /usr/bin/whois

Jouw commando wordt uitgevoerd in een lege shell. En dus wordt er niet een path variabele gevuld met plekken waar standaard gezocht wordt naar een commando (een commando is meestal een programma dat uitgevoerd wordt).

Je vindt het juiste path door zelf in je shell in te kloppen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
which whois


* als jij zelf inlogt in een shell dan wordt automatisch een script uitgevoerd met een aantal settings. Bijvoorbeeld de kleur van je prompt, aliasses en ook je path-variabele.
Dat kan per user verschillen en voor php en crontab kan dat ook zo maar leeg zijn.

Daarnaast kan een instinker zijn (niet in jouw geval) dat het script vanaf een ongedefinieerde plek uitgevoerd wordt.
Dus dat je in een heel andere directory staat dan /home/daniel/ bijvoorbeeld
 
Willem vp

Willem vp

29/10/2022 16:26:05
Quote Anchor link
Het kan inderdaad nooit kwaad om absolute padnamen te gebruiken bij het aanroepen van externe programma's (alhoewel het in sommige gevallen juist dan kan misgaan; testen of het werkt blijft dus belangrijk).

Bij een standaaard installatie van PHP onder CentOS 8 (ik heb het niet gecheckt voor andere distributies) wordt $PATH van user root overgenomen voor gebruik door shell-escapes en hoeft voor de standaard Unix-commando's dus niet het absolute pad gebruikt te worden. Uiteraard kan dit nog afhankelijk zijn van instellingen in php.ini of configuraties waarbij PHP in een jail draait.
 
Ivo P

Ivo P

30/10/2022 01:47:24
Quote Anchor link
Wat ook kan helpen, is om het stuk "| grep Exp" even achterwege te laten.

Je gaat nu direct op zoek naar een stuk met een Exp datum, maar die wordt niet gevonden. In dat geval is het interessant om te zien wat er dan wél terug komt: Een melding over verkeerde parameter, niet gevonden "whois", of dat je ziet dat de gezochte term een kleine letter E heeft bijvoorbeeld.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.