2017-04-07 12 views
1

マイindex.php

<?php 
    $n = 3; 
    exec("Rscript my_script.R $n", $out); 
    var_dump($out); 
<? 

my_script.R

#!/usr/bin/env Rscript 

i <- as.numeric(commandArgs(TRUE)) 
rootkea <- mongoDbConnect('rootkea') 
print(i:10) 

出力:

array(0) { } 

シェル出力:

$ Rscript my_script.R 3 
Loading required package: rJava 
Loading required package: methods 
[1] 3 4 5 6 7 8 9 10 
01興味深いことに

私はmongoDbConnect行を削除する場合my_script.Rmy_script.R変更から予測されるようにPHPの作品:

#!/usr/bin/env Rscript 

i <- as.numeric(commandArgs(TRUE)) 
#rootkea <- mongoDbConnect('rootkea') 
print(i:10) 

出力:

array(1) { [0]=> string(27) "[1] 3 4 5 6 7 8 9 10" } 

シェル出力:

$ Rscript my_script.R 3 
Loading required package: rJava 
Loading required package: methods 
[1] 3 4 5 6 7 8 9 10 
は、

データベース接続とその他の処理をmy_script.Rにする前に、の結果を出力します。 execの出力を$out引数に格納するにはどうすればよいですか?

答えて

0

コードは正常です。

この醜いハックを試してみてください:

​​3210
+0

は今、私が得た出力は次のようになります。 '文字列(0) ""' – rootkea

+0

もう一つの興味深いビットIは、印刷(I:5) '追加した場合' *前* 'mongoDbConnect '前の' print'をそのままにしておくと、出力は 'string(10)" [1] 3 4 5 "'となります。 'mongoDbConnect'が失敗したようです。しかし、私はそれがシェルから実行されていないことを確認することができます。 – rootkea

+0

PHPコードをコマンドラインまたはWebサーバーで実行していますか?それがWebサーバーにある場合 - Apache、Nginxなど - どのユーザーがスクリプトを呼び出しているかを確認し、ユーザーが実行する権限を持っていることを確認し、必要なフォルダやファイルを読み書きします。 Apacheでは、ユーザはおそらく 'www-data'です。 – jotaelesalinas

関連する問題