性格悪い人が優勝

掲題の件に関して質問させて下さい。

今、下記の様なプログラムのショートカットを実行しようとしています。

[c:\00001\00002\exe.php:]
<?php
/*exe.phpの内容*/
system("c:\000_aFolder\b'_folder\00005.EXE.lnk > /dev/null &");
?>

[コマンドプロンプトの実行:]
>php exe.php

[結果:]
Warning: system(): NULL byte detected. Possible attack in c:\00001\00002\exe.php on line 3

system関数がexec関数でも同じエラーで実行できませんでした。

ファイルやフォルダ名を変えることなくこのショートカットをたたくPHPを実行できないものでしょうか?

どうかよろしくお願いいたします。

質問者からの補足コメント

  • つらい・・・

    補足します。
    入力はわたしのみでヌルバイアとは許容して良いものとしています。

    ただ、
    $str="c:\000_aFolder\b'_folder\00005.EXE.lnk > /dev/null &";
     if(preg_match("/^[a-zA-Z0-9]+$/",$str)) {
     $str=$str;
    }

    上記や、

    function sanitize($array){
     if(is_array($array)){
      return array_map('sanitize',$array);
     }
     return str_replace("\0", " ", $array);
    }
    $str="c:\000_aFolder\b'_folder\00005.EXE.lnk > /dev/null &";
    sanitiize($str);

    試しましたがパスが変わりダメでした。

      補足日時:2017/01/07 20:35
  • つらい・・・

    追加で補足です。

    パスにはシングルクォートを持ったフォルダがあるので、これも難しいと思います。

      補足日時:2017/01/07 20:36

A 回答 (2件)

バックグラウンドで実行したいなら、Windows では start コマンドを使用します。

詳しい使い方は start /? を実行して確認してください。

http://itpro.nikkeibp.co.jp/atcl/column/15/04200 …
    • good
    • 0
この回答へのお礼

お礼が遅くなりましてすみませんでした。
仰る方法でやりましたら出来ました!
ありがとうございます。

お礼日時:2017/01/09 21:25

文字列の中で \ を書くときは、\\ と書かないと駄目です。

    • good
    • 0
この回答へのお礼

bx2さんありがとうございます。
ようやくプログラム自体をたたくことができました。

ただ
> nul &
を付けているのにコマンドプロンプトが帰りません。

$str='"c:\\000_aFolder\\b\'_folder\\00005.EXE.lnk"'." >nul 2>&1 ";
system($str);  //コマンドが帰らない

$str='"c:\\000_aFolder\\b\'_folder\\00005.EXE.lnk"'.' >nul 2>&1 ';
system($str);  //これもコマンドが帰らない



掲題とは変わってしまいましたがお導き下さい。

お礼日時:2017/01/07 22:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!