ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

windowsでapacheのNAME virtualhostをやってみた

NAMEベースの バーチャルホスト を設定してみる。
(windows XP Home SP2 / apache2.2.3)

NAMEベースのバーチャルホスト:
 IP一つで二つの名前を持つようにすること(だと思う)
 ブラウザが送ってくるホスト名から応答ホストを決定する方式。(ということは、ブラウザがホスト名を送ってこないと動かないのか? ←あとで調べる)

apacheは、インストーラ形式のを普通にインストールしただけの状態。

まずhttpd.confの
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf

のコメントをはずす。
# Virtual hosts
Include conf/extra/httpd-vhosts.conf

これでextra/httpd-vhosts.confが読み込まれるようになる。

次にextra/httpd-vhosts.confを見る。
VirtualHostディレクティブがすでに二つ書かれてるので、
中身を適当に書き換える。

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "C:/hogehoge/apache/htdocs"
ServerName vh1.localhost
ServerAlias www.dummy-host.
ErrorLog logs/vh1-error.log
CustomLog logs/vh1-access.log common
</VirtualHost>

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot "C:/hogehoge/apache/htdocs_2"
ServerName vh2.localhost
ServerAlias www.dummy-host.
ErrorLog logs/vh2-error.log
CustomLog logs/vh2-access.log common
</VirtualHost>


あとは設定したDocumentRootに実ファイルをおく。(順番的にはファイル置いてから設定な気がするけど気にしない) 一応、それぞれのindex.htmlは、"It works! (hv1)" と "It works! (hv2)" というように区別できるように書いておいた。

これでapacheを再起動してみる。

http://vh1.localhost/にアクセス
サーバが見つかりません。

http://vh2.localhost/にアクセス
サーバが見つかりません。

だめでした。名前解決ができてない。

hostsにAliasを設定する。
XPなら "C:\WINDOWS\system32\drivers\etc\hosts" があるはず。
127.0.0.1 localhost

たぶんデフォルトだとこの状態なので、以下のように書き換える。
(このファイルに山ほどIPとホスト名があって、特に身に覚えがない場合、たぶん怪しいソフトにやられてますので、調べるなり何なりしましょう)

127.0.0.1 localhost vh1.localhost vh2.localhost



よし、見れるハズ。

http://vh1.localhost/にアクセス
It works! (hv1)

http://vh2.localhost/にアクセス
Forbidden
You don't have permission to access / on this server.

だめでした。403ということはアクセス制限っぽい何かでしょう。
さっき設定したエラーログに
[Mon Jan 15 20:37:15 2007] [error] [client 127.0.0.1] client denied by server configuration: C:/hogehoge/apache/htdocs_v/

こんなのが出てる。
extra/httpd-vhosts.conf に
<directory "C:/hogehoge/apache/htdocs_v">
order deny,allow
deny from ALL
allow from ALL
</directory>


を追記しないとダメっぽい。

さて、見れるハズ。

http://vh1.localhost/にアクセス
It works! (hv1)

http://vh2.localhost/にアクセス
It works! (hv2)


やったー動いた。

名前解決をhostsに書いてるから、hosts書いたこのマシンからしかアクセスできないけど、そこは本題じゃないから無視!
スポンサーサイト
  1. 2007/01/15(月) 21:21:58|
  2. その他
  3. | トラックバック:0
  4. | コメント:0

mysqldumpでバックアップしたSQLでリストアすると外部キー制約に引っかかる

mysqldumpでバックアップしたSQLで
リストアすると外部キー制約に引っかかる。

そういう場合、

ダンプしたSQLの頭に
SET FOREIGN_KEY_CHECKS=0
外部キー制約を一時的に無視する)

一応、ケツに
SET FOREIGN_KEY_CHECKS=1

で、とりあえず通る。


SET FOREIGN_KEY_CHECKS=0 を設定して、
制約違反のテーブルを作成しておくとどうなるのか、
知らないと怖いので、そのうちやってみる。

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2007/01/12(金) 15:49:05|
  2. mySQL
  3. | トラックバック:0
  4. | コメント:0

WindowsのApache2.2が起動しない

Apacheを起動しようとすると、こんなエラーが出る。
apache_failure.png
[error] (OS 2)指定されたファイルが見つかりません。: No installed service named "Apache2".

ApacheMonitor→startでも"httpd.exe -k start" でも変わらず。

Lavie は最初っからApache入ってて動いてたから、
それ消して新しいのを入れなおした記憶があるけど…
その過程で変なことしてたかな。

Googleで調べてみると、IISやSkypeが80番ポートをつかんでると
同じエラーになるらしい。

でも、IISもSkypeも入れてない。

ということは、ほかに80使ってるサービスがあるということ?

うーん、 netstat -a しても何もない。

スタート→管理ツール→サービス を眺めて、80使ってそうなものを探してみる。

あれ?

apache_failure_2.png

こうか…?

apache_failure_3.png



起動するようになりました。。。
  1. 2007/01/10(水) 18:28:28|
  2. Apache
  3. | トラックバック:0
  4. | コメント:0

PHPのwhileとforeach

PHPの配列総なめの書き方で、自分はいつも

 foreach($ary as $key => $val) ...
だったけれど、いろんなサイト見て回ると

 while($list($key,$val) = each($ary)) ...
みたいな書き方をよく見かけた。

1年ぐらいPHP触ってたけど、これ見るまでeach関数なんて知らなかった。
(車の免許とって3週間目みたいな、慣れてきたせいで
 一番事故起こしやすいレベルのPHP歴なんだろうなぁ)

なんかくやしかったので、
配列長100,000を二つの方法でループさせて時間計測。

while time: 0.34173083305359
foreach time: 0.11416602134705
(while/foreach)*100 = 299.32796905901

foreach time: 0.08992600440979
while time: 0.33068990707397
(while/foreach)*100 = 367.73557242356
(PHP5.1.6 Apache/2.2.3)

何回やってもforeachのほうが3~4倍早かった!
よし、くやしくなくなった。


コード
<?php
$time_while = 0;
$time_foreach = 0;

//ループさせる配列長
$length=100000;

//whileを先に計測----------------------------
$time_while = execute_while($length);
$time_foreach = execute_foreach($length);

echo "while time: ${time_while}\n";
echo "foreach time: ${time_foreach}\n";
echo "(while/foreach)*100 = ". ($time_while/$time_foreach)*100 ."\n";
echo '\n';

//foreachを先に計測--------------------------
$time_foreach = execute_foreach($length);
$time_while = execute_while($length);

echo "foreach time: ${time_foreach}\n";
echo "while time: ${time_while}\n";
echo "(while/foreach)*100 = '. ($time_while/$time_foreach)*100 ."\n";
echo '\n';
exit();

//現在時刻を取得する関数
function getmicro(){
  list($msec, $sec) = explode(" ", microtime());
  return ((float)$sec + (float)$msec);
}
//whileでlength回ループする関数
function execute_while($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  while(list($key, $val) = each($ary)) $ary[$key] = $val .= "read";
  return getmicro() - $time;
}

//foreachでlength回ループする関数
function execute_foreach($length){
  //配列作成
  $ary = array();
  for($i=0; $i<$length; $i++) $ary[] = "num.$i";
  //計測開始
  $time = getmicro();
  foreach($ary as $key=>$val) $val .= "read";
  return getmicro() - $time;
}
?>




  1. 2007/01/09(火) 20:19:57|
  2. その他
  3. | トラックバック:0
  4. | コメント:2
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。