質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
IIS 7

IIS(インターネットインフォメーションサービス) 7は、 Microsoftによって開発された、Windowsの標準ウェブサーバーです。Window Server 2008 と Windows Vista向けにリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1857閲覧

Windows2008にアップグレードしたらPHPで特定のコードが実行できなくなった

keigo

総合スコア9

IIS 7

IIS(インターネットインフォメーションサービス) 7は、 Microsoftによって開発された、Windowsの標準ウェブサーバーです。Window Server 2008 と Windows Vista向けにリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/06/18 01:11

先日Windows2003からWindows2008R2へアップグレードを行いました。
そのサーバーではPHPを使ってシステムを動かしています。

Win2008にアップグレード後、あるPHPプログラムで特定のコードが動かなくなっていることに気が付きました。

PHP

1passthru("pkgback_lst.bat ".$_POST["awh"]."* >tmp/pkgback_lst.log");

上記のコマンドでBatを実行しているのですが、BATが実行できていません。
テストとしてEcho aaa >> C:\Test\log.txtという簡単な処理をしてもTxtファイルが作成されません。

その前後のコードは実行されていることは確認済みです。
セキュリティーの関係ではないかと思っているのですが、詳しいメンバーがおらず困っております。

もし対応策などご存知の方がいましたらアドバイス頂けると助かります。

IISのバージョンは7
PHPのバージョンは4.4.9です。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Windows Vista® および Windows Server® 2008 アプリケーション互換性解説書 の「セッション 0 の分離」の影響と考えられます。Windows Server 2008以降では、Windowsサービスとして動作しているプロセス内でコンソールのリダイレクト >ファイル名は使えません。

以前に関連する質問回答がありましたのでご案内します。こちらもご覧になってみてください。
ASP.NET IIS側でexeを実行するプログラムを配置しても動作しない

投稿2018/06/18 01:48

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

keigo

2018/06/18 05:20

回答ありがとうございました。 リダイレクトが使えないということありがとうございました。 リダイレクトをなくした状態で確認してみましたが現象は変わらなかったです。 また確認のためですが、VBでExeを作成し実行されているか確認できるトラップを仕掛けてみたのですが、Exeも実行されている形跡はありませんでした。
dodox86

2018/06/18 05:34

リダイレクトの問題の前に、BATファイルがフルPATHで指定されていないことも問題ですね。実行時のカレントディレクトリはC:\windows\system32とかになっているかもしれまえん。いずれにせよ、実行できてもコンソールは使えないですが。
keigo

2018/06/18 07:30

何度もすみません。 フルパスも試してみましたが、ダメでした。 試しに echo passthru("dir"); を実行したところ、結果が表示されましたので、コードは実行されているようです。
dodox86

2018/06/18 07:37 編集

問題としているところが分からなくなってきたのですが、BATファイルを実行しないのが問題ですか。それとも、">"や">>"で、リダイレクト先のファイルに内容が出力されないのが問題ですか。phpのpassthru で"dir"の実行結果が表示出力(htmlにですか?)されるのは、IIS(というかPHPのモジュール?)が出力を捉えているからだと思います。
keigo

2018/06/18 07:58

問題はBATファイルが実行されないことです。 リダイレクトはエラーのログを取っているだけですので、なくても大丈夫です。
dodox86

2018/06/18 08:20

原因は、もしかするとセッション0の話とは少し違うかもしれません。VB(VB6ですか?)で作成したEXEが実行されていないと言うのは、どのように確認したのでしょうか。実行されていないのは確実でしょうか。あと、PHPはどのように動作させているのでしょうか。普通のCGIでしょうか。
dodox86

2018/06/18 08:26 編集

BATファイルの起動の仕方で、"cmd.exe /c BATファイルのフルPATH"を試してみてください。(まず、Windows 2008 Serverのコマンドプロンプト上で試してみて、動作するかを確認してから)
keigo

2018/06/18 09:06

VB(.net)は、実行すると特定のフォルダにファイルを出力するだけのものを作りました。 単独で実行するとファイルは問題なく作成されますが、PHPから実行するとファイルが作成できなかったので動いていないと判断しています。 PHPの動作はCGIです。 Cmd.exe /c を試してみましたが、やはりダメでした。 よろしくお願いします。
dodox86

2018/06/18 09:19

PHP4.xをお使いということで、セーフモードで動作しているということはありませんか。 http://php.net/manual/ja/function.passthru.php > 注意: セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。 実際的な理由により、現在、実行プログラムへのパスに ..を 含めることはできません。
keigo

2018/06/18 09:36

私もそこを疑ってみて確認しましたが、セーフモードではなかったです。
dodox86

2018/06/18 10:13 編集

細かいことですみませんが、確認の意味で。BATファイルやVB.NETプログラムのPATH中にスペースが含まれていたりはしませんか。以下のような、単純だけど完全な、フルPATH指定でもダメだったと言うことでよろしいでしょうか。 passthru(“cmd.exe /C C:/SUBDIR/pkgback_lst.bat”); ※エスケープの問題を除外するため、PATH区切り文字を’/‘にしています。 また、WindowsやIISのイベントログやPHPの個別のログ(があるかわかりませんが)に何か、実行ファイル実行の失敗のログが保存されていたりしませんでしょうか。
keigo

2018/06/19 06:50

dodox86様 いろいろとご教授ありがとうございました。 結局自己解決しました。 原因はアクセス権でした。IIS6では問題ありませんでしたが、IIS7になってからアクセス権の設定が必要なようでした。 やったことは ・BATで作成されるファイルの出力先にIIS_IUSRSのアクセス権を付ける ・Cmd.exeをPHPプログラムがあるフォルダにコピーする   ※System32にあるCmd.exeにはアクセス権が付けられなかったので ・Cmd.exeにIIS_IUSRSのアクセス権を付ける ・Cmd.exe /Cに上記のフルパスを指定 例)passthru('C:***\Cmd.exe /c C:***\Prog.bat'); これで無事に実行できるようになりました。
dodox86

2018/06/19 10:34

ご報告ありがとうございます。私の回答およびコメントはかえって混乱させてしまったようで、逆に申し訳ない限りです。ともれ、解決してよかったです。
guest

0

自己解決

自己解決しました。

・BATで作成されるファイルの出力先にIIS_IUSRSのアクセス権を付ける
・Cmd.exeをPHPプログラムがあるフォルダにコピーする
※System32にあるCmd.exeにはアクセス権が付けられなかったので
・Cmd.exeにIIS_IUSRSのアクセス権を付ける
・Cmd.exe /Cに上記のフルパスを指定 例)passthru('C:\Cmd.exe /c C:\Prog.bat');

投稿2018/06/19 06:51

keigo

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問