我正在使用 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");
PHP 没有接收到
$argv[1]
变量。有任何想法吗? 最佳答案
您在 comment 中说您正在使用 php5-cgi
来运行脚本。php5-cgi
是解释器的 CGI version;其目的是供 Web 服务器使用。
如果要在命令行上运行脚本,则必须使用 CLI 版本的解释器。它的名称是 php
(或者,可能是您系统上的 php5
)。
解释器 handle some things differently 的 CLI 和 CGI 版本。变量 $argc
和 $argv
的内容就是这些差异之一。
只有在 register_argc_argv
中将 On
选项设置为 1
(或 php.ini
)时,CGI 版本才会填充它们。出于性能原因,此选项通常是 CGI 的 Off
。
另一方面,无论 $argc
选项的值如何,CLI 版本都会使用命令行中收到的参数填充 $argv
和 register_argc_argv
变量。
正如@andlrc 在 their answer 中还指出的那样,在 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"
,并且 shell 将 foo bar
作为单个参数传递给 PHP 脚本。 print_r($argv)
输出:Array
(
[0] => waveform.php
[1] => foo bar
)
作为旁注,
{
中缺少 copy($mp3, "$tmpname}_0.mp3");
。它应该是“copy($mp3, "${tmpname}_0.mp3");
”关于php - 将变量从 BASH 传递给 PHP,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37691597/