カテゴリー: PHP

PHP覚書 正規表現

はぁ~

正規表現は本当にイヤだ。
便利なんだが、とっかかりにくい。

それはさておき、メモメモ!
phpで値を定義するdefine関数の定義と値をとってきたい!などと思って、とりあえず作ってみた。


$arr1 = preg_split(‘/^define¥(|¥)¥;/’, $buf);
$arr2 = explode(‘,’, $arr1[1], 2);

本当はpreg_split 1回で済ませたいのだが、

define(AAA, 1);
define(ABC, “A,B,C”);

みたいな定義をしているもので、
「1つめのカンマは効いてほしいけど、2つ目以降は見てほしくないの!」
なことをしたい。
だけど、preg_splitでカンマで区切るのは1回だけ!っていう指定をどうやってやるのかわからんかったので、とりあえず、preg_splitで「define(」と「);」 で、

 array( “”, “AAA, 1”, “”)

という感じに分割させて、その後、

できた配列の2つめの文字列(上で言うと、”AAA, 1″)をカンマで2つの配列に分けよ!

ということでexplodeを利用してみた。

もっといいやり方ないかな・・・

PHP覚書 Oracleに接続するときの注意

PHPのOracle接続について、なんとなくわかったことを書いておく。

WindowsServer2008にApacheとPHPを入れたところ、OCI8のライブラリ情報がphpinfo()で表示されなかった。

なんでじゃぁ~~~~!!

と、迷っていたのだが、詰まるところPHPが32bit対応の場合は、Oracle自体も32bitでないと駄目なようで、
Oracleが64bitの場合は、32bitのOracle Clientを入れるとか、32bitで仲介するツール群をインストールするとかしなければならないようである。

もう1つの手といえば、おそらくPHP自体を64bit用にコンパイルすることだろう。
コンパイルしたものも実際にあるようだが、商用で使うのであれば、自身でコンパイルしておいたほうがいいと思う。

PHP覚書 MDB2 oci8_11gで接続(苦戦)

MDB2Oracle11gに接続しているのだが、なんだか実行速度が遅い。
これはひょっとすると、Oracle10gのクライアントをちゃんとアンインストールしなかったからなのでは?
と思い、Oracle関係のファイルをすべてアンインストール後、再度11gを入れなおしたのだが、これが災いして、11gに接続できなくなった。

php_oci8_11g.dllはモジュールが見つからないとかアラームが出て、Apacheもまともに起動できなくなった。

ウゲェ~

と思い、2,3日を悶々と過ごし、ようやく再接続に成功した。

原因がよくわからないのだが、
結局は、アンインストールしても環境変数にゴミが残ってしまっててダメだったようだ。
環境変数のPathやTNS_ADMINが正しく設定されているか確認後、Windowsを再起動してApacheは起動できた。
phpinfoで確認して、oci8が動作していることも確認。

で、実行速度は・・・と言えば、変わらなかった。
タイムアウトでシステムエラーになるので、php.iniのmax_execution_timeの値を変えてみて、とりあえずエラーにはならないようにしたのだが。

結局SQL文が悪いのか?

CakePHPはじめてみた

CakePHPを使えば楽にWebサービスを作ることができるよ!

と言ってたので、時間を見つけてやり始めることに。
インストールして、チュートリアルを見ながら一つずつファイルを作成して、

ほうほう、なるへそ。こいつは早い

って感心したのだが、もっと早くできる方法。

そう焼くんだよ。Bakeだよ。

ってあるのは知ってたけど、

いや、これも勉強だよ!

って、使わずにいたけど、やっぱりやり方を知っておいた方がいいわね、と思ってコマンドプロンプトを開いてやってみたら・・・

はやっ!!!

早すぎ。おまけに完璧。
あぁ、そういうことなのね。人の忠告(じゃないけど)には素直に従うものです、ハイ。

PHP覚書 json_encode未対応に対応する

json_encodeはPHP5.2から対応ということで、5.1の環境では使えない。

ということを今日知った。

終わったと思って悠々としていたのに、今日はその対応で必死・・・

といっても、無事終わったけど。

本当にネットって有難い。欲しい情報が見つかるときは・・・だけど

やり方はいろいろあるようだけど、参考にしたのはこのサイト。
ある1つのサンプル PHP5.2以前の環境でのjson_encode

このほか、Services/JSON.phpを取り込む方法もあり。

キュニナル!! PHPのバージョンが低くて「json_encode()」が使えないでござる

なるほど・・・
でもさ、本当は、バージョンぐらい上げてよ!と言いたい。
(まぁバージョン上げたら次はWarningばっかり出るようなことになることもあるんだけど)

PHP5技術者認定初級試験を受けてみる

PHPの試験を受けてみようと決めたのが月の初めだったか。
初級の後、続けて上級も受けようと、アールプロメトリックで予約を取ったが、あまりに時間がないので上級の予約をキャンセルして初級の試験だけにすることになった。

今月は会社で土日出勤しなければならず、とても上級試験に受かりそうもなかったから。
上級試験の合格率は10%強ということで、結構厳しいようだ。
そこへいくと、初級試験は7割弱は合格するレベルなので、まぁ頑張れば受かるかな・・・と。

まずはじめに、認定教材である「PHP5技術者認定初級試験対応 PHP公式資格教科書」を買って一読。
そして次に、ITトレメの模擬問題をやってみたのだが、教材レベルではとても解けそうにない問題が数多くあり、急いでオライリーの「プログラミングPHP 第2版」を買いに走る私。

「プログラミングPHP 第2版」を順に読んでいくものの、とても試験日までに最後のページまでたどり着けそうもないため、途中で断念。

試験の前々日、前日は、再度「PHP公式資格教科書」とITトレメの模擬問題をやって試験に臨んだ。

問題はよくわからないものもあったが、それでも大学受験とかと同じ要領で答えていけば大抵はあたるのではないかと思う。
たとえば、「必ず・・・」とかいうのは間違い、とか。

まぁ、そんなこんなで、100点には届かなかったものの、30分強で試験を終えて無事合格はできた。
試験問題について書くことはできないけれど、自分が間違えたのはマルチバイトのメール送信のところだった。
ちゃんと教科書にも書いてあることだったのに・・・
Mix-inって言葉が出てきて、なんじゃそれ?って思ったけど、多重継承のことだった。

認定教材だけでは合格できないと思うけど、ITトレメを一通りやれば受かるかなぁと思う。

WordPressに天気予報表示を付けてみる3

WordPressに天気予報表示を付けてみる2では、livedoorのWeather Hacksを使った天気予報表示を試してみたが、次はGoogle Weather APIを利用した天気予報表示を試してみる。
cssは省略。

<?php

// APIからXMLデータ取得
$city = 'osaka,osaka';
$gpath = 'http://www.google.com';
$url = $gpath . '/ig/api?weather=';
// 取得データから表示項目取得

$xml = simplexml_load_file($url . $city);

$objInfo =  $xml->weather->forecast_information;
$first_date = $objInfo->forecast_date[data];

echo '<div>in ' . strtoupper($objInfo->postal_code[data]) . '<br>';

$i = 0;
foreach ($xml->weather->forecast_conditions as $cond) {
	$week = $cond->day_of_week[data];
	$icon_url = $gpath . $cond->icon[data];
	$low = $cond->low[data];
	$high = $cond->high[data];
	$condition = str_replace('Chance of ', '', $cond->condition[data]);
	
	echo '<div>';
	echo '<img src="' . $icon_url . '" alt="icon" />';
	echo '<div>' . '';
	echo date('Y-m-d', strtotime ($first_date) + $i * 86400) .'[' . $week . ']<br>' . $condition . ' ';
	if (strlen($low) > 0 || strlen($high) > 0) {
		echo strlen($low)>0 ? convertF2C($low) : '';
		echo '-' ;
		echo strlen($high)>0 ? convertF2C($high) : '';
		echo '℃' ;
	}
	echo '</div>';
	echo '</div>';
	$i++;
}
echo '</div>';

//華氏摂氏変換
function convertF2C($val) {
	return round(($val-32)*5/9);
}
?>

Google Weather APIでは今日を含めた4日分の予報が取得できる。

PHP覚書 break

VisualBasicのGoto文とか、Javaの break ラベル名とかと似たような機能はないものかと調べたら、一応PHPにもgoto文があるらしい。

goto ラベル名; ・・・飛び元

で、

ラベル名:    ・・・飛び先

ただ、break文には引数があり、それを使う手もあるとのこと。

つまり、よく使う「break;」は、「break 1;」ということらしく、

break 2;

となると、2つ外に出るということになるのだそうな。

例えば、

for (条件A) {
    for (条件B) {
        if (条件C) {
            break;
        }
        if (条件D) {
            break 2;
        }
    }
}

とすると、
条件Cのif文内のbreakからは、条件Bのfor文の外へ出ることになり、
条件Dのif文内のbreakからは、条件Aのfor文 の外へ出ることになる。

なかなか、便利ではないか???

WordPressのカレンダーをカスタマイズ

折角なのでWordpressのカスタマイズをしてみる。
本当はプラグインでやるべきだケド、それはまた別の機会に。

前からやりたかったのが、カレンダーの土日の色づけ。

calendarでソースをGrepすると、
wp-includes/general-template.phpに処理があることがわかった。
その中のfor文で1日~末日をグルグルまわしているところに、土日それぞれのセルにsaturday,sundayのIDを振る処理を追加。

for ( $day = 1; $day <= $daysinmonth; ++$day ) {

まずは、$weeknumって変数を作って曜日を数値化したものを取得。
次に、if文に分岐を増やして、土曜、日曜分のIDを振ってやる。

$weeknum = calendar_week_mod(date('w', mktime(0, 0 , 0, $thismonth, $day, $thisyear)));

if ( $day == gmdate('j', current_time('timestamp')) && $thismonth == gmdate('m', current_time('timestamp'))
&& $thisyear == gmdate('Y', current_time('timestamp')) )
$calendar_output .= '<td id="today">';
// add 2011/08/05 from ----------------------
elseif ($weeknum == 0)
    $calendar_output .= '<td id="sunday">';
elseif ($weeknum == 6)
    $calendar_output .= '<td id="saturday">';
// add 2011/08/05 to ----------------------
else
$calendar_output .= '<td>';

あとは、使用中のthemeフォルダにあるstyle.css#todayあたりに、saturday,sunday用のスタイルを追加しておけばOK。

以上、オシマイ。

w03.gifでけたよ~!

WordPressで絵文字を使う

WordPress Plugins/JSeriesよりemojiプラグインを拾ってきた。

1キロバイトの素材屋さんや、
エモジバなどで、絵文字素材を拾ってきた。

そして、使ってみる。

ちょっと感動・・・

[2017/03/29追記]
Wordpress4.2から絵文字が使えるようになったらしいのだが、気にすることもなくずっ~~~と過ごしていた。
しかし、よく考えると、外部のプラグインに依存するというのもちょっとなんなので、一気に修正。

http://getemoji.com/

にアクセスして、利用できる絵文字を確認。
使いたい絵文字をコピーして、貼り付けるだけでOK。

OK?

なんか、見た目が違うような・・・あぁ、OSによって違うのか・・・😅