
Ubuntu日本語フォーラム

ログインしていません。
Scilab と PHP を使った効率的な数学処理
http://www.ibm.com/developerworks/jp/opensource/library/os-php-scilab/
最近ubuntuを利用し始めた者です。上記のページにて興味深いphpの利用法があったので試してみたのですが、リスト1の段階で躓いてしまったので質問させていただきます。
phpのexecコマンドを実行する際にscilabが実行されず、Array()としか表示されません。phpやapacheの方で設定が必要なのでしょうか?phpinfoではscilabの置いてあるディレクトリにもPATHが通っているので問題ないように思えたのですが解決できませんでした。
Ubuntu,apacheやphpは全て現在の最新版を利用して実行しています。
ご存知の方がいらっしゃいましたらよろしくお願いします。
オフライン
以下の点を確認してみて下さい。
・自身のユーザアカウントの端末で、exce()にて実行しようとしているコマンドがちゃんと動く(結果が表示される)こと(すでに確認済みかと思いますが念のため)
・apacheのerror.logになにかエラーが出ていないかを確認。各行にタイムスタンプがついていますので、ブラウザから開いてみた時刻と照らし合わせて探してみてください。
・phpのセーフモードの設定(phpinfo()で確認できると思います)
・セーフモードの場合は、safe_mode_exec_dirの設定(これも、phpinfo()で確認できると思います)
※exec()における、セーフモードおよびsafe_mode_exec_dirの設定の関連については、phpのマニュアル( http://www.php.net/manual/ja/function.exec.php )を参照してみてください。
あとは、動作の具合を調べるために、exec()を実行する際に、第3引数を追加してステータスを得てみてください。また、exec()自体の返却値も表示するとなにかわかるかもしれません(どちらも、それぞれ、print_r()で表示すると楽です)
(大抵の説明サイトではエラー系処理がほぼすべて省略されているので、その辺を追加すると調査ができるようになります。逆にいうと、その辺を追加しないと、調査しようにも情報が足りない場合が多いです)
オフライン
weyk による投稿:
以下の点を確認してみて下さい。
・自身のユーザアカウントの端末で、exce()にて実行しようとしているコマンドがちゃんと動く(結果が表示される)こと(すでに確認済みかと思いますが念のため)
・apacheのerror.logになにかエラーが出ていないかを確認。各行にタイムスタンプがついていますので、ブラウザから開いてみた時刻と照らし合わせて探してみてください。
・phpのセーフモードの設定(phpinfo()で確認できると思います)
・セーフモードの場合は、safe_mode_exec_dirの設定(これも、phpinfo()で確認できると思います)
※exec()における、セーフモードおよびsafe_mode_exec_dirの設定の関連については、phpのマニュアル( http://www.php.net/manual/ja/function.exec.php )を参照してみてください。
あとは、動作の具合を調べるために、exec()を実行する際に、第3引数を追加してステータスを得てみてください。また、exec()自体の返却値も表示するとなにかわかるかもしれません(どちらも、それぞれ、print_r()で表示すると楽です)
(大抵の説明サイトではエラー系処理がほぼすべて省略されているので、その辺を追加すると調査ができるようになります。逆にいうと、その辺を追加しないと、調査しようにも情報が足りない場合が多いです)
早速の返答ありがとうございます。
apacheのerror.logを確認したところ以下の様なログを見つけることが出来ました。
Error: Impossible to define SCIHOME environment variable.
SCIHOME not defined.
SCIHOMEに関する環境変数が設定できていないようでした。
この問題が解決したらexec()関数の第3引数について調べてみようと思います。
オフライン
以下のように動作するようです。
1.環境変数「SCIHOME」が定義されているか調べる。定義されていれば、その値を使う(正常におわり)
2.環境変数「HOME」が定義されているか調べる。定義されていなければ、エラー(エラーでおわり)
3.「${HOME}/.Scilab/{SCIのバージョン番号}」というディレクトリを、無い部分の作成を試みる。
4.「3」でのディレクトリ作成に失敗したら、エラー(エラーでおわり)
5.「3」でのディレクトリ作成に成功したら(もしくは既にあったら)、そのパスを用いる(正常でおわり)
おそらくは、3あたりのapacheの実行ユーザの${HOME}以下にディレクトリを作成しに行って失敗していると思われます。
(上記を見るとおり、あえて特定したいというケース以外では、変数はもともと定義する必要の無い(各ユーザ毎にHOME以下に自動的に作成される)もののようです。今回は特定したいので必要になりますが・・・)
と、すると、3以降の部分は、apacheのユーザで行われても困る事になるので、どこか、SCIHOME用のディレクトリを別途作成して、環境変数「SCIHOME」に定義してあげるのが良さそうです。Read/Writeができれば、中は空でも良さそう。
オフライン
weyk による投稿:
以下のように動作するようです。
1.環境変数「SCIHOME」が定義されているか調べる。定義されていれば、その値を使う(正常におわり)
2.環境変数「HOME」が定義されているか調べる。定義されていなければ、エラー(エラーでおわり)
3.「${HOME}/.Scilab/{SCIのバージョン番号}」というディレクトリを、無い部分の作成を試みる。
4.「3」でのディレクトリ作成に失敗したら、エラー(エラーでおわり)
5.「3」でのディレクトリ作成に成功したら(もしくは既にあったら)、そのパスを用いる(正常でおわり)
おそらくは、3あたりのapacheの実行ユーザの${HOME}以下にディレクトリを作成しに行って失敗していると思われます。
(上記を見るとおり、あえて特定したいというケース以外では、変数はもともと定義する必要の無い(各ユーザ毎にHOME以下に自動的に作成される)もののようです。今回は特定したいので必要になりますが・・・)
と、すると、3以降の部分は、apacheのユーザで行われても困る事になるので、どこか、SCIHOME用のディレクトリを別途作成して、環境変数「SCIHOME」に定義してあげるのが良さそうです。Read/Writeができれば、中は空でも良さそう。
お恥ずかしながら環境変数を定義する際にhttpd.confの方に書いていました。他にも環境変数について迷っている方のためにもメモを残しておきたいと思います。
httpd.confではなく正しくは以下のディレクトリにあるenvvarsというファイルにexport文を追加(ここでは読み書き可能なディレクトリを指定)することでエラーなく動作を確認出来ました。
/etc/apache2/envvars
初めはphpの方に問題があると考えていましたが、よく考えてみるとコマンドを動かしているapacheを疑うべきでした。
オフライン