18.21. Passing Input to a Program
Problem
You want to pass input to an external program run from inside a PHP script. You might, for example, use a database that requires you to run an external program to index text and want to pass text to that program.
Solution
Open a pipe to the program with popen( )
, write to the pipe
with fputs( )
or fwrite( ), then
close the pipe with pclose( )
:
$ph = popen('program arg1 arg2','w') or die($php_errormsg);
if (-1 == fputs($ph,"first line of input\n")) { die($php_errormsg); }
if (-1 == fputs($ph,"second line of input\n")) { die($php_errormsg); }
pclose($ph) or die($php_errormsg);Discussion
This example uses popen( ) to call the
nsupdate
command, which submits Dynamic DNS
Update requests to name servers:
$ph = popen('/usr/bin/nsupdate -k keyfile') or die($php_errormsg);
if (-1 == fputs($ph,"update delete test.example.com A\n")) { die($php_errormsg); }
if (-1 == fputs($ph,"update add test.example.com 5 A 192.168.1.1\n"))
{ die($php_errormsg); }
pclose($ph) or die($php_errormsg);Two commands are sent to nsupdate via
popen( ). The first deletes the
test.example.com A record, and the second adds a
new A record for test.example.com with the
address 192.168.1.1.
See Also
Documentation on popen( ) at
http://www.php.net/popen and pclose( ) at http://www.php.net/pclose;
Dynamic DNS is described in RFC 2136 at
http://www.faqs.org/rfcs/rfc2136.html.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access