$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.

[size=xsmall]Toevoeging op 23/10/2022 08:51:26:[/size]

Shell_exec is verwijderd uit php.ini

[size=xsmall]Toevoeging op 23/10/2022 09:19:48:[/size]

Als ik andere commande's als:

$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?
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.
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

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
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.
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.

Reageren