ようこそ!逆襲のニートブログへ

ブログ内検索

最近の記事

はてなブックマーク数

この日記のはてなブックマーク数

カテゴリー

月別アーカイブ

CodeIgniter 3のエラー

CodeIgniter 3を使っていて、ちょっとしたエラーにはまったのでメモ。

●セッションの設定
データベースでセッションを管理する場合、セッション用のテーブルを用意する。
このテーブルの構造が、CodeIgniter 2とは違うので注意!!!

セッションライブラリ — CodeIgniter 3.2.0-dev ドキュメント

「 database 」セッションドライバを使用するためにはまた、すでに言及したように、 テーブルをデータベース上に作成する必要があり、そして $config['sess_save_path'] にテーブル名を設定します。
たとえばテーブル名として「 ci_sessions 」を使用する場合、 こうします:

$config[‘sess_driver’] = ‘database’;
$config[‘sess_save_path’] = ‘ci_sessions’;



データベースにテーブルを作成します

MySQL の場合:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(40) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);



セッションに関しては、この2点が変わっているので注意!

●モデルのファイル名
モデルのファイル名は、先頭が大文字になっていないといけません。
オートロードで、モデルを読み込む設定をしたとき、指定のモデルが見つからない!というエラーメッセージが出ます。

Codeigniterをサーバーに設置したらエラーがでた・・・ : カバの樹

modelファイルの頭文字は大文字にすること!

つまり

model_hoge.php



Model_hoge.php

に変更する。



これで行けました!

Kindle版の電子書籍の価格がAmazon APIで取得できない件

PHPでAmazon商品データのクローラーを作っていたら、新発見!
電子書籍の商品データをクロールしていたら、Kindleは価格情報が含まれていませんでした。

普通は、ItemAttributes -> ListPrice の中に Amount 2678 (=2678円)という具合に商品価格が含まれています。
しかし、Kindle商品の場合は、ListPriceっていう項目自体がないんだよね!(困った!)

ちなみに、Amazon APIは、ちょっと古いけど、Version = 2011-08-01 で利用しています。

ググったら、対策が紹介されていました。

Amazon API Kindle 価格 取得 - Google 検索

XML - amazon product advertising apiでKindleの値段を取得する方法(41481)|teratail

amazon product advertising apiでResponseGroupsを'Images','ItemAttributes'にして
リクエストを投げたのですが、Kindle商品の価格がレスポンスのXMLにありませんでした。
kindle商品の価格をamazon product advertising apiで取得することはできるのでしょうか。
ご回答いただければ幸いです。

2016/07/18 17:54 投稿



PA-API では Kindle版商品の ListPrice は返却されません。
私が過去にやったときは、DetailPageURL のコンテンツを取得してスクレイピングしていました。
#リクエストを2回投げないといけないのが嫌ですね。。。

2016/07/19 00:38 投稿



・Amazon API経由では、Kindle商品の価格情報を取得できない。
・WebページのHTMLをスクレイピングして、Kindle商品の価格情報を取得すればOK。

そう言われたら、そうだよね!としか言えない方法ですが、今のところそれしかないのかなー。

Amazonの商品ページをスクレイピングする機会はあるので、Kindle商品だけ集中的に拾ってくる機能を用意すればいいかwww
Amazonは、値段とかの情報をキャッシュするな!という方針なので、仕方ないですね><

【“Kindle版の電子書籍の価格がAmazon APIで取得できない件”の続きを読む】

WordPressの静的サイト生成プラグイン

Webサイトを作るとき、静的サイト生成ツールを使って、大量アクセスをさばく方法が良いと思った。

自前でCMSを作り、HTMLファイルを吐き出す方法も用意すべきだが、とりあえずなら既存のツールを活用したい。

WordPressをCMSとして活用して、なおかつ、HTMLファイルを吐き出すプラグインを追加すれば、
WordPressを静的サイト生成ツールとして活用できる。

そこで、WordPressのプラグインについて調査してみた。

・StaticPress
WordPress サイトを静的 HTML に変換するプラグイン StaticPress | dogmap.jp

https://wordpress.org/plugins/staticpress/

・WP Static HTML Output
静的ファイル化プラグイン「WP Static HTML Output」が使いやすくて秀逸 » WordPress初心者のブログ

「StaticPress」は再構築にかなり時間がかかり、フリーズしたのかと思うくらいだったが、「WP Static HTML Output」の方は「Generate」すると、ほんの数秒で静的ページが生成された。


また「WP Static HTML Output」は、生成したファイルを「StaticPress」のようにサーバー上のどこかのディレクトリに出力するのではなく、ZIPファイルとしてPCにダウンロードする形式になっているのだが、これもとても分かりやすい。



https://wordpress.org/support/plugin/static-html-output-plugin

詳解 WordPress
プライム・ストラテジー株式会社
オライリージャパン
2015-04-25
¥ 2,808

PHPで画像の肌色を検出する方法

PHPで画像の肌色を検出する方法を考えてみました。

Amazonの商品画像を掲載していて、ヌードや水着の写真などがあると、
Google Adsenseの規約違反に問われて、Google Adsenseの掲載が停止される場合があります。

まあ、そんな訳で、肌色の多い画像があったら、検出するプログラムが欲しいと思いました。

調べてみたけど、ストライクの方法が、ヒットしなくて、ライブラリを自作することになりそうです。
まだ、アイデアの段階だけど、備忘録としてメモ。

PHPの標準関数(GDライブラリ)で、何とかなるんじゃね?
PHP GD 画像 色 検出」 - Google検索

http://php.net/manual/ja/function.imagecolorat.php

imageで指定された画像上の 特定位置にあるピクセルの色のインデックスを返します。


http://d.hatena.ne.jp/mintsu123/20111123/1322065624

肌色検出ではRGBを使わずHSVやYIQ、YCbCrといった色空間を使うようだ。



rgb 肌色 検出」 - Google検索

http://bell.kuee.kyoto-u.ac.jp/~naruse/research/hsv.html

RGB→HSVの変換式
R,G,Bの強度を0~1とすると,-180°< H < -180°,0 < S < 2/3,0 < V < 3 とな る(*).
ほとんどの人間の肌の色は,Hが 6°~42°の範囲に収まる.



php rgb hsv 変換」 - Google検索

http://php-archive.net/php/rgb2hsv/

[PHP]RGBをHSV(HSB)に変換する
前回RGB値を元に類似画像を検索しましたが、やはり人間の感覚で言うとHSVを使って画像を検索したほうがより近い画像を得られると考え、下準備として RGB を HSV に変換するプログラムを作りました。




●肌色検出方法のアイデア
(1) 画像を走査して、各ピクセルのRGB値を取得する。
(2) RGB値をHSV値に変換する。
(3) 肌色(Hが 6°~42°)の割合で、肌色を検出する。
というかんじでOKかな?

PHPでOpenCVを利用する方法もあるみたいだが、ハードルが高そう!(面倒くさそう><)

先に作るべきものを作ってから、後で画像の色検出機能を作るべ。

詳解 OpenCV ―コンピュータビジョンライブラリを使った画像処理・認識
Gary Bradski / Adrian Kaehler
オライリージャパン
2009-08-24
¥ 4,968


【“PHPで画像の肌色を検出する方法”の続きを読む】

XAMPPをUSBメモリで使う方法

PHPのテスト環境は、簡単に作れる。
Windowsパソコン+XAMPPもその一つだ。

パソコンにサイト制作のデータを置いておきたくない。
=別途管理して、バックアップを取っておきたい。


●XAMPP USB Lite
XAMPPには、いろいろなバージョンがあるが、USBメモリに入れて使うタイプの「XAMPP USB Lite」がある。
これを使えば、納品とかプレゼンで、丸ごとデータの受け渡しができて、便利だ。
「XAMPP USB Lite」の使い方を忘れないようにメモ。

(参考)XAMPP を使って USB メモリに入れて持ち運べる WordPress 環境を構築した - blechmusikの日記

(1) 公式サイトからダウンロード
apache friends - xampp for windows

(2) 「XAMPP USB Lite」をクリックする。

(3) ダウンロードした圧縮ファイルを解凍する。

(4) 展開されたフォルダをUSBメモリにコピーする。

(5) コピーしたフォルダ内にある「setup_xampp.bat」をクリックする。
  → パスを通す?バッチが走っているのだろうか?
  → USBメモリのルート(=一番上の階層)にコピーした場合は、「setup_xampp.bat」をクリックしなくても、そのまま使えるらしい。

XAMPP portable lite 1.8.1 zip 版のインストールと初期設定(文字化け対策) | モノリオ

XAMPP portable lite(XAMPP USB Lite)の zip 版は、ダウンロード後に解凍してできる xampp フォルダを、USB メモリや外付けハードディスクのルートフォルダにコピーすれば、特にインストールや初期設定をしなくてもそのまま動作します。

ルートフォルダとは、CドライブやEドライブなどの最上階層のフォルダのことです。
E:¥xampp¥ であれば何もしなくてもそのまま動作しますが、ルートフォルダ以外の E:¥aaaaa¥xampp¥ などでは若干設定が必要になります。



(6) XAMPPを起動する。
  → 「E:¥xampp¥」内にある「xampp-control.exe」をクリックする。

(7) XAMPP Controll Panelで、「Aoache」と「MySQL」の[Start]ボタンをクリックする。
  → Windowsのファイアーウォールが、ApacheとMySQLの実行を許可するか聞いてきたら、OKにする。

(8) ブラウザで「http://localhost」を開く。

(9) XAMPPの管理画面が開いたら、左のメニューで「セキュリティ」をクリックする。

(10) 必要に応じて、MySQLやphpMyAdminパスワードを設定したり、.htaccessによるBASIC認証(Webサイトへのアクセス制限)を設定する。

これで、XAMPP USB Liteが使えるようになった。

さっそくWebアプリを作ってみよう!(・∀・)

PHP Deprecated: Function split() is deprecated

WebサーバーのPHPをアップグレードしたら、PukiWikiが表示されなくなった。
原因を調べたら、PHPの仕様変更に伴うエラーだった。

・画面が真っ白
・500 Internal Server Errorが出る
とか。

●デバッグの基本方針
→画面が真っ白な場合、デバッグはhttpd(Apacheのmod_php)を経由せずに、直接CLI上で行なえばOK。

# php -v


というコマンドを打って、PHP CLI版が使えることを確認する。

●エラーの捕捉
PHPのエラーメッセージを最も詳細なレベル(E_STRICT)にする。

●コマンドラインで実行

# cd /var/www/html/pukiwiki
# php index.php


で、エラーメッセージが出たら、それをひたすら修正していく。

●PukiWiki Plus!でエラー
PukiWikiもシコシコデバッグすればいいのだが、PukiWiki Plus!を使っているサイトがあった。

PukiWiki Plus!の場合は、PukiWikiよりも修正箇所が多いかも?
=追加された機能の分だけ、修正範囲が広い?

●PHP Deprecated: Function split() is deprecated
PukiWiki Plus!をPHP5.4でデバッグしていると、

PHP Deprecated: Function split() is deprecated in /var/www/html/pukiwikiplus/lib/lang.php


こんなエラーメッセージが出る。

split()という関数を使っている部分があって、これがPHP5.3以降非推奨になってると。

どうやって修正すればいいか、解説しているページがあった。

Deprecatedの修正例(POSIX) - [PHP + PHP] ぺんたん info

PHP5.3以降ではPOSIX正規表現の関数は将来 PHPに実装されなくなるため非推奨となっています。 POSIXの関数を使用した場合、次のようなDeprecatedの警告エラーが出ます。

Deprecated: Function split() is deprecated

POSIXPCRE正規表現を使わないならString 関数
split()preg_split()explode()


split()
preg_split()で置き換え可能

$string = 'aaa:bbb:ccc';
$arr = split(":", $string);

$string = 'aaa:bbb:ccc';
$arr = preg_split("/:/", $string);



PHP: split - Manual

(PHP 4, PHP 5)
split — 正規表現により文字列を分割し、配列に格納する

警告
この関数は PHP 5.3.0 で 非推奨となりました。 この機能を使用しないことを強く推奨します。

ヒント
split() は PHP 5.3.0 以降で非推奨になりました。この関数のかわりに preg_split() を使うことを推奨します。 正規表現の威力が必要ないのであれば、 explode() を使用するほうがより高速です。これは正規表現エンジンの オーバーヘッドを受けません。



PHP: preg_split - Manual

(PHP 4, PHP 5)
preg_split — 正規表現で文字列を分割する



split()関数は、preg_split()関数に置き換えればOKと。

例えば、
$_c = split('_', $language);
は、
$_c = preg_split('/_/', $language);
という具合に置き換えればOK。

●PukiWikiプロジェクト
誰か、PukiWikiをMVCフレームワークで作り直して欲しい。
→俺がやってみるかw

サブドメインでセッションを共有する方法

PHPのフレームワーク「CodeIgniter」や「FuelPHP」を使って、Webサイトを作る。
そのとき、サブドメイン間で、セッション情報を共有したい。
あと、HTTPとHTTPS(SSLのページ)でも、セッションを共有したい。
=ログイン認証とか。

どうやれば良いか、検索してみたら、いろいろ参考情報があったので、メモ。

【“サブドメインでセッションを共有する方法”の続きを読む】

FuelPHPをNginxで動かす設定

さくらVPSでNginxを動かしている。
PHPフレームワークのFuelPHPを使いたい。
FuelPHPをNginxで動かす設定のメモ。

(参考)NginXのインストールテスト:逆襲のニート

【“FuelPHPをNginxで動かす設定”の続きを読む】

PHP用のデバッグ関数

PHPコードをデバッグするなら、EclipseやNetBeans等のIDEが威力を発揮する。
エディタで作業する場合は、自作のデバッグ関数で対応できる。

以下、メモ。動作保証なしw

<?php
/**
* デバッグ用関数
* @param string パラメータ
* @param string パラメータ名
*/
function debug_print($var, $str='value')
{
 if(is_array($var) or is_object($var))
 {
  ob_start();
  print_r($var);
  $var = ob_get_contents();
  ob_end_clean();
 }
 echo $str.'='.$var."<br>";
}

//wrapper for debug_print()
function d($var, $str='value')
{
 // backtrace file
 $backtrace = debug_backtrace();
 $file = @ $backtrace[0]['file'];
 if ($file == '') $file = $backtrace['file'];
 echo '<font color="red">'.$file.'</font><br>';

 //print_r
 echo '<pre>';
 debug_print($var, $str);
 echo '</pre>';
}

// wrapper for debug_backtrace()
function dbt()
{
 // backtrace file
 $backtrace = debug_backtrace();
 $file = @ $backtrace[0]['file'];
 if ($file == '') $file = $backtrace['file'];
 echo '<font color="red">'.$file.'</font><br>';

 //print_r
 echo '<pre>';
 debug_print($backtrace, 'debug_backtrace()');
 echo '</pre>';
}
?>


OpenPNE2のバリデーター

OpenPNE2のカスタマイズをしている。
バリデーターの仕組みについて調べてみる。

【OpenPNE カスタマイズ】バリデーションを行う ini ファイルの書式 | Sun Limited Mt.
バリデーターの設定ファイルは、上記のページで説明されていた。

[] は変数名
$_POST または $_GET で渡される名前です。
type はデータの型
string: 文字列
int: 数値
bool: 真偽値
regexp: 正規表現
required は必須かどうか
required = 0 は必須でない、required = 1 は必須
default はデフォルト値
required=0 の場合で値が null の場合、default の値が入る
caption は変数の名前
エラーメッセージに出力される
エラーメッセージもバリデーションのタイプにより自動的に合うようなエラーメッセージが出力されます
min は最小値
type=int の場合は変数の値が min の値以上かチェック
type=string or regexp の場合は文字列の長さが min の値以上かチェック
max は最大値
type=int の場合は変数の値が max の値以下かチェック
type=string or regexp の場合は文字列の長さが max の値以下かチェック
regexp は正規表現のパターンを指定
type=regexp の時の preg_match のパターンに使用される



実際にバリデーションチェックをするのは
/openpne/webapp/lib/OpenPNE/Validator.php
で定義されている OpenPNE_Validator というクラスの _validate メソッドです。



_validate メソッドに、PHPのバックトレース関数を組み込んでみて、挙動をチェック。
http://php.net/manual/ja/function.debug-backtrace.php

「.ini」ファイルの呼び出し方が分かった。

自分で追加したページのバリデートがちゃんと通っているか確認してみよう。

OpenPNEオフィシャルガイドブック
OpenPNEオフィシャルガイドブック伊藤 幸夫 田端 厚賢 手嶋 守 米田 聡 株式会社手嶋屋

おすすめ平均
starsIPA/SECで評価
stars丁重に説明している部分もあるが・・・。
starsOpenPNEに関わる人すべてに読んでほしい本

Amazonで詳しく見る
by G-Tools

FC2Ad