
サンプル・プログラム
isCPU.php | サンプル・プログラム (1) |
isCPU.php | サンプル・プログラム (2) |
pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
processorList.xml | CPU一覧ファイル |
バージョン | 更新日 | 内容 |
---|---|---|
1.2 | 2021/03/06 | PHP8対応,UTF-8化 |
1.1 | 2008/08/26 | ヒアドキュメントに変更 |
1.0 | 2005/03/16 |
バージョン | 更新日 | 内容 |
---|---|---|
2.0.0 | 2024/11/23 | 大幅改訂 |
1.2 | 2021/03/06 | PHP8対応,UTF-8化 |
1.1 | 2008/08/26 | ヒアドキュメントに変更 |
1.0 | 2005/03/16 | 初版 |
バージョン | 更新日 | 内容 |
---|---|---|
1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
1.7.0 | 2024/10/09 | validURL() validEmail() 追加 |
1.6.0 | 2024/10/07 | isButton() -- buttonタグに対応 |
1.5.0 | 2024/01/28 | exitIfExceedVersion() 追加 |
1.4.2 | 2024/01/28 | exitIfLessVersion() メッセージ修正 |
解説:バッククォート
バッククォートは演算子として作用し、戻り値は標準出力に返されるデータである。

ここでは Windows の set コマンドを使っており、環境変数の値がすべて変数 $output に格納する。そこから、 preg_match 関数を使い、Windows XPで標準設定される PROCESSOR_IDENTIFIER の値を取り出す。これが CPU の判定結果となる。
isCPU.php
55: $output = `set`; //DOSコマンドを実行する
56:
57: $flag = preg_match('/PROCESSOR_IDENTIFIER=(.*)\n/ui', $output, $arr);
58:
59: $body = ($flag == TRUE) ? ('CPUは ' . $arr[1]) : '判断できませんでした';
解説:類似の関数
解説:セキュリティとセーフモード
そこで、PHPには「セーフモード」という概念があり、OSを守ることができるようになっている。(セーフモードはPHP 5.3.0で非推奨となり、PHP 5.4.0 で削除になった。)

セーフモードが ON の場合、バッククォート演算子などは働かない。したがって、厳密を期すなら、プログラムの冒頭で、PHPがセーフモードになっているかどうかを調べるロジックを追加すべきである。
解説:サンプル・プログラム(2)
まず、定数 FILENAME_CPU にCPU一覧ファイルを設定する。
isCPU2.php
53: // 初期値(START) =============================================================
54: // CPU一覧ファイル
55: define('FILENAME_CPU', './processorList.xml');
56:
57: // 初期値(END) ===============================================================
isCPU2.php
110: /**
111: * CPU名(開発コード名)を取得する
112: * @return string CPU名/FALSE:取得失敗
113: */
114: function getCPUname() {
115: $maker = '';
116: $family = $model = $stepping = 0;
117:
118: // setコマンドを実行する
119: $output = `set`;
120:
121: // 環境変数PROCESSOR_IDENTIFIERの内容を取得する
122: if (preg_match('/PROCESSOR_IDENTIFIER=(.*)\n/ui', $output, $arr) <= 0) return FALSE;
123: $ids = $arr[1];
124:
125: // CPUベンダ
126: $vendor = preg_match('/Intel/ui', $ids) ? 'Intel' : 'AMD';
127:
128: if (preg_match('/Family\s*([0-9A-F]+)\s*Model\s*([0-9A-F]+)\s*(Stepping\s*([0-9A-F]+))*/ui', $ids, $arr) <= 0) return FALSE;
129: if (isset($arr[1])) $family = sprintf('%02X', (int)$arr[1]);
130: if (isset($arr[2])) $model = sprintf('%02X', (int)$arr[2]);
131: if (isset($arr[3])) $stepping = (int)$arr[4];
132: $result =searchCPUname($vendor, $family, $model);
133: $name = ($result == NULL) ? 'unknown' : $result;
134: $name .= sprintf(' (%s, Family %s, Model %s, Stepping %02X)', $vendor, $family, $model, $stepping);
135:
136: return $name;
137: }
isCPU2.php
92: /**
93: * 一覧表からCPU名(開発コード名)を検索して返す.
94: * @param string $vendor ベンダ名 Intel|AMD
95: * @param string $family ファミリー番号
96: * @param string $model モデル番号
97: * @return string CPU名/NULL:見つからない
98: */
99: function searchCPUname($vendor, $family, $model) {
100: $xml = simplexml_load_file(FILENAME_CPU);
101: if ($xml == FALSE) return FALSE;
102: foreach ($xml as $processor) {
103: if (($processor->vendor == $vendor) && ($processor->family == $family) && ($processor->model == $model)) {
104: return (string)$processor->architecture;
105: }
106: }
107: return NULL;
108: }
関連サイト
CPUの歴史
発表年 | メーカー | CPU名 | ビット数 | 最大クロック |
---|---|---|---|---|
1971年 | インテル | 4004 | 4bit | 750KHz |
1974年 | インテル | 8080 | 8bit | 3.125MHz |
1975年 | モステクノロジー | MOS 6502 | 8bit | 3MHz |
1976年 | ザイログ | Z80 | 8bit | 20MHz |
1978年 | インテル | 8086 | 16bit | 10MHz |
1979年 | モトローラ | MC6809 | 8bit | 2MHz |
1979年 | ザイログ | Z8000 | 16bit | 10MHz |
1980年 | モトローラ | MC68000 | 16bit | 20MHz |
1984年 | インテル | 80286 | 16bit | 12MHz |
1985年 | インテル | 80386 | 32bit | 40MHz |
1985年 | サン・マイクロシステムズ | SPARC | 32bit | 150MHz |
1986年 | MIPS | R2000 | 32bit | 15MHz |
1987年 | ザイログ | Z280 | 16bit | 12MHz |
1987年 | モトローラ | MC68030 | 32bit | 50MHz |
1989年 | インテル | 80486 | 32bit | 100MHz |
1991年 | MIPS | R4000 | 64bit | 200MHz |
1990年 | モトローラ | MC68040 | 32bit | 40MHz |
1993年 | インテル | Pentium | 32bit | 300MHz |
1994年 | IBM, モトローラ | PowerPC 603 | 32bit | 300MHz |
1995年 | サイリックス | Cyrix Cx5x86 | 32bit | 133MHz |
1995年 | AMD | Am5x86 | 32bit | 160MHz |
1995年 | サン・マイクロシステムズ | UltraSPARC | 64bit | 200MHz |
1999年 | IBM, モトローラ | PowerPC G4 | 32bit | 1.67GHz |
1999年 | AMD | Athlon | 32bit | 2.33GHz |
2000年 | インテル | Pentium 4 | 32bit | 3.8GHz |
2001年 | インテル | Itanium | 64bit | 800MHz |
2003年 | AMD | Opteron | 64bit | 3.5GHz |
2003年 | インテル | Pentium M | 32bit | 2.26GHz |
2006年 | SCE,ソニー,IBM,東芝 | Cell | 64bit | 3.2GHz |
2006年 | インテル | Core Duo | 32bit | 2.33GHz |
2006年 | インテル | Core 2 Duo | 64bit | 3.33GHz |
2008年 | インテル | Core i9/i7/i5/i3 | 64bit | 5.8GHz |
2017年 | AMD | Ryzen | 64bit | 5.7GHz |
2020年 | Apple | M1/M2/M3/M4 | 64bit | 3.49GHz |
2023年 | インテル | Core Ultra 9 / 7 / 5 | 64bit | 5.1GHz |
そこで今回は、Windowsのコマンドを使って、PHPが動作しているサーバのCPUの種類を表示させるプログラムを作ってみることにする。