我正在尝试使用passthru函数在php中执行tcl脚本。 TCL脚本在普通的unix终端上完美执行。而在php中它没有在浏览器上给出预期的结果。
我在php中使用passthru函数传递环境变量。环境变量正在正确传递,但我注意到其余的命令没有给出结果。所以我尝试执行ls命令和日期命令。
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终端上运行得很好吗?
答案 0 :(得分: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
将.tcl
文件编辑到与Apache使用的用户/组不同的用户/组(www-data:www-data
)chown
编辑.tcl
文件(如前所述),chmod o-rx
编辑目录passthru('tclsh pttest.tcl')
切换为passthru('./pttest.tcl')
,pttest.tcl
可执行文件,并添加#!/usr/bin/tclsh
作为第一行chown
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>
很抱歉,如果我无法回答您的问题,但也许这些信息可以帮助您。