在php中执行tcl脚本

在php中执行tcl脚本,php,tcl,passthru,Php,Tcl,Passthru,我正在尝试使用passthru函数在php内部执行tcl脚本。TCL脚本在普通unix终端上完美执行。而在php中,它不能在浏览器上给出预期的结果 我在php中使用passthru函数传递环境变量。环境变量的传递是正确的,但是我注意到其余的命令没有给出结果。所以我尝试执行ls命令和date命令 date命令在浏览器上提供输出,而ls在浏览器上不提供任何输出 为什么会这样?这与who和其他输出量大的命令的结果相同。这里有我遗漏的东西吗 这是我的示例tcl脚本ls_sample.tcl puts "

我正在尝试使用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终端上运行完全正常?

我认为这可能是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
    .tcl
    文件与Apache使用的用户/组不同(
    www-data:www-data
  • chown
    ed了
    .tcl
    文件(与前面一样),并
    chmod o-rx
    了目录
  • passthru('tclsh pttest.tcl')
    切换到
    passthru('./pttest.tcl')
    ,使
    pttest.tcl
    可执行并添加了
    #/usr/bin/tclsh
    作为第一行
  • 与前面相同,但是
    chown
    ing
    pttest.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>

选项-索引跟随符号链接多视图
DirectoryIndex.html index.htm index.tcl index.rvt
允许超越所有
命令允许,拒绝
通融

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

真奇怪。甚至
exec/bin/ls-la
都不会产生任何输出吗?(只是试图排除在空目录中执行的可能性…)如果您使用的是tcl——为什么要使用exec date和ls?您可以使用时钟和全局命令来避免执行另一个子进程。@patthoyts我认为它们是其他东西的代理(可能是专有的)。@patthoyts:我只是在试验这些命令。我的实际脚本有所不同,但问题是相同的。另一种可能是使用
shell\u exec
执行和(或)重定向stderr,在命令中添加'2>&1',并检查结果。它们可能包含一些有用的信息,例如“tcl不在路径中”之类的信息。