5

私のautomation.phpコントローラーの中には、次の機能があります。

public function deploy_test() {

      echo json_encode(system("python --version"));
 }

ユーザーがテストを展開したい場合、testWebページのボタンをクリックすることで、そのようなタスクを実行できます。ただし、testボタンをクリックすると、出力は次のようになります。

""

一方、コマンドで同じ機能を実行すると、次のようになります。

public function deploy_test() {

    echo json_encode(system("ls -l"));
}

私が得ている:

total 32
drwxr-xr-x. 15 philippe philippe 4096 Mar  4 16:48 application
drwxrwxr-x.  2 philippe philippe 4096 Mar  4 17:28 css
-rw-r--r--.  1 philippe philippe 6357 Jan 30 11:53 index.php
drwxrwxr-x.  2 philippe philippe 4096 Feb 27 15:38 js
-rw-r--r--.  1 philippe philippe 2496 Jan 30 11:53 license.txt
drwxr-xr-x.  8 philippe philippe 4096 Jan 30 11:53 system
drwxr-xr-x. 12 philippe philippe 4096 Jan 30 11:53 user_guide

誰かが私がそれをまっすぐにするのを手伝ってくれませんか?

4

5 に答える 5

4

問題はコードや PHP にあるわけではありません。

問題はあなたの許可にあります。

php は、apache の env-vars に設定されているパーミッションを使用します。

理想的には次のように設定されます。

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

apache2 / httpd conf ファイルの下。

例えば:

実行してみてください:

<?= `whoami` ?>

シェルとブラウザを介して。

ブラウザにはおそらく www-data と表示され、シェルにはユーザー名が表示されます。AWS を使用している場合は、デフォルトで次のようになります。root

を使用する必要はありません。代わりsystem()に使用してください。exec()

私たちは次のように近いはずです:

echo json_encode(exec("python --version"));

操作を実行するには、正しいユーザーとグループを設定する必要があります。

検索:シェルでは、「 2>&1 」はどういう意味ですか?

したがって、コードは次のようになります。

echo json_encode(exec("python --version 2>&1"));

それが役に立てば幸い!

于 2013-03-16T05:58:40.373 に答える
1

これは私の本番サーバーでは問題なく動作します

public function deploy_test() {
    echo json_encode(system("python --version 2>&1"));
}

出力で

Python 2.7.3
"Python 2.7.3"

system() 自体が結果をブラウザーに出力するため、2 回印刷された unix コマンドの出力。したがって、これを回避するために、system の代わりに exec() を使用できます。

public function deploy_test() {
    echo json_encode(exec("python --version 2>&1"));
}

出力する

"Python 2.7.3"

予想通り。

于 2013-03-16T05:43:59.457 に答える
0

少しハックですが、Pythonの実行が許可されていない場合でも(「ユーザー」CIの場合)、小数点以下1桁のバージョン番号を見つけることができます。

//find python path
exec("which python", $path);

//show all subdirs in python    
exec("ls -l ".$path[0]."*", $output);
$output = implode("\n", $output);

//preg match on version numbers    
preg_match_all("#python(\d+(?:\.\d{1,2})?)#", $output , $matches);
$installed_versions = $matches[1];

//sort in reversing order
$versions_sorted_desc = array_reverse($installed_versions);

//latest version is element 0
$latest_version = $versions_sorted_desc[0];

echo $latest_version;
于 2013-03-15T10:47:13.140 に答える
0

システムは最後の行のみを返します。 システム

public function deploy_test() {

      system("python --version", $out);
      echo json_encode(implode($out));
 }
于 2013-03-05T15:24:54.990 に答える
0

私はそれがパスにないことを疑います。試す:

python コマンドへのフル パスを入力します (など/usr/bin/python --version) 。

  1. コマンド which, 'which python' で調べる

  2. コマンドラインからスクリプトを実行してみてください、「php script.php」=> Webサーバーが異なる設定をすることがあります

  3. エラー表示が有効になっていることを確認してください

    ini_set('display_errors',1);

于 2013-03-05T12:08:32.940 に答える