2012年11月11日日曜日

WindowsのコマンドプロンプトでC言語をコンパイルする

UNIXじゃないと端末でコンパイルできない~!
VisualStudioだといちいちプロジェクト作るからめんどい~!
と、お嘆きのみなさん。
僕もそうでした。今日までは。(他に居なかったらどうしよう…)

実は、というか、当たり前なんですけど
Windowsでもコマンド・プロンプトからC/C++のコンパイラが使えます。

すべてのプログラムからVisualStudioフォルダを選択
その下のVisualStudioToolsを選択
その中にMicrosoftのCコンパイラが使用出来るコマンド・プロンプトが入っています。

コンパイルのコマンドはCLです。Compile & Linkの略だそうです。
VisualStudioのコンパイラと同じ機能を持っています。(たぶん)

ちょっとしたC言語の課題なんかをサクッとコンパイルしたい時には便利です。


2012年10月12日金曜日

PHPのお勉強

PHPの開発環境を構築してから、ずっとほったらかしにしていて昨日今日で少し学習しました。
昨日はPHPとはなにかから始まり、ずっと基礎を勉強してファイル入出力ができるようになりました。約90分かかりました。

C言語の基礎がわかっていれば、基礎の勉強はあまりおもしろくないかもしれません。
PHPの基礎の勉強を初めて新しく覚えたのは三項演算子とforeach文の書き方、連想配列くらいです。

そこで、今日はファイル入出力を使って外部ファイルに簡易DBを構築できないかということで検討してみました。

まずfopen/fwrite/freadを使って、csvファイルに書き込んだり、読み込んだりしました。

例えばcsvの中身が
1,2,3,_
1,2,3,_
となっていた時(アンダーバーは改行です)
freadを使うとString型で1,2,3,_1,2,3,_という読み込み結果になります。
これをexplode(",",$foo)を使ってカンマごとに配列化することができますが、その後の扱いが大変。

そこでPHPで用意されているcsv用の関数を使います。いくつかの関数が用意されていますが、今回はfgetcsv関数を使います。

以下今回使ったソースです。
<?php
 $testFile = "test.csv";
 $contents[]= "";
 
 if(!$fp = fopen($testFile,"r")){
  echo "cannot open ";
  exit;
 }
 $row = sizeof(file("$testFile"));//行数の取得
 for($i=1; $i <= $row; $i++){
  $contents[$i] = fgetcsv($fp,",");
  echo $contents[$i][0],",",$contents[$i][1],",",$contents[$i][2],"</br>";
 }
 fclose($fp);

これで、csvファイルの中身を二次元配列に読み込むことができます。
しかしながら、日本語(マルチバイト文字)を文字化けせずに表示させるためには、
ロケールを設定しないといけないようです。

それにしてもブログにソース載せるときに綺麗にできるような何かは無いのか…
ブログ巡回すると大抵の人がつかっているアレを導入したい。

追記:
SyntaxHighlighterというのを使うと綺麗にできました。

2012年9月25日火曜日

データベース管理のためにPHP+MySQLを勉強してみる

世界を盗み聞きするWEBサービスの構築を企てているというのは先日お話したとおりです。

WEBサービスを構築する際には大量のデータを高速な検索したり、複数人が同時に検索を実行したり、情報を頻繁に追加・更新・削除したりする場合が想定されます。

そういった場合に威力を発揮するのがデータベース管理システムです。

今回は、最も一般的かつ無料で使用でき、インターネット上にも参考にできるドキュメントが十分に揃っているという理由からMySQLを使用することにしました。
また、MySQLを制御するためにサーバーサイドスプリクトであるPHPを利用します。

それでは早速開発環境を構築していきます。

今回はWindows7,HomePremium,64bitコンピュータで開発を行います。
WindowsではPHP+MySQLを動かすプラットフォームとWebサーバをあわせてWAMPと呼ばれる開発環境を構築します。これはWindows + Apache + MySQL + PHP の頭文字を取っています。
これがLinuxを利用するものならばLAMPとなりMacintoshを利用するものならばMAMPとなります。

1.まずはWebサーバソフトウェアのApacheを導入します。
 http://www.apachelounge.com/download/
ここから、httpd-2.4.3-win32-ssl_0.9.8.zipをダウンロードします。
これが現時点で最新版のApacheになります。

2.Apacheをインストールします。
ダウンロードしたzipファイルを解凍し、取り出されるApache24をそっくりそのままC:直下にコピーします。これでインストールは終了。

3.ここからは細々とした設定になります
C:/Apache24/conf/httpd.conf をテキストエディタで開き、変更します。
ただし、弄る前にはバックアップをとっておいた方がいいです。
私はテキストエディタとしてEmEdittor Freeを使用しています。
http://jp.emeditor.com/modules/download2/rewrite/tc_5.html

以下変更すべき点
58行目 Listen 80
を Listen 81
…これは使用するポートを指定する部分です。私の場合ポート80はSkypeと競合し使用できなかったためポート81を使用しています。

213行目 #ServerName www.example.com:80
を ServerName localhost:81

271行目  DirectoryIndex index.html
を DirectoryIndex index.html index.php

これで上書き保存します。

4.Apacheがうまく動くかどうかテスト
管理者モードのコマンドプロンプトを使ってApacheを起動します。
作業ディレクトリを c\:Apache24\binに合わせてhttpdとコマンドを入力しEnter


















このように何も表示されなければ正常に動いています。
終了するためにはCtrl+Cを押します。

次にサービスとしてApacheを登録します。
同じようにhttpd -k installと入力します。
何もErrorが出ず、一度成功したらこのコマンドは入力する必要がありません。
次にhttpd -k startを入力しましょう。
これで、Apacheが開始します。
終了させる際のコマンドはhttpd -k stop,
また、再起動させる際のコマンドはhttpd -k restartとなっています。

Apacheをstartさせた状態で、WEBブラウザに
http://localhost:81/
を入力して 画面に

It Works!

と表示されていればインストール及び設定成功です。

5.PHPのインストールに入ります。
http://windows.php.net/downloads/releases/php-5.4.7-Win32-VC9-x86.zip
ここから最新版のphp5.4.7をダウンロードすることができます。
解凍後、そのままフォルダ名をphpへと変更し、Apacheと同じくC\:直下に置きます。
その後、
http://www.apachelounge.com/download/win32/modules-2.4/php5apache2_4.dll-php-5.4-win32.zip
をダウンロードし、中身のphp5apache2_4.dllをc\:phpのなかに入れます。
そしてphp.ini-development というファイルのファイル名をphp.ini に変更します。

6.ここでApacheのhttpd.conf をもう一度編集します。
httpd.conf の最終行に

PHPIniDir "c:/php"
LoadModule php5_module "c:/php/php5apache2_4.dll"
AddType application/x-httpd-php .php
を付け加えます。ここで上書き保存

7.PHPがうまく動くかどうかテスト
ApacheのホームディレクトリになっているC:\Apache24\htdocs 内にtest.phpを作成します。
そのファイル内には
<?php phpinfo(); ?>
とだけ記述して置いてください。また、文字エンコーディングはUTF-8で保存してください。

httpd.confの変更を反映させるためにApacheを再起動します。
再起動のコマンドはhttpd -k restart です。

Webブラウザに
http://localhost:81/test.php
と入力し

このような画面が表示されればPHPのインストールに成功しています。

ちょっとつかれてしまったので、MySQLのインストールはまた後日にさせてください。
m(__)m