Shell run/execute php script with parameters

我只是一个虾纸丫 提交于 2019-12-17 10:44:23

问题


I need to execute a php file with parameters through shell.

here is how I would run the php file:

php -q htdocs/file.php

I need to have the parameter 'show' be passed through and

php -q htdocs/file.php?show=show_name

doesn't work

If someone could spell out to me what command to execute to get the php file to execute with set parameters, it would be much appreciated. If not, try to lead me the right direction.


回答1:


test.php:

<?php
print_r($argv);
?>

Shell:

$ php -q test.php foo bar
Array
(
    [0] => test.php
    [1] => foo
    [2] => bar
)



回答2:


If you have webserver (not only just php interpreter installed, but LAMP/LNMP/etc) - just try this

wget -O - -q -t 1 "http://mysite.com/file.php?show=show_name" >/dev/null 2>&1

where:

  • « -O - » — (Letter "O", not zero!) redirect "downloaded html" to stdout
  • « >/dev/null 2>&1 » — redirect stdout & stderr output to nowhere
  • « -q » — quiet wget run
  • « -t 1 » — just 1 try to connect (not like default 20)

In PHP's "exec" it'll be smth like this:

function exec_local_url($url) {
  exec('/usr/bin/wget -O - -q -t 1 "http://'. $_SERVER['HTTP_HOST'] .'/'
    . addslashes($url) . '" >/dev/null 2>&1'
  );
}

// ...

exec_local_url("file.php?show=show_name");
exec_local_url("myframework/seo-readable/show/show_name");

So, you don't need to change your scripts to handle argc/argv, and may use $_GET as usually do.

If you want jobs runned in background - see for ex. Unix/Windows, Setup background process? from php code

I use approach with wget in my cron jobs; hope it helps.




回答3:


You need to read command line parameters from $argc and $argv.

Using a question mark is something you do in a URL and has nothing to do with executing PHP from a command line.

See also: http://www.sitepoint.com/php-command-line-1/




回答4:


In addition to the other answers (Which are quite correct), you can also pass arguments as environment parameters, like this:

FOO=42 BAR=quux php test.php

They will then be available in the superglobal $_ENV.




回答5:


If you are using it from a PHP file then you can use popen() and do something like this:

$part = $show_name; //or whatever you want with spaces

$handle = popen("php -q nah.php -p=". escapeshellarg($part) . " 2>&1", "r");

This uses the escapeshellarg() function in order to wrap the $part variable in quotes (and escape any quotes inside it), so that it can be used as a shell argument safely.



来源:https://stackoverflow.com/questions/6763997/shell-run-execute-php-script-with-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!