在 PHP 中使用 proc_open 函数
我正在尝试从 PHP 执行 TCL 脚本。我使用 PHP 的 proc_open 进行通信。但是我无法从 tcl 脚本中获取结果。 有人可以检查一下代码并让我知道哪里出了问题吗?
PHP代码
<?php
$app = 'tclsh84.exe';
$spec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w"));
$process = proc_open($app, $spec, $pipes);
if (is_resource($process))
{
fwrite($pipes[0], 'source sum.tcl ');
fwrite($pipes[0], 'tclsh test.tcl ');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
// echo fread($pipes[1],1024).'<hr>';
proc_close($process);
}
?>
//sum.tcl
proc sum {arg1 arg2} {
set x [expr {$arg1 + $arg2}];
return $x
}
//test.tcl
puts " the sum is [sum 10 9 ] "
I am trying to execute a TCL script from PHP. I am using PHP's proc_open for the communication .But I am unable to get the result from the tcl script .
Can someone go through the code and let me know where I am going wrong ?
PHP code
<?php
$app = 'tclsh84.exe';
$spec = array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w"));
$process = proc_open($app, $spec, $pipes);
if (is_resource($process))
{
fwrite($pipes[0], 'source sum.tcl ');
fwrite($pipes[0], 'tclsh test.tcl ');
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
// echo fread($pipes[1],1024).'<hr>';
proc_close($process);
}
?>
//sum.tcl
proc sum {arg1 arg2} {
set x [expr {$arg1 + $arg2}];
return $x
}
//test.tcl
puts " the sum is [sum 10 9 ] "
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您没有将换行符传递给应用程序 (
fwrite($pipes[0], "source sum.tcl\n")
),这可能是原因吗?否则,请确保检查函数调用的所有返回值。例如,如果第一个 fwrite() 失败,您应该尽早失败。You're not passing newlines to the application (
fwrite($pipes[0], "source sum.tcl\n")
), could that be the cause? Otherwise make sure to check all return values of your function calls. You should fail early, if the first fwrite() fails, for example.