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

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

イラスト:con_cen_t

カテゴリ:PHP

0ajaxでPHPに重い処理を複数呼ぶ時の注意点

カテゴリー:PHP

どうもカミジンです。
PHP開発でハマってました。

Ajaxでsleep(1)って書いたPHPに10個要求飛ばすと1秒で終わらず10秒かかって悩んでました。

原因はセッション。おそらく、セッションが開始している時にセッションを開始しようとするとブロックされるということでしょう。セッションが自動開始するphp.iniの設定もあるのでおおいにハマりそう。

自動的にセッションを開始するphp.iniの設定
session.auto_start = 1

なので、重い処理の前にセッションを終了しておく

session_write_close();

が正解でした。

0PHPでallow_url_fopenが0になっているけど外部ファイルを取得したい

カテゴリー:PHP

タイトル長くなったどうもカミジンです。

会社のレンタルサーバーがWADAXなんですけど、
allow_url_fopenが0になっておる。

file_get_contentsが使えない。

ということでfile_get_contents相当の機能を実装してやりましょう。

cURLを使えばいいらしいです。


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$contents = curl_exec($ch);
curl_close($ch);

こんな風に

結構迷った…

参考 http://stackoverflow.com/questions/4656102/equivalent-function-for-file-get-contents

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に入れるのを配列に。。。。。。

まぁいいか

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

以上

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とかやってる人はライブラリとかもあるし普通に行けるのかもしれないが俺的には結構な成果だったのでメモ