PHPにはもうウンザリ

自分の知識の無さが恥ずかったこと。

PHPで組んである、動かない入力フォームのメール送信スクリプトを、ちょっと見てくれないか? と言われ見てみたんですが・・・、はじめ、見たとき正直、なんでこれが動くんだ? と思ったんですね。

いきなり、初期化されていないグローバル変数で分岐してあるような、理解不能なコード。
だいたい要点は ↓↓↓↓ こんなん。

<?php
include('function.php');

$NAME = stripslashes($NAME);
$PHONE = stripslashes($PHONE);

if($send == 'ok')
{
 /* ゴニョゴニョ*/
}
else
{
/* こそこそ */
}

/* だいたい上記のようなコードから始まる。*/

文字列比較に == を使っているところなど、ツッコミどころ満載なんですが・・・
$NAMEって? $PHONE って? $send って? どこから来たん???
しばしPHP配布サイトのマニュアル見ながら、考える・・・・。
WAMPで立ててる、Windowsのテストサーバーで動かしても、当然ながら動かず。

(他の仕事をしながら、数時間経過)

は!? これがもしや register_globals 問題か???? と思って、実際上がってるサーバーの仕様を教えてもらうと、
register_globals は off 。まぁ・・・当たり前ですが・・・。気付けばなんてことない。

というか、PHPのバージョン 4以前から組んでいる人からすれば、すぐに気付くんでしょうけど・・・、
僕がPHPを触りだしたのは PHP5 から。当然、入力は $_GET[]や$_POST[]で取るもんだと思ってました。
「動くはずがない!」と断言してしまってました(笑) あー、恥ずかしや・・・(T-T)

っていうか、PHPってなんちゅー仕様なんだ???
register_globals を on にするメリットが全く理解できない。というか、なんでこんな設定があるのかが分からない。

ネットにアンチ・PHPって人をよく見かけるけど・・・分かる気がする。昔の人は、よくこんなキモイ仕様で書いてたもんだ。

<?php ?> で括れば、容易にサーバーサイドのコードを埋め込めるのは、便利なように見えるんですが・・・ HTMLタグとPHPコードがスパゲッティー状にこんがらかったファイルを見ると・・・たとえ自分が書いたコードでも読む気がしない・・・というか、自分で書いたものさえ2~3日したら解読不能になる orz…

mod_apreq2 のインストール

テストサーバー(NP11 w/ CentOS5)にmod_apreq2 をインストールしたので、そのメモ(備忘録)です。

mod_perl2で、Apacheの処理フェーズにフックするモジュールを書いて、いろいろ遊んでます。

結構以前からmod_perl2的なものは勉強がてら書いていたんですが、CGI的な使い方だと、かなり制約が多くて、ハッキリ言って苦労に見合うだけのものが得られません(笑) そういう用途はmod_fcgid とか遙かに良い、ということに最近になって気付いて(遅そ!)、リクエスト処理に介入してゴニョゴニョしたり、入力された(POSTされた)データをいじったり、監視したり、というような、どちらかというとApacheの動作をカスタマイズするようなコードを Perl で書くのが面白く、勉強と遊びの半々になってます(^^)

・・・で、でも、やっぱりCGI的に使う用途(PerlResponseHandlerのような)では、パースされた入力が欲しい(^^;; つまり、Apache2::Request が使いたい。。。 というわけで、mod_apreq2をインストールしました。

最初は、yum install mod_apreq とかで簡単にできるだろう、と勝手に思ってましたが、not available でした(^^;;;

しょうがないので?、ソースからビルド。僕の環境では、ソース取ってきてmake だけでは、エラーでした。事前にインストールするものがあって試行錯誤。READMEとかINSTALLに書いておいて欲しいな・・・。

CPANからExtUtils::XSBuilderモジュールと、yumでmod_perl-devel をインストールしておかないとmakeでエラーでました。はじめから入れとかんかい!と怒られそうですが…

> cpan ExtUtils::XSBuilder
> yum install mod_perl-devel

ソースを取得して適当なディレクトリに展開。

> wget –nd http://ftp.kddilabs.jp/infosystems/apache//httpd/libapreq/libapreq2-2.13.tar.gz
> tar xvzf  libapreq2-2.13.tar.gz

関連するperl モジュールもインストールしたいので・・・ ./configure じゃなく・・・

> perl Makefile.PL --with-apache2-apxs=/usr/sbin/apxs
> make
> make install

あとは、Apacheの設定ファイルに、mod_apreq2.so を食わせて、インストール終了。
 
 
 
ん~、最近、Linux(CentOS)やめて、FreeBSDにもどろうかな・・・とも思いはじめまして、でも僕がFreeBSD触ってたのって10年以上も前だし・・・、しかも FreeBSD(98)の時代だし(^^;;; と思って、調べたら・・・まだ、リリースされ続けていたんですね・・・。
どーしょっかなー。

CANVASとSVG

IE9がリリースされ、主要なウェブ・ブラウザのほぼ全てで、HTML5の<CANVAS>タグや<SVG>タグがサポートされました。IE以外のブラウザではもっと早くにサポートされてたんですけどね。

アクセス解析のグラフ表示やCSVデータのグラフィック表示など、いままで、JavaアプレットやFlashに頼っていたものが、CANVASタグだけでなくSVGタグを使って、ブラウザ機能だけで実現できてしまうので、Web開発している人には朗報かもですね。ちょっとした動的なグラフィック表示なんかjavascriptでチョコチョコッと書けば済むんですから(^^;

とくに、Illustratorで作成したデータなんかをSVG形式で保存して<SVG>タグ内にコピペしてやれば、プラグインなしに表示できますし、画像のHTML内への埋め込み(インライン)も可能。SVG自体、xmlなのでjavascriptで動的に作成もでき、使わない手はありません。

IllustratorのデータをSVGで保存し、HTMLの<SVG>タグ内にコピペしたサンプル。

ただ、SVGについては、ブラウザによって表示が違いました。firefox4とchrome(11)だと、下の画像のように・・・花の部分が欠けてしまいました。なんでだろ???ブラウザのせいとうより、SVGフォーマットへの書き出し方が悪いんでしょうか。

svg1

まだブラウザ毎に表示確認は必要みたいですね。

で、おそまきながら、勉強がてら<CANVAS>タグでなんかしてみよう! と思いたって書いてみたんですが・・・なんせ無知なもんで、ちょっとはまってしまいました。

リファレンスサイトとして参照させてもらったのは、

http://www.html5.jp/canvas/index.html

続きを読む

“HTML Speech Input” on Google Chrome

先日、Google Chromeがバージョンアップしてv11になり、音声入力APIがブラウザで実装されましたね。iPhoneなどのスマートフォンではすでにお馴染みの機能ですが、やっとこさ、PCバージョンのブラウザでも搭載されました。

なんか難しそうに思いますが、既存のHTMLのINPUT タグに、x-webkit-speech 属性を追加するだけ。

まだ独自仕様なので、speech 属性ではなく、x-webkit-speech となっています。Google Translater(翻訳) なんかで確認すると、speech と x-webkit-speech の二つが指定されています。いずれ標準化されるんでしょうかね。
lang属性で、言語を指定できるみたいです。指定しない場合はOSの言語設定が適用されるみたいで、日本語もちゃんと認識されます・・・が、しゃべる人によって認識率は低くなるのは、スマートフォンの場合と同様のようです(笑)
カタカナ語をしゃべると、英語だったり、日本語だったり、結構揺れますね~( ̄0 ̄)

HTML5仕様のようですが、別にHTML4で書いても認識出来るみたいで(当たり前か(^^;;)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=shift_jis">
		<title>Title...</title>
	</head>
	<body>
    <input type="text" name="q" speech x-webkit-speech>
	</body>
</html>

で、表示はお馴染みのマイクマークが付きます。

htmlspeech

で、音声入力をすると、この入力ボックスにワード(語)が入るので、DOM操作でこのワードを拾うときは、onwebkitspeechchange イベントをハンドリングすればいいようです。
HTML5仕様的には、onspeechchangeなんでしょうけど・・・、speech属性と同じく、onspeechchangeはまだ認識されませんでした。

// <input type="text" name="q" x-webkit-speech onwebkitspeechchange="SpeechChange(this)">
function SpeechChange(oInput)
{
  //alert(this.value); ← 記述ミス(間違い)修正しました
  alert(oInput.value);
}


//HTMLにonxxxxとか書きたくない場合は・・・、
// <input type="text" name="q" x-webkit-speech>
var oInputs =  document.getElementsByName('q');
for(var i in oInputs)
{
  if(typeof oInputs[i] == 'object')
    oInputs[i].addEventListener('webkitspeechchange',function(){alert(this.value);});
}
//とかでしょうか。

ここでややこしいのは、onchangeイベントでは拾えない、っちゅーこと。onchange は音声入力以外での入力に反応するようです。ややこしい。いずれはonchangeで拾えるようになるんじゃないかな~、とは思っているんですが・・・どうなんでしょうかね。イベントを別々にする意味はあまりないような気がするんですが・・・。

それと・・・まだ、エラーイベント(onwebkitspeecherror)がまだ実装されていないみたいすね~。
他のブラウザも実装してくれるんでしょうかねぇ・・・?

既存の入力ボックスに、x-webkit-speech 属性を追加するだけでいいので手間がかかりませんし(文字列置換で済むと思う)、問い合わせページとかの場合は、speech 属性とともに付けとくと、アクセシビリティーの向上?にはいいかもしれません。とはいいつつ、音声入力を必要とするユーザーのchrome使っている比率はメッチャ低いと思いますが・・・ただそう感じただけで根拠はありません(^^;;;

インターネット上にフォルダを置きたい(その3)

インターネット上にフォルダを置きたい(その2)
インターネット上にフォルダを置きたい」

のつづきです。

iPhone4でのクライアント証明書を使った認証はあきらめ、携帯端末からのアクセスはダイジェスト認証に飛ばすことにしました。う~ん・・・携帯なので、まぁユーザー・パスワード認証の方が無くしたときのことを考えるとそっちの方がいいかもね、と思い込むようにしました(^^;;;

で、しばらく便利に使っていたのですが・・・、大きいファイル、具体的には128KB以上のファイルがアップロードできないことが判明。。。

Apacheサーバーのエラーログを確認すると・・・、

request body exceeds maximum size (131072) for SSL buffer  

というエラーが記録されていました。リクエスト ボディー部がSSLバッファの最大値128KBを越えているよ、とか言ってます・・・。

あ~、もう面倒くせ~なぁ~・・・・

Apache2.2のSSLモジュールのドキュメントを検索かけると、そのものずばりの設定を発見

http://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslrenegbuffersize

他にも、http://www.jp.redhat.com/support/errata/RHBA/RHBA-2009-0388J.html とか。

SSLRenegBufferSize ディレクティブで 50MBに設定。これで1ファイル50MBまでオッケー。

いいかげん、もう安定運用したい。。。。