如何将字符串从PHP传递到TCL并执行脚本



我想从我的php传递字符串,例如

<?php
str1="string to pass"
#not sure about passthru
?>

和我的tcl脚本

set new [exec $str1]#str1 from php
puts $new

这可能吗?请让我知道我被这个

最简单的机制是运行TCL脚本作为运行接收脚本的子过程(您可能将其放置在与PHP代码相同的目录中,或放入其他位置(解码它通过的参数以及您对它们的需要。

因此,在PHP方面,您可能会这样做(请注意重要在此处使用escapeshellarg!我建议在AS测试案例中使用带有空格的字符串,以说明您的代码是否正确引用事物(:

<?php
$str1 = "Stack Overflow!!!";
$cmd = "tclsh mycode.tcl " . escapeshellarg($str1);
$output = shell_exec($cmd);
echo $output;
echo $output;
?>

在TCL侧,参数(之后脚本名称(放在全局argv变量中的列表中。该脚本可以通过任意数量的列表操作将它们拉出。这是一种方法,使用lindex

set msg [lindex $argv 0]
# do something with the value from the argument
puts "Hello to '$msg' from a Tcl script running inside PHP."

另一种方法是使用lassign

lassign $argv msg
puts "Hello to '$msg' from a Tcl script running inside PHP."

注意(如果您使用的是TCL的exec来调用子程序(,则可以有效地为您引用参数。(实际上,出于技术原因,它实际上是在Windows上确实如此。(TCL不需要escapeshellarg之类的东西,因为它将参数作为一系列字符串,而不是单个字符串,因此更多地了解正在发生的事情。


传递值的其他选项是按环境变量,管道,文件内容和套接字。(或者说是更异国情调的。(过程间交流的一般话题在两种语言中都会变得非常复杂,并且涉及很多权衡;您需要非常确定您要做什么,以便明智地选择一个选择。

这是可能的。

test.php

<?php
$str1="Stackoverflow!!!";
$cmd = "tclsh mycode.tcl $str1";
$output = shell_exec($cmd);
echo $output;
?>

mycode.tcl

set command_line_arg [lindex $argv 0]
puts $command_line_arg 

相关内容

  • 没有找到相关文章

最新更新