Windowsのリソースキットのひとつ「subinacl」のコマンドをPHPプログラムからexec()で実行した戻り値に対して、
preg_match()でgrepしようと試しましたが、うまくできませんでした。
$arrAccList = array();
exec("subinacl /verbose=1 /share 【共有名】 , $arrAccList);
foreach($arrAccList as $k => $v){
if(preg_match("(grant|deny)", $v)){
print $v;
}
}
上記のように書いてみましたがマッチせず、正規表現の部分を「g.r.a.n.t」とするとマッチするという現象です。
mb_detect_encoding()の結果から文字コードはASCIIのようです。
そこでmb_convert_encoding()でASCII⇒EUC-JP、auto⇒EUC-JP・・・と変換してみましたが、
変換された様子が無く、上記と同じ結果となります。
mb_internal_encoding("ASCII")で一時的に内部エンコードを変更してみましたが、やはり同じ結果となりました。
PHPのmbstringの設定は以下のような状態です。
mbstring.detect_orderauto
mbstring.encoding_translationOff
mbstring.func_overload0
mbstring.http_inputpass
mbstring.http_outputpass
mbstring.internal_encodingno value
mbstring.languageJapanese
mbstring.strict_detectionOff
mbstring.substitute_characterno value
ASCIIから内部処理文字コードへ変換する方法が間違っているのでしょうか。それとも元々無理な話なのでしょうか。
ご存知の方いらっしゃいましたら、ご教授お願い致します。
No.1ベストアンサー
- 回答日時:
subなんとかは分からないのですが、$arrAccListはどんな値なんでしょう。
ソースを見て思うのは
preg_match("/(grant|deny)/", $v)
ではないですか?
文字コードについては特に判定すべき日本語がなければ
ASCIIと返ってきたりします。
この回答への補足
ご回答ありがとうございます。
subなんとかは、共有フォルダのアクセス権を確認・操作するコマンドで、実際には以下のような値が返ってきます。
========================
+Share 【共有名】
========================
/control=0x0
/audit ace count =0
/perm. ace count =3
/grant=ドメイン名\アカウント名=c
/grant=ドメイン名\アカウント名=c
/grant=ドメイン名\アカウント名=c
あと、正規表現の部分をご指摘どおり修正してみましたが、結果は同じでした。
ご回答ありがとうございました。
結局自己解決しました。
帰ってきたコマンドの文字列がNull区切りされていたので、
preg_replace('/\0/', '', $string) でNull文字を置換(削除)して対応しました。
No.2
- 回答日時:
mb_detect_encoding()がASCIIを返すのは特に問題がないです。
そのため、文字コードを変換する必要はありません。
ソースがEUC-JPでもSJISでも、ASCIIと返す場合の文字コードはどの文字コードでも全て同じになります。
exec("subinacl /verbose=1 /share 【共有名】 ", $arrAccList);
print_r($arrAccList);
なんて書いて、値が正しく取得されているか確認してみると良いかも知れません。
この回答への補足
ご回答ありがとうございます。
print_rの出力は試してみましたが、ブラウザ上では問題なく出力結果が表示されます。
しかし、ファイルに出力して秀丸などのエディタで開いてみると、すべての文字間にNullが挿入された状態で表示されます。
ちなみに、結果の配列を一行ずつ preg_replace('/\s\s+/', '', $str) で置換してみましたがNullは除去できないようでした。
何故Nullが挟まれて出力されるのかわかりませんが、PHPでこのNullを削除する方法は無いものでしょうか。
ご回答ありがとうございました。
結局自己解決しました。
帰ってきたコマンドの文字列がNull区切りされていたので、
preg_replace('/\0/', '', $string) でNull文字を置換(削除)して対応しました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 文字コード及びフォントに関する次の記述を読み,適切なものをすべて選べ。 ASCIIとは,英数字だけを 4 2023/01/11 19:10
- フリーソフト BIOS.binをバイナリエディタで開くと ascii 変換しても、暗号化されていて何か分からない文 6 2022/07/11 03:34
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- その他(プログラミング・Web制作) pythonのpandasのcsvの外部結合(outer_join)した際に列が想定とは異なる事象 1 2022/05/25 13:23
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SJISで取得した半角カナをUTF-8...
-
文字コードの検出が正しいかを...
-
携帯向けフォームの文字化け
-
UTF8メールがLotus Notesで文字...
-
phpフォームで携帯へメール送信...
-
includeファイルの文字コードに...
-
phpのメールフォームの完了画面...
-
RSSを取得すると文字化けする。
-
文字化け変換方法
-
mail()で送信したメールのタイ...
-
複数行の文字列を1行にまとめる...
-
Gmailへのメール送信で文字化け
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
メッセージボックスで1025文字...
-
ファイルから読み取った改行文...
-
改行について
-
ダブルコーテーション(
-
文字の入力で横バー上段、中断...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
phpのメールフォームの完了画面...
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
SJISで取得した半角カナをUTF-8...
-
mb_convert_encoding で 一部の...
-
SJIS→UTF-8変換後の文字化けに...
-
PHP cURLでPOSTした値が文字化...
-
phpMyAdmin内での文字化け
-
mb_ereg_replaceに関して
-
RSSを取得すると文字化けする。
-
PostgreSQLからCSV形式でエクス...
-
【PHP】mb_convert_encoding...
-
mb_regex_encodingでエンコード...
-
postの文字化け防止について
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
UTF8メールがLotus Notesで文字...
-
mail()で送信したメールのタイ...
-
php自動返信メール本文の一部の...
-
phpでの文字エンコード
おすすめ情報