我正在使用 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 版本都会使用命令行中收到的参数填充 $argvregister_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/

10-12 12:20
查看更多