Archive for the ‘PHP’ Category



1
6月

mod_process_security


自宅サーバではphpの権限分離にsuPHPを使っていたいのですが、以前mod_process_securityという
あらゆるモノを権限分離できるapacheのモジュールがあるというのと知って、時間にあるときに組み込んでみようと思っていたのです。

で、1か月半くらいまえに実は既に組み込んで本番運用しているのですが、コレいいっすよ!

拡張子で権限分離するモノを指定できるので、ウチではcgi、pl、phpをmod_process_securityに任せてsuexecも停止しました。

suPHPはcgi版のPHPを実行していたのでモッサリ感があったのですが、今はそのモッサリ感もなくなりかなり快適にヽ(´ー`)ノ

まぁ、workerでの運用は無理っぽいのでこれは仕方ないですが、それにしてももういうの作れる人ってすごいね!

11
1月

CakePHP 2.xでprepare+executeした時の謎の現象


CakePHP2.xで開発を行っていて、ちょっとばかり複雑なSQLでページング処理を行う必要があっため、以下のようなSQLを書いたのです。

SELECT **** FROM (複雑なSQL) BETWEEN ? AND ? ※executeした値は1と10

本来ならば10件取れるはずが、何故か1件しか取得できないという謎の現象が発生。
※DB上には10件以上のデータが存在しています

当初はSQL文の間違いかと思い、直接SQLを叩いてみたら問題なし。

ひたすらソースコードを追っかけたところ、PDOライブラリのソースまで辿ったところまではexecuteした値はちゃんと渡っているのでますますわからなく・・・

いろいろ試してみて気が付いたのは、executeする値(BETWEENの後ろの値)が「10」や「100」「1000」などとしても「1」としての結果しか返ってこない。

さらに「20」や「30」を指定したらどうなるのか試してみたら今度は「2」と「3」の結果が返ってきたので、どうやら左端1ケタ以外が無視されてしまっているようでした。

PHPのPDOのバグなのかよくわかりませんが、これ以上調査に時間を掛けられないため、prepare+execute方式は諦め、値の正常性を確認する関数を作成してSQLに直接埋め込む形で回避しました。

こんなことに半日も費やしてしまったことがなんだかアホらしくなる。

24
11月

phpを5.5.6にアップグレードしたらwordpressが動かな無くなった


VineのリポジトリのPHPが5.5.6になったのでアップグレードしたらwordpressがInternal Server Errorで動かなくなった(´・ω・`)

5.5.5までは問題なかったのになぁ~

既に5.5.5も入手不可になってしまったので、仕方ないので5.4.22のRPMを作成してダウングレード。

プラグインのどれかが悪さしてるのかなぁ・・・

31
8月

TCPDFとFPDIの使い方メモ


仕事でTCPDFFPDIを使った際に利用したいろいろなメモ…_〆(゚▽゚*)

最後の改ページの判定方法があまり情報がなくて1番苦労しました。

今後なにかに使えそうなので、メモを残しておこうと思います( ´ー`)

※cakephpで使用することを前提としたメモです。

1.cakephpに組み込む
・TCPDFは解凍してできたtcpdfディレクトリをapp/vendors/にアップロード
・FPDIは解凍してできたファイルをapp/vendors/tcpdfにアップロード
・コンポーネントに組み込む

App::import('Vendor', 'tcpdf', array('file' => 'tcpdf/tcpdf.php')); App::import('Vendor', 'fpdi', array('file' => 'tcpdf/fpdi.php'));


・組み込んだらFPDIを呼び出すのみ
$pdf = new FPDI();

2.PDFの余白(上左右)を設定

$pdf->SetMargins(0, 0, 0);

3.セルパディングの設定

$pdf->SetCellPadding(0);

4.自動改ページを無効
・後述のwriteHTMLcellはこれを無効にしても自動改行される

$pdf->SetAutoPageBreak(false);

5.ページヘッダを無効

$pdf->setPrintHeader(false);

6.ページフッタを無効

$pdf->setPrintFooter(false);

7.空のページを追加

$pdf->AddPage();

8.ノーマルフォントとボールドフォントを追加
・フォントはmigmix-1pを拝借
・TTFファイルは前述でアップしたディレクトリ内のtcpdf/fontsにアップしないとエラーになる

$font_path1 = APP.'vendors/tcpdf/fonts/migmix-1p-regular.ttf'; $font_path2 = APP.'vendors/tcpdf/fonts/migmix-1p-bold.ttf'; $font1 = $pdf->addTTFfont($font_path1, '', '', 32); $font2 = $pdf->addTTFfont($font_path2, '', '', 32);

9.フォントをセット
・ボールドフォントはセットしなくても、後述の「writeHTMLcell」内でbタグを使用することで自動的にボールドフォントが使用される

$pdf->SetFont($font1, '', 11);

10.フォントの色を設定(RGB)

$pdf->SetTextColor(82, 82, 84);

11.PDFテンプレートの読み込み

$pdf->setSourceFile(VIEWS.'template.pdf');

12.フォントサイズの設定(変更)

$pdf->SetFontSize(12);

13.PDFテンプレートの指定ページを使用する

$page = $pdf->importPage(1); $pdf->useTemplate($page);

14.セルの行間を設定

$pdf->setCellHeightRatio(1.2);

15.カーソルの現在の位置(Y座標)を取得

$pdf->GetY();

16.PDFにセルを使って文字列(htmlタグを使用)を追加
・writeHTMLcellの詳細はこちら
・セルの高さは自動調整されるので1でもよい

$pdf->writeHTMLcell(セル幅, セル高さ, X座標, Y座標, 文字列, 0, 0, false, true, 文字列の位置(右左中央), false);

17.PDFに画像を追加
・Imageの詳細はこちら

$pdf->Image(画像のパス, X座標, Y座標, 画像のサイズ, '', 'PNG');

18.改行の追加

$pdf->Ln();

19.ページ番号の取得

$pdf->PageNo();

20.writeHTMLcellで文字列を追加した際にページからはみ出さないか(改ページが必要かどうか)判定する

//クローンを作成 $pdf2 = clone $pdf; //クローンに文字列を追加 $pdf2->writeHTMLcell(100, 1, 20, null, $text, 0, 0, false, true, "L", false); $pdf2->Ln(); //オリジナルの現在のカーソル位置(Y座標)を取得 $y = $pdf->GetY(); //クローンの現在のカーソル位置(Y座標)を取得 $y2 = $pdf2->GetY(); /*** *オリジナルのY座標よりクローンのY座標のほうが上にある、 *若しくは260より大きいときは改ページして新しいページを追加 */ if ($y > $y2 || $y2 > 260) { //クローンを削除 $pdf2->deletePage($pdf2->getPage()); //ページを追加 $pdf->AddPage(); //PDFテンプレートのページを指定 $page = $pdf->importPage(2); $pdf->useTemplate($page); }

17
7月

SPAM-BYEBYEのバージョンアップ予定


そろそろSPAM-BYEBYEのバージョンアップをしたいな~と思っているわけですが、

これといった目玉な追記機能が思いつかないんですよね・・・

今のところ

・設定をDBに保存 ・キーワードのホワイトリスト


くらいしか思いつかない。

何か要望があればご連絡ください。

3
4月

vine6のphp5.4.13のRPMを作成


先月php5.3のサポートが終了したとのことで、自宅サーバのphpを5.4系にアップグレードしました。

RPMパッケージを作成したのですが、5.4になって色々変わったところがあってビルドに結構苦労しました。

configureオプションで無くなったもの

PHP5.4で削除されたオプション

--enable-safe-mode --with-exec-dir[=DIR] --enable-magic-quotes --enable-zend-multibyte


SQLiteモジュールがPECL経由に変わる

PHP 5.4 以降では、SQLite 拡張モジュールは PECL 経由でのみ利用可能となります。


Zend Multibyte関係

ダウンロードはVine6.xで作ったRPM/SRC.RPM集からどうぞ

26
3月

2つのマジですかー


PHP、5.3 系のサポート終了が迫るも移行進まず

今月末でサポート終了だったなんて知らなかったワー

家のサーバのPHPも5.4に移行しないとなー

livedoorメールなど9サービスをNHN Japanが提供終了へ

スパムちゃんぷるー終わるのかー

SPAM-BYEBYEのデフォルトのDNSBLから消さないとなぁ・・・

16
11月

ちょっと古めのPHPはswitchで誤判定する


CentOS6標準のPHP(現行の5.3.3だったかな?)において、swithで対象が「0」だった場合に誤判定を起こします。

<?php $d = 0; switch($d) { case 1: echo "1¥n"; break; case 2: echo "2¥n"; break; default : echo "no match¥n"; break; } ?>

通常なら「no match」なはずですが「1」と判定されちゃいます。

結構前からあるバグっぽいけど、ウチのサーバーのPHP(5.3.17)では改善しているみたい。

どのバージョンで直ったんだろう?

30
5月

SPAM-BYEBYE(Version2.1.0)をリリースしました。


とりあえず問題なさそうなので管理画面に設定I/Fを追加したVersion2.1.0をリリースしました。

それと、wordpressの審査も無事に通過したので、本バージョンからwordpressのプラグインディレクトリにアップしました。

ダウンロードはhttp://wordpress.org/extend/plugins/spam-byebye/からどうぞ!

24
5月

WordPressのプラグインSPAM-BYEBYEの次期バージョン


WordPressのプラグインSPAM-BYEBYEですが、管理画面から設定ができるように修正し、現在テスト中です。

あと、Wordpressの公式プラグインとして登録する準備も行っております。

スクリプトの修正は面白いからいいんだけど、readme.txtを修正するのが面倒くさい・・・(´Д`)

now loading...