繁体   English   中英

将变量从BASH传递到PHP

[英]Passing a variable from BASH to PHP

我正在使用bash脚本来触发PHP脚本,但似乎无法将变量导入PHP。

Bash脚本,其中$ 1 = mymusic.mp3

php /var/www/html/wave/waveform.php $1;

PHP

$mp3 = '/var/www/html/processed/' . $argv[1];
copy($mp3, "$tmpname}_0.mp3");

$argv[1]变量只是不被PHP接收。 有任何想法吗?

您在注释中说您正在使用php5-cgi运行脚本。

php5-cgi是解释器的CGI版本 它的目的是供Web服务器使用。

如果要在命令行上运行脚本,则必须使用解释器的CLI版本。 它的名称是php (或系统上的php5 )。

解释程序的CLI和CGI版本对某些内容的处理方式不同 变量$argc$argv是这些差异之一。

仅当php.iniregister_argc_argv选项设置为On (或1 )时,CGI版本才会填充它们。 出于性能原因,对于CGI,此选项通常为“ Off ”。

另一方面,无论register_argc_argv选项的值如何,CLI版本都使用在命令行中接收的参数填充$argc$argv变量。

正如@andlrc在其答案中也指出的那样,在shell脚本中构造命令行时,应将$1括在双引号中,以防止shell将其拆分为单词:

php /var/www/html/wave/waveform.php "$1"

例如,如果$1的值是foo bar (两个字),则您的原始用法将呈现为php waveform.php foo bar并且print_r($argv)显示:

Array
(
    [0] => waveform.php
    [1] => foo
    [2] => bar
)

另一方面,如果将$1括在引号中,则命令行将变为php waveform.php "foo bar" ,并且外壳程序会将foo bar作为单个参数传递给PHP脚本。 print_r($argv)输出:

Array
(
    [0] => waveform.php
    [1] => foo bar
)

附带说明, copy($mp3, "$tmpname}_0.mp3");缺少{ 它可能应该显示为“ copy($mp3, "${tmpname}_0.mp3");

$argv[1]应该可以工作,请考虑以下示例:

% php -r 'var_dump($argv);' hello
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(5) "hello"
}

但是,您应该引用$1否则它将被分词和乱序显示:

php /var/www/html/wave/waveform.php "$1"

我以任何尝试都无法正常工作,所以最后我只安装了php5-cgi,现在这样称呼它...

BASH

php-cgi -f /var/www/html/wave/waveform.php var=$1;

PHP

$filename = $_GET["var"];
$mp3 = '/var/www/html/processed/' . $filename;
copy($mp3, "$tmpname}_0.mp3");

第一次完美工作。

希望它对其他人有所帮助,因为我浪费了很多时间试图使它以其他各种方式工作而没有成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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