2

パススルー機能を使用して、php 内で tcl スクリプトを実行しようとしています。TCL スクリプトは、通常の UNIX 端末で完全に実行されます。PHPでは、ブラウザで期待される結果が得られません。

PHPのパススルー関数を使用して環境変数を渡しています。環境変数は正しく渡されていますが、残りのコマンドが結果を出していないことに気付きました。そこで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.tclApache で使用されているユーザー/グループとは異なるユーザー/グループにファイルを編集しました ( www-data:www-data)
  • chown.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>

質問に答えられない場合は申し訳ありませんが、これらの情報が役立つかもしれません。

于 2012-10-27T09:29:08.863 に答える