【问题标题】:Executing tcl script inside php在php中执行tcl脚本
【发布时间】:2012-10-09 17:33:53
【问题描述】:

我正在尝试使用 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 终端上完全可以正常工作?

【问题讨论】:

  • 这很好奇。甚至exec /bin/ls -la 也不会产生任何输出吗? (只是试图排除您在空目录中执行的可能性......)
  • 如果您使用 tcl -- 为什么要执行日期和 ls?您有时钟和 glob 命令来避免执行另一个子进程。
  • @patthoyts 我假设它们是其他东西的代理(可能是专有的)。
  • @patthoyts:我只是在试验这些命令。我的实际脚本有所不同,但问题是相同的。

标签: php tcl passthru


【解决方案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,适合各种
  • chowned 将 .tcl 文件添加到与 Apache 使用的用户/组不同的用户/组 (www-data:www-data)
  • chowned .tcl 文件(和以前一样),chmod o-rx 目录
  • passthru('tclsh pttest.tcl') 切换到passthru('./pttest.tcl'),使pttest.tcl 可执行并添加#!/usr/bin/tclsh 作为第一行
  • 和以前一样,但chowning 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>

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

【讨论】:

  • 其他可能性是使用shell_exec 执行和(或)重定向stderr,在命令中添加`2>&1`,并检查结果。它们可能包含一些有用的信息,例如“tcl 不在 PATH 中”或类似的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
相关资源
最近更新 更多