Windows版XAMPP + OpenPNE インストールメモ

OpenPNEがどういう感じか見てみろと言われたのでローカルにインストールしてみた。
コマンドは面倒くさいからインストーラーが欲しいと思った。

前提

XAMPPディレクトリ
D:\xampp

インストールディレクトリ
D:\xampp\htdocs\openpne

OSはWindowsXP

OpenPNEバージョン3.4.6.2

XAMPPのバージョンは1.6.8だった。PHPは5.2.6

“Windows版XAMPP + OpenPNE インストールメモ” の続きを読む

[php] PHPでcsvとtar.gzファイルをダウンロードさせる

ZeroMailの管理画面から、ログと添付ファイルをダウンロード出来るようにした。
ログファイルはCSVで、添付ファイルはディレクトリごと一括してtar.gzです。

ダウンロードアラート

CSVはともかくtar.gzにてこずったのでメモっておくことにする。
※TarはPEARでなくコマンドでやっつけてます。

“ PHPでcsvとtar.gzファイルをダウンロードさせる” の続きを読む

[php] ワンタイムURLの作成と登録確認のメール送信

ユーザー登録の確認で、入力されたメールアドレスに有効期限つきのURLが送信されて
そのリンクをクリックしてページを表示して初めて登録が完了するというのがある。
それについてGoogle先生に聞いても具体的に教えてもらえなかったので、想像だけで組んでみた。

send:

  1. ユーザーから送信された登録情報をチェック
  2. エラーがなければトークン作成
  3. トークンを名前にしたテキストファイルをトークンディレクトリに作成
  4. 作成されたトークンファイルに有効期限のタイムスタンプ保存
  5. トークンを追加したURLを本文に書いたメール送信
  6. 送信しましたメッセージ表示

access:

  1. メール送信したURLにアクセスがある
  2. GETでトークン取得
  3. トークンディレクトリから同名のファイルを検索
  4. ファイル作成日+期限と現在時刻の比較
  5. 期限内であればtrue ファイル削除
  6. 期限外であればfalse ファイル削除

フォルダをテーブルにしてファイルをレコードにすればデータベースでも…
“ ワンタイムURLの作成と登録確認のメール送信” の続きを読む

[php] アルファベットや数字を順番に出力する

「アルファベット 順番に」とかで計算すると大抵ソートが引っかかると思う。
確かに並び替えはよく使うけど、ループのキーを出力する文字列の接頭に振る事も良くあると思うんだ。

foreach($array as $i => $value){
	print $i.' : '.$value.'<br />';
}

配列のインデックスは先頭が0からなのでそのまま出すと0,1,2,3…と続く。
foreachとかなら+1したりforなら$iを1にすればいいのだけど、
アルファベットの時困るし、必ず1からループさせるとも限らない。

そこでchrです。
chrはASCII文字コードを引数として該当する文字を出力する関数。

foreach($array as $i => $value){
	print chr(49+$i).' : '.$value.'<br />';
}

英数の1はASCIIコードだと49なので、49に$iを足せば1からの連番になる。

同じようにして65+$iなら大文字アルファベット、97なら小文字アルファベットになる。

foreach($array as $i => $value){
	print chr(65+$i).' : '.$value.'<br />';
}

逆にするなら減算。$iが中途半端な数字なら合計がASCIIコードと同じになるよう計算すればおk。

[Ajax + PHP] Web2.0的にHTMLソースを隠す方法

MooToolsで遊んでる時になんとなく思いついた。

HTMLソースを完全に隠すことは無理っちゃ無理だけど、サイトの内容をパクられたりしないように防御する事は出来る。
主要な柱は以下3つ。

  • ファイルの置き場所を隠す
  • ソースを読めなくする
  • アクセスを弾く

ロボット対策、右クリック禁止、Flashサイト化、HTMLソースそのものの暗号化するなど色々あるけど、
Web2.0とか言われている時代なのでAjaxを使う方法もアリなんじゃないかなと思ったわけです。

クローラーにキャッシュされず、メールアドレスも拾われず、右クリックしても無駄、「ソースを表示」選んでも主要部分は見えない。
それらの需要を大体カバーするサイト制作方法についての解説とサンプル。

簡単なデモを作ってみた
(デモはサンプルと構成が異なります)

サイト構成例

  • index.html
    メニューボタン、コンテンツ表示エリアを置く
  • style.css
    スタイルシート
  • view.js
    表示とかHTTPリクエストの制御をする
  • reqest.php
    view.jsからのリクエストを受けてページ内容を返す
  • page/about.php, gallery.php, contact.php
    表示するコンテンツページ

“[Ajax + PHP] Web2.0的にHTMLソースを隠す方法” の続きを読む

[PHP] ページング機能の仕組みとか作り方とか

ページング機能というのは、「複数に分かれたページの前後ページへ移動するためのナビゲーションリンク」のことで
このブログにも下の方に次のページへ移動させるためのページ番号リンクがありますよね。それです。

先頭の何ページ目かまではページ番号、それ以上は三点リーダーとかでぼかしたりするGoogleライクなものや、
前後への矢印だけしか表示させなかったりするものなど、スタイルは色々ありますが
これが自作しようとすると結構面倒臭い。そしてプログラミング初心者だとまず仕組みが良く分からない。
結構よく使うのに作り方や仕組みの解説をあんまり見ない気がするので書いてみます。

10周年記念にVue版を書きました!
[Vue] ページング機能の作り方とコンポーネント作成入門
“[PHP] ページング機能の仕組みとか作り方とか” の続きを読む

[php] GeSHi v1.0.8.4 Compilation failed error on line 2132

最近WordpressプラグインであるiG:Syntax HiliterのGeSHiを最新のv1.0.8.4にバージョンアップしたんです。
その後しばらくしてサーバーのエラーログ見たらご覧の有様だよ!

これはひどい。

で、ちょっとぐぐってみたら記事を書いている方が居ました。

Not knowing exactly where to start in diagnosing this crazy expression, I simply disabled those “script delimiters” in the geshi/php.php file. The sections I commented out are lines 1080-1101. Now the script delimiters like <?php don’t get highlighted nicely, but I feel that’s a small price to pay for eliminating these errors. Another solution for the WP-Syntax users seems to be to downgrade to 0.9.4. Hopefully in the near future an update to Geshi will come out which fixes this issue once and for all.

つまりこのエラーを止めるには、

  1. geshi/php.phpの1080-1101行をコメントアウトする
  2. GeSHiをver0.9.4にダウングレードする

以上2つの手になると。
sourceforgeにはv1.0.0以上しか見つからなかったから1の方法にしといた。
そしたらHTMLが変換されなくなってたからしかたなくver3.5に入ってるやつに戻した 🙁

[PHP]フォームの2重送信防止をCookieで行うサンプル

2重送信防ぐ方法でセッションにワンタイムパスワードみたいなの保存しとく方法があけど、
セッション使いたくないなーと思った時は変わりにCookieに保存しとくっていう手もある。
1ページ完結のスクリプトだと特にheader()で飛ばすとエラー出る事もあるので結構便利だと思う。

1、フォームのheddenでトークンIDをセット。IDは表示されるたびに入れ替わる。

print '<input type="hidden" name="ticket" value="'.getTokenId().'" />'."\n";

2、保存とか送信とかが成功した時点でPOSTされたトークンIDをCookieに保存するようにして

$ticket = $_POST["ticket"];
setNewCookie("sample_ticket",$ticket,time()+(3600*24*30));

3、Step2の前のタイミングでPOSTをチェックして、保存されたチケットとPOSTされたチケットが同じなら弾くようにする。

if($_POST[ticket] == $_COOKIE["sample_ticket"]){
	print "不正な送信です";
}

▼サンプルソースの関数

//トークン用ID発行
function getTokenId(){
	return substr(md5(uniqid().mt_rand()),-13,10);
}
//クッキー発行
function setNewCookie($name, $value, $time){
	return setcookie($name, $value, $time);
}

セッションの場合もやり方は同じ。

[PHP]闇鍋ジェネレーター

オンラインで闇鍋!
はいはいはいはい、意味あんの?とか言わないそこ。

登録された具材からランダムで1つ選んで表示。
選ばれた具材は都度削除されていくって仕組みです。
パスワードはpassです

ランダムで何かするのと、自作のクラス使ってみたかっただけ。だったり。
使うシーンが殆ど浮かばないんですが、もう少しアレコレしたら配布しようかな。

※秘密コマンドもあるでよー(使用許可取得済み。ありがとうございました!)

[PHP]ZooChatのHTMLログソースを自動修正する

チャットのログをHTMLソースで保存した時の手直しが面倒臭いので、自動で修正するスクリプトを組みました。
とりあえず作ってるよーっていう報告だけです。

zoochat converter

ZooChat対応なのは良く行くサイトがZooChat使ってるからなんですが、
ソースは割と似たり寄ったりなので、他のチャットへの対応も可能だと思います。

こんな事します▼

  • チャットログ以外の行削除
  • タイトル変更
  • タグのネストミス修正
  • 入退室案内ログ削除
  • 名前リンクの削除
  • IPの削除

あとはやろうと思えば携帯用とか印刷用の置換も出来る。

こういうの需要があるのかどうかがよく分かりません(´・ω・`)
ご意見・ご要望などあればコメントへお願いします。

[PHP]各曜日ごとの日替わり・特定の日付で表示させる

日曜~土曜の曜日ごと、または特定の日付で表示をさせるサンプル。
定期的に開催されるイベント告知やトップページのお知らせなどに。

携帯サイトでも使えます。

< ?php
$time = time();
$day =date("j",$time);
$jpweek = array("日曜日は","月曜日は","火曜日は","水曜日は","木曜日は","金曜日は","土曜日は");
$event = array("sunday","monday","tuesday","wednesday","thursday","friday","saturday");
$week = date("w", $time);
?>

< ?php
print date("Y年n月j日",$time).$jpweek&#91;$week&#93;."<br />";
print $event[$week];
?>

“[PHP]各曜日ごとの日替わり・特定の日付で表示させる” の続きを読む