カミジン@ファンタの平穏な日常 Blog

パソコン・カメラ・アニメがないと3日持ちません。そんな学生のダラダラ日記。

イラスト:con_cen_t

カテゴリ:プログラミング

0MySQLでのタイムゾーンを設定する

カテゴリー:PHP,WEB

MySQLでタイムゾーンを変更する方法。

今後サマータイムとか導入する際には役立つと思われます。導入する予定がなくとも、GMTで時間を管理する方がいいかもしれませんね。

さて、次のコマンドでタイムゾーンを設定できます。

SET GLOBAL time_zone = '+0:00';
SET time_zone = '+0:00';
SELECT NOW(); 

一行目は管理者の権限を持っているときに、全体のタイムゾーンを変更するクエリです。2行目はそのセッションでのみ変更するクエリです。レンタルサーバーなどで管理者の権限を持っていない場合は、DBに接続する都度2行目のクエリを実行していただければいいかと。

ではっ

0PHPのjson速度テストスクリプト

カテゴリー:PHP

PHPのjsonが遅いと聞いて試してみました。

<?php
$startTime = microtime(true);
$array_count = 200;
$test_count = 500;
for( $i=0; $i<$array_count; $i++ ){
	$array[md5( rand().microtime(true) )] = md5( rand().microtime(true) );
}
echo "array count : ".count( $array )."\n";
echo "processing time : ".processing_time()."ms\n";
$i = 0;
do {
	$i++;
	unset( $json );
	$json = json_encode( $array );
	unset( $array );
	$array = json_decode( $json );
} while ( $i < $test_count );
echo "processing time : ".processing_time()."ms\n";
print_r( $array );
function processing_time( $round = 3, $x = 1000 ){
	global $startTime;
	$time = number_format( (microtime(true) - $startTime) * $x , $round );
	return $time;
}

上の辺りの200とか500とかいう数字を変えてもらえれば結構です。

配列の個数200,テスト回数500で試したところ以下の結果でした。

array count : 200
processing time : 1.943ms
processing time : 358.172ms
jsonのループには500回で350ms程度の処理時間となりました。
思ってたより・・・・・ まぁこの速度が命取りになりうるのですが、使い方によっては十分アリかなと
メモリ関係は面倒なのでやってません。
ちなみに最近遊びすぎてブログ更新できてません。

0一行のテストPHPスクリプト

カテゴリー:PHP

記事に書く程でもないんですが、最近更新してないと思って・・・・

<?php if(false){?>This is HTML File!<?php }echo"This is PHP File!";?>

この一行が便利すぎて
サービスの開発とかやってるんですけど、PHPで動くのかとか確認するときにいつも使ってます。
新サービスの方はドメインの取得・追加、サーバーのコア部分の作成までだいたい終わりました。
後はログイン管理とTwitterの各API実行の自分用ライブラリを書こうかなと思ってます。セッション管理がPHP標準のものだと不都合があるのでねー

まぁ生存報告でしたーノシ

0東京電力の計画停電 地区分けの検索サービス開始

カテゴリー:HTML/CSS,PHP,WEB

完全に乗り遅れましたが。

http://kamijin-fanta.info/kantou/

携帯からのアクセスもたぶんいけます

携帯からはトップに行かず、直接検索画面になります

 

見れば使い方はわかると思いますが、一応説明します。

上のURLにアクセスし、下の方にある県を選択してください。

そのあとは、住所をたどっていくのみです。

ひとつの地域に複数の区分がある地域がありますが、詳細はサポートセンターなどに問い合わせしてください。

0「mysql_connect」と「mysql_pconnect」 どちらを使うか(PHP)

カテゴリー:PHP,サーバ

まずはPHPマニュアルをお読みください

http://php.net/manual/ja/function.mysql-connect.php

http://php.net/manual/ja/function.mysql-pconnect.php

pが頭につくとMySQLサーバへと持続的な接続が開始されます。
いちいちセッションを開き直さないで良いって言う考えはkeep aliveと似てますかね?
PHPのファイルを超えて接続を持続させます。
それで持続させることによってどれほどのタイムの差が出るのか検証してやりました。

 

実験環境

サーバ:onamae.com SD共有
PHP Version 5.2.12
MySQL 5.0.51a-log

 

コード

(真ん中辺りのmysql_connectを入れ替えて実験しました)

<?
$startTime = microtime(true);
$dbServer = '########';
$dbUser     = '########';
$dbPass     = '########';
$dbName     = '########';
$loop = 10000;
for( $i = 0; $i < $loop; $i++ ) {
if (!$link = mysql_connect($dbServer, $dbUser, $dbPass)) {
$flag = FALSE;
echo " 処理時間" . (microtime(true) - $startTime)  . '秒';
die ( "Data Base Error!! loop:$i/$loop" );
} else {
mysql_close( $link );
}
}
$endtime = microtime(true);
echo "正常に処理は終了しました loop:$i/$loop処理時間" . ( $endtime - $startTime)  . '秒';
?>

一万ループもテストしてすいませんね

まぁ昼間だしいいでしょ

てかもっと回したい

 

実験結果

mysql_connect

処理時間9.3142991065979秒 / 1万ループ

mysql_pconnect

処理時間1.9520409107208秒 / 1万ループ

差は「1万ループで7.3622581958771秒」となりました。

結構mysql_pconnect使えるかも

 

でも「同時接続数の制限」は絶対に忘れないでくださいね。

まぁ1DBでやってるなら全く問題ないとは思いますが。

0閲覧記録をクッキーとかで作るメモ(PHP)

カテゴリー:PHP

if ( isset($_COOKIE["history"]) ) {
    $historydata = check($_COOKIE["history"]);
    $historydata = explode( ";" , $historydata );
    foreach( $historydata as $v ){
        $n++;
        $tmp = explode( "/" , $v );
        $history[$tmp[0]]  = $tmp[1];
    }
    $history = array_slice( $history , 0 , 15 );
} else {
    $nohistory = true;
}

 

if ( !isset($history) ) {
    $history = array();
}
$tmp = array( $name => "URL" );
$history = $tmp + $history;

foreach( $history as $v => $d ) {
    $data1[] = $v . "/" . $d;
}

$data = implode( ";" , $data1 );

setcookie( "history" , $data , time()+(60*60*24*90) , "/" , "kamijin-fanta.info" , false , true );

//以下書き出し用

foreach( $history as $v => $d ) {
    if ( $d == "chara" ) $d = urlencode( $v );
    $url = "http://kamijin-fanta.info/indexdb/" . $d;
    echo ‘<p><a href="’ . $url . ‘">’ . $v . ‘</a></p>’ . "\n";
}

カスタマイズするべきであろう箇所をオレンジで色つけてみたー

ちなみに配列の構造を少しかえるだけでURLの他に色を記録したりとかなんとか~

具体的には一つ目のブロックの$historyに入れるのを配列に。。。。。。

まぁいいか

ぐちゃぐちゃだが俺専用だから関係ない

以上

0JavaScriptでSleep,Watiメモ

カテゴリー:Java Script

良いサイトがあったので

http://f29.aaa.livedoor.jp/~morg/wiki/index.php?JavaScript%2FSleep%2CWait%A4%CE%BC%C2%C1%F5

 

以下コピー

////////////////////////////////////////////
//
// ■ ある(グローバルな)条件が満たされるまで一定間隔で監視を行い、
//    条件が満たされたら指定された処理を呼び出す関数
//
// ■ setViser( 監視する条件式(文字列) ,
//		条件が満たされとき呼び出す関数(文字列) ,
//		監視間隔)
//    ※条件式の中の変数、関数などはグローバルのものである必要があります。
//	必要に応じてグローバル変数に移しておきます。
//    ・何個も起動できます。
//
var g_IdViser = new Array(); // 監視タイマーのID
var g_NumViser = 0;      // 監視器のの数
var g_i = 0;        // グローバルカウンタ
function setViser( cond , funcCall , timeVise)
{
// 条件が満たされれば、タイマーをクリアして関数を呼び出す
strFunc = "" +
"if(" + cond +"){ " +
"clearInterval(g_IdViser[" + g_NumViser + "]);"
+ funcCall + ";" +
"}";
// 監視タイマーをセット ( setInterval)
g_IdViser[g_NumViser] = setInterval( strFunc , timeVise);
g_NumViser++;
}

 

要するにsetIntervalでtimeVise毎にcondを調べるんですね

勉強になりました

0Yahoo ジオシティーズにおけるフレームを使ったリファラー問題

カテゴリー:HTML/CSS,Java Script,WEB,サーバ

昨日知恵袋にて質問している方がいたのでメモしておきます

その質問は「あるページが見れる人と見れない人で分かれる」ということでした。サーバはYahooのジオシティーズを使っている様子です。サイトは主にフレームで構成されていました。 見れない人はどのデバイスからも見れない状態で、見れる人はどのデバイスからも見れるという不思議な現象がおきている様子でした。

その「見れない人」の再現性を確認するまでにかなりの時間がかかりましたが。。。。。

 

原因は至って簡単でした。

プロパイダ?と思った方もいるかも知れませんが、「アクセス経路」でした。

HTTPの通信にはヘッダというデータがつきます。これには「どのファイル」「Cookie」「?以降の文字」など、そして「どこからアクセスしたのか」というデータも含まれます。

多くのレンタルサーバー(無料のものなどが多い)では、迷惑な直リンクを防ぐために様々な対策をしています。そしてその直リンクを防ぐ方法が「どこからアクセスしたのか」というリファラーを確認するというものがほとんどです。

YahooではJavaScriptを使った直リンク対策もしていたようです。

あるHTMLにはリファラーがない(アクセス元がない)アクセスに関しては404をご丁寧にも返してくれる仕様だそうです。(このあるHTMLの判定基準は分かりませんでしたが、この問題が起きているページの拡張子は.htmでした)

もともと指摘されていましたが、フレームを使用した場合、HTMLのリクエストへリファラーが送信されないというブラウザの仕様がジオシティーズと喧嘩してしまったみたいです。

 

この例の場合Googleの検索から目次ページそして本文のフレームページへとリンク 何故かこれがリファラーが送信されない対象になってしまってたようです。

 

確かFC2などはリファラーの対策がサーバ側だったのでほぼこのような問題は起きないと思います。

 

対策としては

よく「ようこそ」画面を出している方もいますが、あれが一番効果的なのです。ワンクッション置くとリファラーがどの状況でもうまいこと作動してくれます。

その画面にリンクさせる→フレームを用いた目次→フレームを用いたページ

となる方は一度google検索からページを確認してはどうでしょうか?

 

 

ながながとありがとうございます。

質問あればご自由に

では

 

リファラー … Referer

0ICCプロファイルをXMLに変換して扱いやすくするメモ

カテゴリー:PHP

ICCプロファイルを使う用事があったんだが、バイナリ読むのも英語の仕様書読むのも、、、、、、

なので、IccXMLというソフトでXMLに変換して自分の得意分野で読んでやろうと思いまして。

 

ICCのサイトに小さくありました。http://www.color.org/opensource.xalter

「Open source tools」というページに「IccXML」のリンクがあるのでそれをたどってDLします。

DLするとソースとかいろいろあるのでそのなかのComandLineなるものを探してください。

「\IccXML-0.9.5\CmdLine\IccToXml\Release」のパスにたどり着くと思います。

ちなみにIccFromXmlとかいうのもあるしなかなか役に立つかも・・・・・・

んでコマンドで「IccToXml」を実行すると、親切にどう開くかを書いてくださっているので「IccToXml test.icc text.xml」の文で打ち込んでやります。

XMLにすると4倍ほどの容量(ICCが500kとするとXMLが2Mほど)になるのはアレですが、扱いやすいとは思います。

 

まぁCとかやってる人はライブラリとかもあるし普通に行けるのかもしれないが俺的には結構な成果だったのでメモ

0第二回イナズマイレブン リアルタイムブラフについて

カテゴリー:PHP,WEB

なんか最初見たときなんだよと思ったけど、ある選手がまたセンスのいい。。。。

ということで またやろうかと

なんかもう一方の方に完全に真似された感はあるけど←

 

まぁ一応CSVの方はできたので

http://kamijin-fanta.info/inaire2/get.php?type=csv&limit=1440

&limit= を任意の数にすることによって、取得数を変更できます。

追記(01/11) メモリの関係で300行程度しか取得できない点を修正し、1440行まで取得できるように修正しました。しかし、結構なメモリを食うので、更新はあまりしないことをお願いします。何度更新しても更新されるのは1分に一度です。 また、「グラフ」については、違う方がもうやってるのでそっちに全てお渡ししようかと思います(デットヒートにならないと思うから/急ぎでいろいろやることが増えたから)。

http://ffff.orsp.net/inazuma/ CSVを使った詳細なグラフを描きたい方は本サイトのデータを使っていただき、グラフはこちらの方のページを参照していただければ。

あと、GoogleチャートAPIでiPhoneから見れるグラフ誰かつくってくれませんかね・・・? とか思ったりしてみたり そのくらい自分でつくろうかな では