2011年10月18日火曜日
古いハッシュ関数を利用しないでください! - Don't use old hash functions
Tweet
これは, 先日私が見たあるファイル(Program Files/あるディレクトリ内/あるファイル)の中身です. ここに書かれているPasswordは実際の私のPasswordではなく, もちろん隠されたデータです.
さて, これはどのようなアルゴリズムで隠されているのでしょう? 多分いくつか想像できると思います. 共通暗号鍵で暗号化しているのか, ハッシュ値なのか, 独自に発案した暗号アルゴリズムを使っているのか... etc... 注目して欲しい部分は, 見たところ256bitというところと, Passwordという短いデータを隠しているというところです.
そう, MD5ですね!! 安易に想像がつきます.
もし, このデータを何らかの方法(アプリケーションのセキュリティホール, 悪意ある実行ファイル)で盗まれた場合は一瞬で解読されます. このURLを見てください. md5.rednoize.com これはMD5, SHA-1のDatabaseです.
Password解析専門の人はおそらく独自に他のハッシュのDatabaseも持っているでしょう, したがって古いハッシュ関数を利用してはき出したハッシュ値は脆弱です.
もし, Passwordの様な短いBit列にハッシュ関数を利用するならば,
出来ればSHA-2などのより強いものを利用してください.
そして, 更に需要水準のことを考えてファイル全体を暗号化するかしないか考えてください.
また, Passwordを盗み見られては困るUserは他サイトとPasswordを共有しないことを意識してください.
これによって, 被害の拡大を防ぐことが可能です. どんなにUser側がマルウェアに対して注意していてもServer側に問題があれば直ぐにあなたの情報は盗まれてしまうので...
2011年7月23日土曜日
[Context Free Art] [Realm of the Mad God] Paladinたん描いてみた
Tweet
###############################
# Context Free Artとの出会い
###############################
最近お絵かきがしたいなぁ~と思いお絵かきをすることにしました.
しかし, お絵かきをするには大きな壁が合ったのだ!!
それは...
私には画力のかけらも無いということだ...orz
そこで!!ggrksの精神で調べたところ
「Context Free Art」というツールを見つけた.
このContext Free Artはフラクタルのような
文脈自由文法を描くようなものだけどペンタブを握らないで
簡単なコードを描くだけでちょっとしたものが描けるので
今回は最近私がハマっているオンラインゲーム
Realm of the Mad God の Class である Paladinたんを描いてみました. (コードは下記)
###############################
# コードに付いて
###############################
このツールは再帰関数くらいしか意識しなくてよいので非常に使いやすいですが
変数が無いのでコードを書人には少し物足りないものです.
それと!!何も新しいこともすごいコードも書いていません. ゴリ押し
####################################
# paladin.cfdg
#
# hue 任意の値 sat 任意の値 (0~1) b 任意の値 (0~1)
# 上記の任意の値を変更することによって色を変更することが可能 (HSB Color)
# cubes関数内のCUBE関数のoptionを変えることによって1ブロックの色の変更が可能
#
# // はコメントアウト必要な場合は削除してください
####################################
startshape cubes
//================================
// 8 * 8
//================================
rule cubes {
//================================
// 0 (top)
//================================
CUBE{hue 0 sat .0 b .5}
CUBE{x - 1 y .58 hue 0 sat 0 b .85}
// CUBE{x - 2 y 1.16 hue 0 sat 0 b 1}
CUBE{x - 3 y 1.74 hue 58 sat 1 b 1}
CUBE{x - 4 y 2.32 hue 58 sat 1 b 1}
CUBE{x - 5 y 2.90 hue 58 sat 1 b 1}
// CUBE{x - 6 y 3.48 hue 0 sat 0 b 1}
CUBE{x - 7 y 4.06 hue 0 sat 0 b .85}
//================================
// 1
//================================
CUBE{y - 1 hue 0 sat .0 b .5}
// CUBE{x - 1 y - .42 hue 0 sat 0 b 1}
CUBE{x - 2 y .16 hue 58 sat 1 b .75}
CUBE{x - 3 y .74 hue 58 sat 1 b 1}
CUBE{x - 4 y 1.32 hue 58 sat 1 b 1}
CUBE{x - 5 y 1.90 hue 58 sat 1 b 1}
CUBE{x - 6 y 2.48 hue 58 sat 1 b .75}
// CUBE{x - 7 y 3.06 hue 0 sat 0 b 1}
//================================
// 2
//================================
CUBE{y - 2 hue 0 sat .0 b .5}
// CUBE{x - 1 y -1.42 hue 0 sat 0 b 1}
CUBE{x - 2 y -.84 hue 58 sat .5 b .9}
CUBE{x - 3 y -.26 hue 0 sat 0 b 0}
CUBE{x - 4 y .32 hue 58 sat .5 b .9}
CUBE{x - 5 y .90 hue 0 sat 0 b 0}
CUBE{x - 6 y 1.48 hue 58 sat .5 b .9}
// CUBE{x - 7 y 2.06 hue 0 sat 0 b 1}
//================================
// 3
//================================
CUBE{y - 3 hue 0 sat .0 b .5}
// CUBE{x - 1 y -2.42 hue 0 sat 0 b 1}
CUBE{x - 2 y -1.84 hue 58 sat .5 b .9}
CUBE{x - 3 y -1.26 hue 58 sat .5 b .9}
CUBE{x - 4 y -.68 hue 58 sat .5 b .9}
CUBE{x - 5 y -.10 hue 58 sat .5 b .9}
CUBE{x - 6 y .48 hue 58 sat .5 b .9}
// CUBE{x - 7 y 1.06 hue 0 sat 0 b 1}
//================================
// 4
//================================
CUBE{y - 4 hue 58 sat .5 b .9}
CUBE{x - 1 y -3.42 hue 58 sat 1 b .75}
CUBE{x - 2 y -2.84 hue 58 sat 1 b .75}
CUBE{x - 3 y -2.26 hue 58 sat 1 b 1}
CUBE{x - 4 y -1.68 hue 58 sat 1 b 1}
CUBE{x - 5 y -1.10 hue 58 sat 1 b 1}
CUBE{x - 6 y -.52 hue 58 sat 1 b .75}
CUBE{x - 7 y .06 hue 58 sat 1 b .75}
//================================
// 5
//================================
CUBE{y - 5 hue 35 sat .8 b .4}
// CUBE{x - 1 y -4.42 hue 0 sat 0 b 1}
CUBE{x - 2 y -3.84 hue 35 sat .8 b .4}
CUBE{x - 3 y -3.26 hue 35 sat .8 b .6}
CUBE{x - 4 y -2.68 hue 0 sat 0 b .5}
CUBE{x - 5 y -2.10 hue 35 sat .8 b .6}
CUBE{x - 6 y -1.52 hue 35 sat .8 b .4}
CUBE{x - 7 y -.94 hue 58 sat .5 b .9}
//================================
// 6
//================================
CUBE{y - 6 hue 0 sat 0 b 1}
// CUBE{x - 1 y -5.42 hue 0 sat 0 b 1}
CUBE{x - 2 y -4.84 hue 58 sat 1 b .75}
CUBE{x - 3 y -4.26 hue 58 sat 1 b .75}
CUBE{x - 4 y -3.68 hue 58 sat 1 b .75}
CUBE{x - 5 y -3.10 hue 58 sat 1 b .75}
CUBE{x - 6 y -2.52 hue 58 sat 1 b .75}
// CUBE{x - 7 y -1.94 hue 0 sat 0 b 1}
//================================
// 7 (bottom)
//================================
// CUBE{y - 7 hue 0 sat 0 b 1}
// CUBE{x - 1 y -6.42 hue 0 sat 0 b 1}
CUBE{x - 2 y -5.84 hue 35 sat .8 b .4}
// CUBE{x - 3 y -5.26 hue 0 sat 0 b 1}
// CUBE{x - 4 y -4.68 hue 0 sat 0 b 1}
// CUBE{x - 5 y -4.10 hue 0 sat 0 b 1}
CUBE{x - 6 y -3.52 hue 35 sat .8 b .4}
// CUBE{x - 7 y -2.94 hue 0 sat 0 b 1}
}
rule CUBE {
2 * {s -1 1 b .15 }SIDE{}
TOP{}
}
rule SIDE {
FACE{skew 0 30}
}
rule TOP {
FACE[s 1.413 .816 r 135 b .5]
}
rule FACE {
SQUARE{x .5 y -.5}
}
############################################
参考
・context free art (documentation)
2011年5月25日水曜日
[Node.js][CoffeeScript] Express(ver 2.3.7)のテンプレートのapp.jsをCoffeeScriptに置き換えた
Tweet
//======================================
// CoffeeScript
//======================================
最近JavaScriptでの生産性を少しであげることができれば良いなと思いCoffeeScriptを利用しています.
CoffeeScriptを利用することによって, コーディングがシャア専用ザク並に早くなるとは言いませんが約2倍ほど早くはなると思います. ただし, 可読性には問題あると思いますのでそこは慣れでカバーしてください...
ちなみに, 私がCoffeeScriptで参考しているサイトは以下のサイトです.
# インストール & 設定
・自分の感受性くらい/node.jsとnpmのインストール
# サンプルコード
・Coffee Script
・今日から始めるCoffeeScript
//======================================
// Node Express ejs
//======================================
さらに, サーバサイドをJavaScriptで開発できるで有名なあのNodeにも最近手を出し始めました.
NodeはApacheサーバ(php, c, perl)と比べてレスポンスは遅いのですが, 基本的に非同期接続なので大量のリクエストがある場合でもスピードをあまり落さず動いてくれるそうです. なので, スケールアウト, スケールアップができない環境だと重宝しそうです.
ちなみに, Node開発で以下のサイトを参考にしました.
# インストール & 設定
・node.jsとMySQLで割と普通のデータベースウェブアプリを作ってみるチュートリアル
ちょっと補足 : express.bodyDecoder() はExpress(ver 2.3.7)には存在しないのでexpress.bodyParser() を使うよろし!?
# 開発に便利なExpress Module
・express
# 開発に便利な雛形の作成
・node.js向けフレームワークexpressでアプリケーションのひな形をつくる
上記サイトの通り
express -t ejs sample
とインプットすればsampleディレクトリに雛形が作成されますが,
サーバサイドを扱う雛形がJavaScript(app.js)だったので,
CoffeeScriptに書き換えました. また自動的にコピーして欲しかったので,
Shellスクリプトも簡単に書きました.
//======================================
// app.coffee (express ver 2.3.7)
// 内容 :
// Express ver 2.3.7 のapp.js雛形をCoffeeScript
// でスッキリさせました.
//======================================
DOWNLOAD : app.coffee
//======================================
// express.sh
// 内容 :
// app.coffee雛形の自動挿入
// 実行例 :
// sh express.sh sample
// (app.coffeeとexpress.shは同じディレクトリ内に放置)
//======================================
DOWNLOAD : express.sh
2011年5月12日木曜日
[ubuntu] [apache] could not bind to address 0.0.0.0:80 対処方法
Listen 80 競合していたので調べてみました.
#TCP/IP Listen 80 を使用しているプロセスを調べる
$ sudo fuser -n tcp 80
80/tcp: 3650 3728 3729 3730 3731 3732 3733
# fuserユーティリティを使用して取得したプロセスを強制終了する
$ sudo kill -9 3650 3728 3729 3730 3731 3732 3733
# 最後にapacheの再起動でokay
#===========================================
# 別の方法として
#===========================================
# apache2が使用しているPID等を調べる
$ ps aux | grep apache2
# プロセスを強制終了する
$ sudo kill -9 [PID]
# 最後にapacheの再起動
参考 :
acheを起動するときに、ほかのプロセスによってポートが使用されていた場合 :
http://pentan.info/server/linux/apache_already_in_use.html
fuserを使ってみる。 :
http://d.hatena.ne.jp/masasuz/20110222/1298689119
2011年4月12日火曜日
[C++] バブルソート書いてみた
・2011年2月頃にC++で書いたバブルソート
#include <iostream>
#include <vector>
#include <ctime>
#define N 10
using namespace std;
typedef unsigned int size_t;
namespace sort{
//==============================================
// 交換関数
// argument :
// type : 交換したい数値01
// type : 交換したい数値02
//==============================================
template <class type> void swap(type * x, type * y){
type tmp = *x;
*x = *y;
*y = tmp;
}
/************************************************
/* バブルソートクラス
************************************************/
class CBubble{
public:
template <class type> void sort(type * X, bool flag){
for(size_t i = 0; i < X->size() - 1; i++){
for(size_t j = X->size() - 1; j > i; j--){
if(flag){
// 昇順
if(X->at(j - 1) > X->at(j)){
swap(&X->at(j - 1), &X->at(j));
}
}
else{
// 降順
if(X->at(j - 1) < X->at(j)){
swap(&X->at(j - 1), &X->at(j));
}
}
}
}
}
};
};
using namespace sort;
//===============================================
// main
//===============================================
int main(const int argc, char ** argv){
srand((size_t)time(NULL));
vector<float> X;
for(size_t i = 0; i < N; i++){
X.push_back((float)rand() / 3);
}
CBubble * objBubble = new CBubble;
objBubble->sort(&X, 1);
for(size_t i = 0; i < N; i++){
cout << X.at(i) << endl;
}
delete objBubble;
return 0;
}
2011年4月8日金曜日
[php] livedoor Auth を使用してみる
<?php
class Clivedoor{
// REQUEST URL
private $requestURL = "http://auth.livedoor.com/login/?";
// Get User ID URL
private $userIdURL = "http://auth.livedoor.com/rpc/auth";
// 「元データ」と「共通鍵」を合成して、その結果に対しハッシングして ハッシュ値を生成 (HMAC)
// secret_keyはhttp://auth.livedoor.com/でアプリケーションの登録をして取得
private $secret_key = "dofijrg39t8ughvw0(sample)";
// ハッシュの名前
private $hash = "sha1";
// 使用する要素
private $app_key = "app_key";
private $format = "format";
private $perms = "perms";
private $t = "t";
private $token = "token";
private $userdata = "userdata";
private $v = "v";
private $sig = "sig";
// ログインの確認
private $loginFlag = "livedoor";
// $_GET[$this->userdata]の中身
public $callBackParameter = "";
// 要素を格納する配列 (URL)
private $paramURL = Array();
// 要素を格納する配列 (XML)
private $paramXML = Array();
//===========================================
// 初期設定
//===========================================
public function __construct(){
// 要素はアルファベット順に並べてパラメータとつなげてhash_hmac();
// app_keyはhttp://auth.livedoor.com/でアプリケーションの登録をして取得
$this->paramURL[$this->app_key] = "asdw9850tugbiodhf2(sample)";
$this->paramURL[$this->perms] = "id";
$this->paramURL[$this->t] = time();
$this->paramURL[$this->userdata] = $this->loginFlag;
// 浮動小数ではなく文字列 "1.0" / ver 1.0 (2011/3/3)
$this->paramURL[$this->v] = "1.0";
$this->paramURL[$this->sig] = $this->makeSig($this->paramURL);
// Login Success
if(isset($_GET[$this->userdata])){
if($_GET[$this->userdata] === $this->loginFlag){
$this->callBackParameter = $_GET[$this->userdata];
$this->paramXML[$this->app_key] = $_GET[$this->app_key];
$this->paramXML[$this->format] = "xml";
$this->paramXML[$this->t] = $_GET[$this->t];
$this->paramXML[$this->token] = $_GET[$this->token];
$this->paramXML[$this->v] = $_GET[$this->v];
$this->paramXML[$this->sig] = $this->makeSig($this->paramXML);
}
}
}
//===========================================
// シグネチャの作成
// argument :
// $array : パラメータ
// return value :
// シグネチャ(パラメータと値をアルファベット順にソートして, hmac(sha1)でハッシュ化)
//===========================================
private function makeSig($array){
// 元データの作成
$buf = "";
foreach($array as $key=>$value){
$buf .= $key.$value;
}
// hmacによるハッシュの作成
return hash_hmac($this->hash, $buf, $this->secret_key);
}
//===========================================
// REQUEST URLの作成
// return value :
// REQUEST URL
//===========================================
public function makeURL(){
$url = $this->requestURL;
// REQUEST URLの生成
$count = 0;
foreach($this->paramURL as $key=>$value){
if($count){ $url .= "&"; }
if(!$count){ $count++; }
$url .= $key."=".$value;
}
return $url;
}
//===========================================
// User情報が格納されたXMLの取得
// return value :
// XML
//===========================================
public function makeXML(){
$url = $this->userIdURL;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->paramXML);
$userId = curl_exec($ch);
curl_close($ch);
preg_match("/(message>)([^<]*)/", $userId, $message);
preg_match("/(livedoor_id>)([^<]*)/", $userId, $livedoor_id);
// ログインに成功
if($message[2] === "SUCCESS"){
// userIDを返す
return $livedoor_id[2];
}
// ログインに失敗
return "ログインに失敗しました. お手数ですが, もう一度お試しください.";
}
};
// Clivedoorのインスタンス化
$objLivedoor = new Clivedoor();
print('<a href="'.$objLivedoor->makeURL().'">'.$objLivedoor->makeURL().'</a>');
print("<br>");
// もし成功しているならユーザIDを表示する
if($objLivedoor->callBackParameter){print($objLivedoor->makeXML());}
?>
2011年3月12日土曜日
[HTTP] [API] microsoft translator http api 使用してみた
http://api.microsofttranslator.com/V1/Http.svc/Translate?appId=[AppID]&text=i%20am%20rai&form=en&to=ja
テキスト情報のみが返ってくる. 制限は500文字みたい.
[JavaScript] [API] microsoft translator ajax api を使用してみた.
<!-- 翻訳制限は500文字みたい -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
// 翻訳元言語
var languageFrom = "ja";
// 翻訳先言語
var languageTo = "en";
function translate() {
// 翻訳先テキストを受け取るコールバック関数
window.mycallback = function(response) {
// 翻訳先テキスト表示
document.getElementById('response').innerHTML = response;
}
// 翻訳元テキスト
var text = document.getElementById('text').value;
// scriptタグの作成
var s = document.createElement("script");
//===================================
// method
//-----------------------------------
// oncompete : コールバック関数の名前
// appId : Bing Developers AppID
// form : 翻訳元言語
// to : 翻訳先言語
// text : 翻訳元テキスト
//===================================
s.src = "http://api.microsofttranslator.com/V2/Ajax.svc/Translate?oncomplete=mycallback&appId=[your key]&from=" + languageFrom + "&to=" + languageTo + "&text=" + text;
// scriptタグの追加
document.getElementsByTagName('head').item(0).appendChild(s);
}
</script>
</head>
<body>
<textarea id="text" style="width:300px; height:300px;"></textarea>
<br>
<button onClick="translate();" style="width:300px; height:80; font-size:20px;">SEND</button>
<!-- 結果の表示 -->
<div id="response">response</div>
</body>
</html>
参照 :
MSDN Translate Method
2011年1月24日月曜日
[code] RSA暗号の学習
// 平文 (法を超えることは許されない、法と同値は許されない)
A1 = 7, A2 = 24
// 素数
Q = 3, P = 11
// 法
N = Q * P = 33
// 公開鍵
E = 3
//============================================
// 暗号化 :
// 公開鍵の整数分だけ計算を繰り返す
// (なぜ?32bitの領域を超えると困るので)
//============================================
B1 = ((A1 * A1) mod N) * A1 mod N = 13
B2 = ((A2 * A2) mod N) * A2 mod N = 30
//============================================
// 秘密鍵の生成 :
/============================================
D = (1 * (Q - 1) * (P - 1) + 1) / E = 7
OR
// N = {1, 3, 11, 33} この4つと互いに素な数値の個数を求める
// φ(N) = {1,2,4,5,7,8,10,13,14,16,17,
// 19,20,23,25,26,28,29,31,32}
// もしNが素数ならば φ(N) = N - 1
φ(N) = (Q - 1) * (P - 1) = 20
E * D ≡ 1 (mod 20)
D = 7
//===========================================
// 複合化
// 暗号鍵の整数分だけ計算を繰り返す
// (なぜ?32bitの領域を超えると困るので)
//===========================================
((((((B1 * B1) mod N) * B1 mod N) * B1 mod N) * B1 mod N) * B1 mod N) * B1 mod N = 7 = A1
((((((B2 * B2) mod N) * B2 mod N) * B2 mod N) * B2 mod N) * B2 mod N) * B2 mod N = 24 = A2
参考 :
サルにもわかるRSA暗号、
http://www.maitou.gr.jp/rsa/rsa01.php
暗号化アルゴリズム、
http://fussy.web.fc2.com/algo/algo9-3.htm
2011年1月15日土曜日
[windows] [UAC] [VC++] 管理者権限を与える。
/MANIFESTUAC (UAC 情報をマニフェストに組み込む) :
http://msdn.microsoft.com/ja-jp/library/bb384691.aspx
を参考にUAC Level(リンカ マニュフェストファイルを開く)を上昇させて以下のテストコードを組んでみた。
//===============================================
// test.cpp
//===============================================
#include<iostream>
#include<string>
int main(){
FILE * fp;
std::string buf = "ABCDEF";
fopen_s(&fp, "C:\\Program Files\\test", "wb");
fwrite(buf.c_str(), 1, buf.length(), fp);
fclose(fp);
system("pause");
return 0;
}
//===============================================
// 結果
//===============================================
Release版のEXEを起動した結果、見事にProgram Files内にファイルを書き込むことができた。
2011年1月14日金曜日
[windows] [gadget] Google Language API を利用したWindows Gadgetを公開
06/2010 頃に作成した翻訳ガジェットが埋れていたのでSource付きで公開しました。 サンプル画像
downlaod : http://www21.atpages.jp/~lyrycal/download.html
・Virusチェック or MD5を参照してください。
by Raisana.
2011年1月13日木曜日
[BMP] [PNG] [GIF] 可逆型でも有効bit数を変えると劣化する
今回はtest.bmp(24bit)を作成して他の可逆型のフォーマット(PNG, GIF)にエンコードしてからデコードした。
予想 : 有効bit数が変化すると劣化すると予想した。
1. BMP(24bit) → PNG(24bit) → BMP(24bit) このタスクは画像が劣化しなかった。(BMPのエンコードする前のバイナリとデコードする前のバイナリは等しい)
2. BMP(24bit) → GIF(8bit) → BMP(8bit) このタスクは画像が劣化した。(BMPのエンコードする前のバイナリとデコードする前のバイナリは等しくはない。)
結論 : 可逆型でも有効bit数を変えると劣化するという予想通りの結果である。
実験の為に作成した画像(BMP, PNG, GIF)はこちら
ちなみに、今回作成した画像はバイナリを見てもらえばわかる通り、1pixel毎にすべての色が違う。
2011年1月11日火曜日
[windows] [bat] [console] コンソールからサービスの開始・停止・自動・手動・無効
//==============================================
// 開始・停止しているサービスの閲覧
//===============================================
// 開始
net start
// 停止
net stop
//===============================================
// サービスの自動・手動・無効(start= X 符号と値の間のスペースは必須)
//===============================================
// 自動
sc config mysql start= auto
// 手動
sc config Apache2.2 start= demand
// 無効
sc config Apache2.2 start= disabled
//=============================================
// mysqlとapacheの起動 && 停止 batファイルの作成
//=============================================
// start.bat
sc start Apache2.2
sc start mysql
// stop.bat
sc stop Apache2.2
sc stop mysql
# batファイルを実行する場合は管理者権限で起動してくだい。
参考 : Sc.exe を使用して Windows サービスを作成する方法 - http://support.microsoft.com/kb/251192/ja
2011年1月10日月曜日
[windows] [php] [Apache] PEARのインストール
PHPディレクトリ内にあるgo-pear.batをコマンドプロンプトから起動(インストール時にpearの項目のチェックを外した場合go-pear.batがないかもしれません)
1. コマンドプロンプトを管理者権限で起動
2. go-pear.batを起動
3. 後はEnter or Y を押すだけ
//============================================
// go-pear.batが存在しない場合
//============================================
php.iniの文末に
include_path=".;C:\Program Files\PHP\PEAR"
を追加
XAMPP.zipなどにPEARが入っているのでそれを拝借して、php.exeのあるディレクトリにPEARディレクトリを入れます。(XAMPPのPEARに入っている必要の無いパッケージはいりません。)
[widows] Apache 2.2 && PHP 5.3.5 && MYSQL && phpMyAdmin 導入
2011/01/10 現在
//===============================================
// Aache 2.2 Install
//===============================================
1. http://httpd.apache.org/download.cgi
2. Apache 2.2 をインストールする。(httpd-2.2.17-win32-x86-no_ssl.msi)
3. C:\Program Files\Apache Software Foundation\Apache2.2 にインストールされる
//===============================================
// PHP 5.3.5 Install
//===============================================
1. http://windows.php.net/download/のVC9 x86 Thread SafeのInstallerをクリック
2. PHP 5.3.5 をインストールする(すべて次へでokay)
3. C:\Program Files\PHP にインストールされる
4. C:\Program Files\PHP\php.iniを開き、display_errors = off を display_errors = on にする。(offだとエラーコードを見ることができません。グローバル公開するときにoffにすれば良いです。(Apacheを再起動しないと適応されません。))
//===============================================
// ApacheでPHPを利用出来るようにする
//===============================================
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf の末尾に以下を記述する。
PHPIniDir "C:/Program Files/PHP"
LoadModule php5_module "C:/Program Files/PHP/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
//===============================================
// ディレクトリを指定されたときにファイルを読み込む
//===============================================
240行目あたりにある DirectoryIndex index.html を DirectoryIndex index.php index.html とする。
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
# すべて終わったらApacheを再起動してください。
/************************************************
/* ここからは必要な方だけ実行してください
************************************************/
//===============================================
// 使用するポートを変更する
//===============================================
45行目あたりの Listen 80 を Listen X 変更する(Xは使用したいport number)
/************************************************
/* MYSQL, phpMyAdmin
************************************************/
MYSQL : http://dev.mysql.com/downloads/mysql/ (インストールのオプションは好きなものを選ぶ)
phpMyAdmin : http://www.phpmyadmin.net/home_page/index.php
展開したディレクトリをhtdocsにいれて接続すればブラウザ上からMYSQLをいじることができます。(コマンドプロンプトからSQLをいじったほうが早いです。mysql > mysql.exe -u root -p)
参考 : Windows+Apache+PHP環境構築 - http://www.yc.tcu.ac.jp/~yamada/doc/win_php/0202.html
2011年1月7日金曜日
[php] phpから実行ファイルを扱う
//==============================================
// source (sample.php)
//==============================================
<?php
// コマンドプロンプトの最後の行の文字列を引数として返す
$return = "";
// シェルコマンドの戻り値
$shell = "";
// code.exeはhttp://www21.atpages.jp/lyrycal/download.html参照
$return = system("code sample.php",$shell);
?>
//=============================================
// result
//=============================================
{鮏テ�ムs 76裔ヒ~Zヤ;ヌP6iキキ廳 7 醋 ソH yV �茎 jヨユXフタ%空�増 廱ノ ル チョ m8$蕁サニ Z「k 復'テrァ叛4モ險ヤ@[)W# �隔ネhス三2ト( ?Sb ) 0lt躁3カAナサ胤 zkm ア゚D8フ! ニ~0XA1M キ cー[ホ マ]ァ
参考 : http://php.net/manual/ja/function.system.php
登録:
投稿 (Atom)