1

Symfony2 アプリケーション内から情報管理システムへの自動送信を実装しようとしています。他の誰かが投稿用の perl スクリプトを書いています。コントローラを使用してエンティティから値を取得し、スクリプトに引数として渡すだけです。

コマンド ラインから短い php スクリプトを実行して、perl スクリプトをテストしました。

<?php

$perlscript = 'test_submit_to_lims.pl';

$output = \shell_exec('perl ' . $perlscript . " 'arg1' 'arg2' 'arg3' ");
echo $output;

?>

これは、アプリケーションに必要ないくつかの関心のある値を含む文字列を返します。

Perlスクリプトと依存ファイルを、Symfonyプロジェクトフォルダーと同じレベルの依存関係と呼ばれるフォルダーに入れました

コントローラーで同様のコードを使用しようとしました:

...

$arg1 = $form->get('arg1')->getData();
$arg2 = $form->get('arg2')->getData();
$arg3 = $form->get('arg3')->getData();
$pathToScript = '/opt/sfprojects/dependencies';
$perlScript = "$pathToScript/test_submit_to_lims.pl";
$output = \shell_exec('perl '.$perlScript." $arg1 $arg2 $arg3 ");
var_dump($output);

...

これにより、「ネットワーク エラー: 500 内部サーバー エラー - http://www2-mywebsite.org/myEntity/create」が表示されます。

エラーの原因が私のphpコードの単純なものなのか、Symfony構成ファイルで何らかの方法でperlを有効にする必要があるのか​​ 、スクリプトの場所、ファイルのアクセス許可などのようなものなのかはわかりません.

私がどこで間違っていたのかについてのアイデアをいただければ幸いです。

4

1 に答える 1

1

Web サーバーと Symfony のログをチェックして、発生しているエラーの種類を確認してください。symfony のログは、プロジェクトの app/logs ディレクトリにあります (デフォルト)。サーバー ログの場所は、構成によって異なります。

開発コントローラー (app_dev.php) を使用して、エラーの詳細 (スタック トレースを含む) を確認できることに注意してください。

実際にコマンドを実行するには、Process コンポーネントの使用を検討してください。

于 2012-11-08T21:23:47.600 に答える