简体   繁体   中英

Call a PHP function from the command line

I have a file called address.php with a few functions in it. I want to call a specific function in that file from the command line. How?

The name of the function is called exportAddress and that function expects a single parameter.

By using the -r parameter you can run a script in-line.

php -r "require 'address.php'; exportAddress(12345);"

There are no other options. A function in PHP can only be called by a PHP script.

Use

php  -r 'include  "/var/www/test/address.php";exportAddress(1);'

where "/var/www/test/arr.php" is the file name, including path, and exportAddress() is a function inside that file.

Add this to the top of the file "/var/www/test/address.php"...

foreach ($argv as $i=>$arg )
{
    if ( $arg == "exportAddress" )
    { 
        exportAddress($argv[$i+1]);
    }
}

Then from the command line, execute:

php /var/www/test/address.php exportAddress 12345

You can make your file "somefile.php" organized as follows:

function func1(){....}
function func2(){....}
function func3(){....}
....
foreach ($argv AS $arg){
    function_exists($arg) AND call_user_func($arg);
}

Then from the command line or a Linux cronjob, you run the following command:

php /path/to/somefile.php arg1 arg2 arg3 ...

As of PHP 5.1.0 (7.1.0 on windows) PHP can be executed from the shell by running

php -a

This starts PHP's interactive shell. More info here .

With PHP's shell, running you can require files the same way you would from a file.

So if the previous command was run from the folder containing the file:

php > require 'myFile.php';

If it is in a subfolder:

php > require 'path/to/file/myFile.php';

Then execute any function defined in myFile.php.

php > myFunction(myParamsIfAny);

I guess you can use any variable defined in the same file or require any other file containing the variables needed, although I haven't tried it.

To extend on Samer Ata and Simon Rodan's answers, you can use the following to be able to execute any function with any amount of arguments:

if(isset($argv[1]) && function_exists($argv[1])) {
  $parameters = array_slice($argv, 2);
  call_user_func($argv[1], ...$parameters);
}

This is done by removing the script and function name from $argv and then using the spread operator ( ... ) to interpret each element in the array as an argument to call_user_func .

The operator is supported from PHP 5.6 onward (and 5.5 can do some of the things using functions). You can read more about it in the official PHP documentation . For completeness, this is also known as argument unpacking.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM