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

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

ただいまの
回答率

90.84%

  • PHP

    18698questions

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

  • IIS 7

    51questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 174

keigo

score 1

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

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

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

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

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

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

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

よろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/18 14:20

    回答ありがとうございました。
    リダイレクトが使えないということありがとうございました。

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

    キャンセル

  • 2018/06/18 14:34

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

    キャンセル

  • 2018/06/18 16:30

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

    キャンセル

  • 2018/06/18 16:36 編集

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

    キャンセル

  • 2018/06/18 16:58

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

    キャンセル

  • 2018/06/18 17:20

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

    キャンセル

  • 2018/06/18 17:26 編集

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

    キャンセル

  • 2018/06/18 18:06

    VB(.net)は、実行すると特定のフォルダにファイルを出力するだけのものを作りました。
    単独で実行するとファイルは問題なく作成されますが、PHPから実行するとファイルが作成できなかったので動いていないと判断しています。

    PHPの動作はCGIです。

    Cmd.exe /c を試してみましたが、やはりダメでした。

    よろしくお願いします。

    キャンセル

  • 2018/06/18 18:19

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

    キャンセル

  • 2018/06/18 18:36

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

    キャンセル

  • 2018/06/18 19:13 編集

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

    キャンセル

  • 2018/06/19 15: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');
    これで無事に実行できるようになりました。

    キャンセル

  • 2018/06/19 19:34

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

    キャンセル

check解決した方法

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');

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.84%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    ファイル一覧取得

    こんにちは。 指定フォルダから、STコード一覧を作成したいですが、どなた様が分かれば、詳しい処理手順や、処理関数を教えていただければありがたいでございます。 仕様は、下

  • 解決済

    PHPでの簡易掲示板で投稿番号を追加したい

    前提・実現したいこと PHPでHTMLのフォームで送信された値を受け取り、テキストファイルに保存し、1行ごとに「{番号}<>{名前}<>{コメント}<>{投稿された時間}」と言う

  • 解決済

    掲示板で1のスレがつく前に変なのがついてしまう。

    前提・実現したいこと サイトのコードを信用していいものか 投稿したときのNo1の下の空欄が出来てしまうのでどうにかしたい。 発生している問題・エラーメッセージ 掲示板を

  • 解決済

    PHP:パスワードが一致したときのみ、投稿の削除をする簡易掲示板

    パスワードが一致したときの条件式をプログラムに書いても反応しません。/ファイル消去/ブロックの6行目あたりにあるif文のandの右側の条件式です。この式で使われている$delDat

  • 解決済

    掲示板の削除機能をつけたい

    簡易な掲示板を作成しました。タイトルや名前などをつけて投稿ができるようになっています。このコードを応用してできるだけ簡単に投稿した内容を削除する機能をつけたいです。アイデアが思い浮

  • 解決済

    一言掲示板 ファイル操作 文字数オーバーを表示しない方法

    前提・実現したいこと phpで一言掲示板を作成しています。 以下が要件です 1,利用者が名前とコメントを入力し、発言できる。 2,利用者の過去の発言内容をテキストファイ

  • 解決済

    PHP簡易掲示板の作成(削除機能の追加)

    php初心者です。 phpで簡易掲示板を作成しています。 削除機能を実装したいのですがうまく書くことができません。 具体的にはformから送信された番号と等しい投稿番号のコメントが

  • 解決済

    PHP データ書き込み 上書きについて

    PHPにてファイルの内容の一部だけ差し替えたいのです。 書き込みをする度に、データを削除して上書きする処理です。 行いたいこととしては、 ①ファイルの内容を読み取る ②1行

同じタグがついた質問を見る

  • PHP

    18698questions

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

  • IIS 7

    51questions

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