サーバーリプレースの為PHPプログラムの移植をしています。
PHPはIISを使って動かしています。
現在の環境
OS:Windows2008
IIS:6
PHP:4.4.9
新しい環境
OS:Windows2016
IIS:10
PHP:7.2.10
プログラムの内容はPHPからOracleのDBにアクセスしてデータを受け取るという物です。
本来はOCI8を使用してDBにアクセスするのが一般的ですが、既存のPHPではOCI8ではなくSqlPlusのコマンドを使ってアクセスしています。
出来るだけ既存の仕組みから変えたくないということで、新しい環境でも同じようにOCI8ではなく、SqlPlusのコマンドを使っていく方針となっています。
PHPではテストの為下記のようなコードを書きました。
PHP
1$data = exec("getpdfinfocmd.exe 2185417"); 2print_r( $data );
getpdfinfocmd.exeでは、サーバー上にあるデータを取得して、それを引数にBATを実行するプログラムとなっています。
BATは下記のような記述になっています。
BAT
1sqlplus -SILENT ユーザー名/パスワード@接続先 @sql_statement.sql
既存のPHP4では希望通りに結果が取得できています。
PHP4でのprint_rの結果は下記の通りです。
Array ( [0] => /3 [1] => 2185417-00.pdf)
しかし、これをそのままPHP7で実行すると下記のように空となってしまいます。
Array ( [0] => )
【検証した内容】
- リストPHPのコードを下記のように変更したところ、$resは「0」が返ってきました。
PHP
1exec("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にアクセスするためのセオリーとは違う方法であることは承知していますが、今回はどうしてもこの方法で行う必要があります。
よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。