【问题标题】:Passing arguments back and forth between PHP and shell在 PHP 和 shell 之间来回传递参数
【发布时间】:2014-09-02 19:51:34
【问题描述】:

我正在尝试从 shell 到 PHP 来回传递参数,然后再返回。在我的简单测试中,我很容易从 shell 进入 PHP,但是没有运气将字符串取出。我已经尝试了 escapeshellarg 和 escapeshellcmd,但都没有成功。

#!/bin/sh

# set a date and time variables, in the form of  YYYY-MM-DD and HH:MM:SS
dateVar=`date +%Y-%m-%d`
timeVar=`date +%H_%M`

# Launching PHP
runPHP=`which php`
$runPHP calledPHP.php $timeVar $dateVar

# Returned from PHP
passTime=$1
echo "$passTime"

passDate=$2
echo "$passDate"

PHP

<?php

setlocale(LC_CTYPE, "en_US.UTF-8");
echo "PHP called.\n";
$logTime = $argv[1]."\n";
//    echo $logTime;
$logDate = $argv[2]."\n";
//    echo $logDate;

$passTime = escapeshellarg('Time: $logTime'); 
$passDate = escapeshellarg('Date: '.$logDate);

?>

运行 shell,它返回的唯一回声是“PHP 调用”。如您所见,我在最后两个 php 变量中尝试了两种不同的语法。两者似乎都不起作用。有没有更好的功能呢?或者,我只是使用了错误的语法?

提前感谢您的任何建议

【问题讨论】:

  • 除了你的php called echo,你的 PHP 代码不会输出任何东西。而且您的 $logTime 行不正确。 PHP 中的'-quoted 字符串不会插入变量。你的$passTime 将包含$log 等...
  • 我最初找到了$passDate 的示例,这对我来说看起来是正确的,但我同意' 引用的字符串。我只是为了完整性而尝试它,因为它是我发现的一个“工作示例”,尽管它显然对我不起作用。我并没有真正尝试从 PHP 中获取任何输出,除了将字符串从 PHP 传递回包含的 shell 脚本。

标签: php shell argument-passing


【解决方案1】:

在 PHP 脚本中,您必须 echo 任何您希望 shell 脚本作为“返回值”获得的东西。请记住,您并没有真正返回任何东西。您正在打印到标准输出。 然后你必须使用someVariable=$(ExecuteScriptThatOutputsStdOut) 将该stdOut 捕获到shell 脚本中的一个变量中。

这是一个类似的问题/答案:redirect command output into variable and standard output in ksh

您的代码已修改为从 PHP 脚本获取/打印输出。 您可能还想更改其他一些奇怪的东西,尽管这是一个单独的问题。 (在 php 中赋值末尾的换行符,转义 shell args,其中包含硬编码标签。)

如果你想要单独的日期和时间,你要么必须调用两个单独的 php 脚本,或者在 shell 脚本中,你必须解析 PHP 脚本的输出并将结果分成两个变量。

Shell 脚本

#!/bin/sh

# set a date and time variables, in the form of  YYYY-MM-DD and HH:MM:SS
dateVar=`date +%Y-%m-%d`
timeVar=`date +%H_%M`

# Launching PHP
runPHP=`which php`
phpResult=$($runPHP calledPHP.php $timeVar $dateVar)

# Returned from PHP
echo "The php result is: $phpResult"

PHP

<?php

setlocale(LC_CTYPE, "en_US.UTF-8");
//echo "PHP called.\n";
$logTime = $argv[1]."\n";
//    echo $logTime;
$logDate = $argv[2]."\n";
//    echo $logDate;

$passTime = escapeshellarg("Time: $logTime");
$passDate = escapeshellarg("Date: $logDate");

echo "$passTime, $passDate";
?>

【讨论】:

  • 非常感谢您的帮助。我根本不了解我找到的示例是如何工作的。我不明白 PHP 如何将参数传递给 $1 和 $2 变量。你的例子更有意义。对于本示例可能帮助的其他任何人,显示变量的最终 shell 回显是:The php result is: 'Time: 17_36', 'Date: 2014-09-02',因此如果您只想要原始时间或日期,则需要进一步处理它,但现在至少您知道如何处理一些数据。
【解决方案2】:

当 shell 脚本调用外部程序时,它唯一可以捕获的就是程序的输出。当程序的进程退出时,程序的状态(环境、变量等)全部消失。

您必须安排让您的 PHP 脚本将数据发送到标准输出(即 echo 它),然后 shell 脚本将解析输出(通常使用 read 命令)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-28
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多