在PHP和shell之间来回传递参数

时间:2014-09-02 19:51:34

标签: php shell argument-passing

我正在尝试来回传递参数,从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变量中尝试了两种不同的语法。似乎都没有用。这有更好的功能吗?或者,我只是使用了错误的语法?

提前感谢任何建议

2 个答案:

答案 0 :(得分:1)

在PHP脚本中,您需要echo任何您希望shell脚本作为“返回值”获取的内容。请记住,虽然你没有真正归还任何东西。你打印到stdout。 然后,您必须使用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";
?>

答案 1 :(得分:0)

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

您必须安排将PHP脚本发送到stdout(即echo它),shell脚本将解析输出(通常使用read命令)