質問: exec("getpdfinfocmd.exe 2185417"); print_r( $data ); ``` getpdfinfocmd.exeでは、サーバー上にあるデータを取得して、それを引数にBATを実行するプログラムとなっています。 BATは下記のような記述になっています。 ``` sqlplus -SILENT ユーザー名/パスワード@接続先 @sql_statement.sql ``` 既存のPHP4では希望通りに結果が取得できています。 PHP4でのprint_rの結果は下記の通りです。 Array ( [0] => /3 [1] => 2185417-00.pdf) しかし、これをそのままPHP7で実行すると下記のように空となってしまいます。 Array ( [0] => ) **【検証した内容】** * リストPHPのコードを下記のように変更したところ、$resは「0」が返ってきました。 ``` exec("getpdfinfocmd.exe 2185417",$out,$res); ``` * コマンドプロンプトではSqlPlusは問題なく実行できています。 * BATファイル単体で実行すると狙ったデータが取得できました。 * getpdfinfocmd.exe単体で実行すると狙ったデータが取得できました。 * getpdfinfocmd.exeの中に空のテキストファイルを出力するコードを追加し、PHPプログラムを実行したところテキストファイルは作成されましたので、PHPからgetpdfinfocmd.exeは実行されています。 * BATファイルに空のテキストファイルを出力するコマンドを追加し、PHPプログラムを実行したところ、テキストファイルは作成されましたので、BATも実行されています。 上記の結果から、SqlPlusのコマンドが実行されていないものと思われます。 Sqlplus.exeとその上位フォルダにIIS_IUSRSの権限を追加してみても変化はありませんでした。 PHPプログラムがあるフォルダもIIS_IUSRSの権限は付けてあります。 なぜPHPから実行したときだけSqlplusのコマンドが実行されないのか原因が分からず困っています。 PHPからOracleにアクセスするためのセオリーとは違う方法であることは承知していますが、今回はどうしてもこの方法で行う必要があります。 よろしくお願いします。
回答: 自己解決しました。 非常に単純なことでした PHPからSqlplus.exeを実行してもパスが通っておらず、コマンド自体が実行されていませんでした。 フルパスで指定したことろ、問題なく動きました。