[PHP-users 6631] Re: cannot execute binary file とエラーが出て原因がわかりません。

Masaya Kato php-users@php.gr.jp
Wed, 03 Apr 2002 11:54:53 +0900


加藤です。

On Wed, 3 Apr 2002 11:25:09 +0900
"makino" <makino@keysfactory.co.jp> wrote:

> 牧野です。
> 
> ----- Original Message -----
> From: "Masaya Kato" <kato@nil.co.jp>
> To: <php-users@php.gr.jp>
> Cc: <kato@nil.co.jp>
> Sent: Wednesday, April 03, 2002 11:01 AM
> Subject: [PHP-users 6624] Re: cannot execute binary file とエラーが出て原因がわかりません。
> 
> 
> > 加藤です。
> >
> > On Tue, 2 Apr 2002 22:11:34 +0900
> > "makino" <makino@keysfactory.co.jp> wrote:
> >
> > > 牧野です。
> > > 以前もC言語プログラムをPHP上から実行できないというMLを投稿させていただきましたが、その続きのような感じです。
> > > phpファイルに
> > > $str = system("/bin/sh /実行ファイルのパス 引数 2>&1");
> > > と記述しているのですが、このときにcannot execute binary file とエラーが出てしまいます。
> > > 1度はうまくいったのですが、その後サーバー上に問題が起きましてシステムの再インストールを行なったところエラーが出るようになりまし
> た。
> > > 環境は
> > > red hat Linax 7.2
> > > apache_1.3.22
> > > php-4.1.2にmbrege-1.3.1を組み込んでいます。
> > > 実行ファイルはPHP上に記述してあるパスで正常に動きます。
> >
> > systemの引数どおりにコマンドラインから入力して実行できます?
> > shコマンドが解釈できるファイルはシェルスクリプトファイル
> > だけだったと思いますど。
> >
> > とあなたの前回の質問でも同じような回答がされているのですけど、
> > 覚えてません?
> > もう一度[PHP-users 6127]からのスレッドを読み直してみては。
> >
> その時に
> system("/bin/sh /実行ファイルのパス 2>&1")
> として、stderr をstdoutにリダイレクトしてやればシェルプロンプトで実行した時と同じようにエラー表示をブラウザ上で見ることができると教
> わったのでそうしたのですが。
> 

これはエラーを見るためのやりかたであって、
バイナリー形式のファイルを実行するのに /bin/sh 実行ファイル
と書きなさいということはいっていません。
この例のキーは 後ろの「2>&1」の部分で前半ではありません。
  system("/bin/sh /実行ファイルのパス")
  と書いてうまくいかないし原因がわからない
とあなたが質問してきたので、
  後ろに「2>&1」をつけるとエラーが見えるようになるよ
ということです。
で、エラーメッセージを読めば何が悪いのか推測できるでしょう
ということなんですけどね。

ちゃんと前回のスレッドを読み直してみました?
読み直していたら、近藤さんの書いたことでなく、別の加藤さん
とのやり取りをみて、気が付きそうなものですけど。

 man bash
とオンラインヘルプでシェルの引数として何を渡すことが
できるのか調べてみてください。そうすればあなたのプログラムの
何が間違っているのかがわかるでしょう。


----
加藤昌也                        株式会社ニルソフトウェア
                                    E-mail  kato@nil.co.jp
                                    TEL     03-3749-8601
                                    FAX     03-3749-8602