2

我正在尝试使用 passthru 函数在 php 中执行 tcl 脚本。TCL 脚本在普通的 unix 终端上完美执行。而在 php 中,它没有在浏览器上给出预期的结果。

我正在使用 php 中的 passthru 函数传递环境变量。环境变量已正确传递,但我注意到其余命令没有给出结果。所以我尝试尝试执行 ls 命令和 date 命令。

date命令在浏览器上提供输出,而在浏览器ls上不提供任何输出。

为什么会这样?who与其他具有大输出的命令的结果相同。我在这里有什么遗漏吗?

这是我的示例 tcl 脚本 ls_sample.tcl

puts "entering tcl"
set date_variable [exec date]
puts $date_variable
set ls_variable [exec ls]
puts $ls_variable 

浏览器上的示例输出:

executing tclscript entering tcl Thu Oct 18 23:23:38 PDT 2012 

为什么ls不打印?而它在unix终端上工作得很好?

4

1 回答 1

1

我认为这可能是 Apache/Php/您的系统配置问题。我刚刚在我的机器下尝试了相同的示例并得到了正确的结果:

entering tcl Sat Oct 27 11:08:03 CEST 2012 blog forum index.rvt launchtcl.php pttest.tcl sd test.tcl test2.tcl

我也试图通过做这些事情来重现这个问题,但它总是对我有用:

  • ls /usr/bin, 以获得更长的字符串
  • who, 对于品种
  • chown将文件编辑到与 Apache ( ).tcl使用的用户/组不同的用户/组www-data:www-data
  • chown编辑.tcl文件(如前所述)和chmod o-rx目录
  • 从 to 切换passthru('tclsh pttest.tcl')passthru('./pttest.tcl'),使其pttest.tcl可执行并添加#!/usr/bin/tclsh为第一行
  • 和以前一样,但是chowningpttest.tcl文件

这些测试都没有给我你的问题。我现在正在为我使用的测试目录添加 Apache 配置。

<Directory />
    Options -Indexes FollowSymLinks MultiViews
    DirectoryIndex index.html index.htm index.tcl index.rvt
    AllowOverride All
    Order allow,deny
    allow from all
</Directory>

对不起,如果我不能回答你的问题,但也许这些信息可以帮助你。

于 2012-10-27T09:29:08.863 回答