[英]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.ini
的register_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.