2011-05-25 16 views
-1

私はこの作業を試みるのに数時間を費やしましたが、成功しませんでした。私はこのサイトのよくある質問を検索してコードを表示しましたが、何も見つかりませんでした。引き数を指定したphp execはまだ動作しません

私は、Linuxサーバ上のコマンドラインでうまく動作するコマンドを持っていますが、PHPのexec関数に渡してLinuxサーバ上のapacheで実行すると、そのスクリプトからの出力ではなく、呼び出されるスクリプト。

myTool -arg1 "Arg1 value" -arg2 value2 -arg3 value3 

私が試してみました: は

をexecしするにescapeshellargを経由して1つの文字列 (-arg1 "Arg1 value" -arg2 value2 -arg3 value3)として、すべて一緒に引数を送る

をexecしするescapeshellcmdを経由してその全体のコマンドを送信する

をexecしするために、その全体のコマンド文字列を送信します

escapeshellarg経由で個別に引数を送信する

01結果は何も出力または引数が正しく渡されていないことを示唆していると呼ばれているスクリプトの使用情報、のいずれかではありません

のexecするescapeshellcmd経由:(-arg1 "Arg1 value"など)を個別の引数を送る

。ここで

はコードです:

$data = array(); 
$commandexec = "/tools/myTool "; 
$arg1 = "-arg1 \"Arg1 value\""; 
$arg2 = "-arg2 value2"; 
$arg3 = "-arg3 value3"; 
$arguments_escaped = escapeshellarg($arg1). " ". escapeshellarg($arg2). " ".escapeshellarg($arg3); 
$command_escaped_arguments = $commandexec . $arguments_escaped; 
print "<br>command_escaped_arguments: ". $command_escaped_arguments ."<br>"; 
$result = exec($command_escaped_arguments, &$data); 
print_r($data); 

これはApacheサーバ上のPHPスクリプトの出力です:

command_escaped_arguments: /tools/myTool '-arg1 "Arg1 value"' '-arg2 value2' '-arg3 value3' 

Array ([0] => 
[1] => myTool version 1.0 
[2] => Usage: myTool -arg1 "Some value" 
[3] => -arg3 option1|option2 
[4] => [-arg2 value] 
[5] =>) 

誰もが私が行方不明です何のアイデアを持っていますか?

+1

適切なコードを投稿できますか? (例は引用符で囲まれていません) – konsolenfreddy

+1

実行エラー(パス/許可)を検出するために 'error.log'を調べてください。 – mario

答えて

2

ここで問題となるのは、スイッチだけでなく値もエスケープしていることです。出力では、スイッチが一重引用符で囲まれていることがわかります。これは、myToolプログラムのgetopts呼び出しが、-arg1 "Arg1 Value"を文字列値を持つスイッチではなく単一の文字列引数として解釈している可能性があることを意味します。

ソリューションは、値の一部ににescapeshellargすることです:

など。

$cmd = '/tools/myTool ' . '-arg1 ' . escapeshellarg("Arg1 Value") . ' -arg2 ' . escapeshellarg('Arg2 Value') etc etc... 

これは、あなたが何をしているかを達成するはずです。

関連する問題