simple_html_domでtitleとdescriptionを取得する。
PHPで簡単にパーサーするなら、simple_html_domが楽ちん。 大量にパーサーすると、遅いです。 過去に楽天の価格情報を取得するプログラムとか作ったことがあるのですが、 nodejsに変更した覚えがあります。
ソース
<?php require_once 'simple_html_dom.php'; $html = new simple_html_dom(); $data = file_get_contents("http://www.yahoo.co.jp/"); $html->load($data); $title = array_shift($html->find('title'))->innertext; $description = array_shift($html->find("meta[name='description']"))->content; echo $title."\n"; echo $description."\n";
実行結果
Yahoo! JAPAN 日本最大級のポータルサイト。検索、オークション、ニュース、天気、スポーツ、メール、ショッピングなど多数のサービスを展開。あなたの生活をより豊かにする「課題解決エンジン」を目指していきます。
Yahoo! JAPANって「課題解決エンジン」なんですね。
PHPでFTPで上書き更新のMVP(実用最小限の製品)
昨日リーンスタートアップの勉強会に参加しましたので、リーンスタートアップの用語を使いたくて使いたくてタマラナイmitsugeekです。
朝はやく(1時)に起きて眠れないので、ふとFTPのアップロードを自動化できれば楽しいんじゃないかと先ほど思いまして早速試してみました。
やってみて感じた事ですが、awsでのs3へのアクセスよりずっと簡単だということ。(rpmでインストールしたphpでそのまま使える) で参考までにソースを。
<?php $ftp = ftp_connect('{サーバのIP}', {サーバのport}); //サーバに接続 (コネクションを開く) $login_result = ftp_login($ftp, 'ユーザID', 'パスワード'); //サーバにログイン $contents = "アップロードしたいファイルの内容"; //ファイルの内容を記述 $tempHandle = fopen('php://temp', 'r+'); //一時的なファイルを作成 fwrite($tempHandle, $contents); //ファイルに書き込み rewind($tempHandle); //ファイルポインタの位置を先頭に戻す ftp_fput($ftp, "/サーバのパス", $tempHandle, {FTP_ASCII or FTP_BINARY}); //ファイルアップロード ftp_close($ftp); //サーバのコネクションを閉じる
これだけなんですが、
- テンプレートファイル読み込み
- データベースから情報取得
- テンプレートに情報を流し込む
- FTPでアップロード
の仕組みだけでも結構役立つと思います(個人的に)
欲をかけば、gitサーバ立ててpushしたらftpでテストサーバにアップして、 OKだったら管理画面からボタン押下で本番にデプロイまでの仕組みも作り込みたい。。。
そんなに難しくない割に、結構役立つ費用対効果の高いものが大好きなmitsugeekでした。
AWS SDK for PHP 2のインストール 〜 S3のバケット一覧取得まで
やりたいこと。
S3へPHPからアクセスしたい。
AWS SDK for PHP 2のインストール
composerをインストールします。 composerはruby bundlerのようなものだそうです。
curl -s http://getcomposer.org/installer | php
上記コマンドを実行すると、composer.pharがカレントディレクトリに作成されます。
次にcomposer.jsonを作成いします。(パッケージの記述)
vi composer.json
composer.jsonの内容
{ "require": { "aws/aws-sdk-php": "*" } }
install実行(composer.jsonに記載されたパッケージのインストール)
php composer.phar install
実行すると標準出力に以下のメッセージが。
Loading composer repositories with package information Installing dependencies (including require-dev) - Installing symfony/event-dispatcher (v2.3.0) Downloading: 100% - Installing guzzle/guzzle (v3.6.0) Downloading: 100% - Installing aws/aws-sdk-php (2.3.4) Downloading: 100% symfony/event-dispatcher suggests installing symfony/dependency-injection () symfony/event-dispatcher suggests installing symfony/http-kernel () aws/aws-sdk-php suggests installing doctrine/cache (Adds support for caching of credentials and responses) aws/aws-sdk-php suggests installing ext-apc (Allows service description opcode caching, request and response caching, and credentials caching) aws/aws-sdk-php suggests installing monolog/monolog (Adds support for logging HTTP requests and responses) aws/aws-sdk-php suggests installing symfony/yaml (Eases the ability to write manifests for creating jobs in AWS Import/Export) Writing lock file Generating autoload files
lsするとこんな感じです。
[mitsugeek@example ~]$ ls composer.json composer.lock composer.phar vendor
vendorディレクトリとcomposer.lock が作成されました。
以上で【AWS SDK for PHP 2】のインストール完了です。
ひきつづきS3へのアクセスを行いたいと思います。
S3のバケット取得プログラム
vi s3_listBuckets_example.php
<?php require_once("/var/www/html/dev/vendor/autoload.php"); use Aws\S3\S3Client; $config = array( 'key' => 'keyを記載', 'secret' => 'secretを記載' ); $s3 = S3Client::factory($config); $buckets= $s3->listBuckets(); foreach ($buckets as $bucket) { var_dump($bucket); }
keyとsecretは内緒です。
上記プログラムを実行します。
php s3_listBuckets_example.php
結果
array(2) { ["ID"]=> string(64) "XXXXXXXXXXXXXXXXXXXX" ["DisplayName"]=> string(8) "mitsugeek" } array(1) { [0]=> array(2) { ["Name"]=> string(13) "mitsugeek.net" ["CreationDate"]=> string(24) "2013-03-28T13:58:27.000Z" } } string(16) "XXXXXXXXX"
以上で、S3のバケット一覧取得まで確認しました。
参考
PHPで形態素解析エンジンのmecabを動かす。〜「私は貝柱になりたい。」を字句解析してみる〜
字句解析関連のアプリを作ってみよー。twitterでの1人liveコーディングを始めます。といいつつ調べものからなので、時間かかります。徹夜覚悟。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
ということで、 twitterでliveコーディング(全然コーディングしてないじゃん。)しながら、 形態素解析エンジンのmecab動かすということを1人で黙々とやってる(現在進行形) そのときのサンプル。
<!DOCTYPE html> <html> <head> <title>形態素解析エンジンを試す</title> <meta charset="UTF-8"> </head> <body> <?php $str = '私は貝柱になりたい。'; $str = mb_convert_encoding($str, "euc-jp", "utf-8"); $mecab = new Mecab(); $nodes = $mecab->parseToNode($str); foreach($nodes as $node) { echo mb_convert_encoding($node->surface,"utf-8","euc-jp")."<br />\n"; } ?> <body> </html>
結果
<!DOCTYPE html> <html> <head> <title>形態素解析エンジンを試す</title> <meta charset="UTF-8"> </head> <body> <br /> 私<br /> は<br /> 貝柱<br /> に<br /> なり<br /> たい<br /> 。<br /> <br /> <body> </html>
サーバ側の結果はこちら→ http://mitsugeek.net/mecab/test.php
※申し訳ありませんが、いまは動いてません。。
以下は、インストールまでの流れ
まずは字句解析する。「とりあえずオープンソースで」という他力本願でスタート。「形態素解析エンジン」というやつですね。フムフム。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
形態素解析エンジンはどれにするか。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
高速らしい、MeCabにしてみましょう。http://t.co/5BmLYf8B
mecab-0.994をダウンロード。他力本願で進めます。車輪の再発明ノンノン。http://t.co/Ei9u7kjv
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
wget http://t.co/8mOhrD9t
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
tar xzvf mecab-0.994.tar.gz
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
./configure !
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
make !
make install !
と呪文を唱えて見る。
wget http://t.co/uTUAEBmF
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
wget tar xzvf mecab-ipadic-2.7.0-20070801.tar.gz
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
辞書も同じく、./configure !
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
make !
make install !
という呪文でインストール。
【echo "今日はいい天気" | nkf -e | mecab | nkf -w】
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
とかすると化けない。ということでEUCで動くみたいです。
形態素解析エンジンの準備できたので、次にWEBサーバとアプリケーションサーバを準備。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
php_mecabとかあるらしいので、PHPで。いや、rubyとかjavaでもなんでも良いんだけど、準備が一番楽なんでPHPを。。。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
yum install httpd
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
yum install php
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
yum install php-mbstring
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
yum install php-devel
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
pearをインストールする
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
wget http://t.co/nQGxdPAw
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
php go-pear.phar
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
php_mecabを次にインストール。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
pear channel-discover http://t.co/jCBxUVZL
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
pear install opendogs/mecab-beta
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
「You should add "extension=mecab.so" to php.ini」というメッセージが出てきました。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
echo "extension=mecab.so" > /etc/php.d/mecab.ini
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
phpinfo()で、mecabインストール確認。
— 堤 庸(mitsugi) (@mitsugeek) 2013年1月3日
Directiveという項目は全て「no value」いやはやこれが何を意味しているのか。
HTML5のmuliple属性をつけた複数ファイルのアップロードをPHPで受け止めてみた。(メモ)
クライアント側。inputにmultiple属性をつけてるのとnameを配列にしている。
<form action="uplod.php" method="POST" enctype="multipart/form-data"> <input type="file" name="file[]" multiple> <input type="submit" value="Upload" /> </form>
鯖側で$_FILEをログに吐いてみる。
Array ( [file] => Array ( [name] => Array ( [0] => Penguins.jpg [1] => Tulips.jpg ) [type] => Array ( [0] => image/jpeg [1] => image/jpeg ) [tmp_name] => Array ( [0] => /tmp/phpV8xnID [1] => /tmp/phpsS56kp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 777835 [1] => 620888 ) ) )
PHPで受け止める。
<?php while(list($key,$value) = each($_FILES['file']['name'])) { $file_name = $_FILES['name'][$key]; $file_tmp_name = $_FILES['tmp_name'][$key]; $file_size = $_FILES['size'][$key]; $file_error = $_FILES['error'][$key]; }
ループでまわしている中でmove_uploaded_fileを行えば複数保存が可能。
chromeとfirefoxとIEで試してみました。
IEではファイルはひとつしか選択できませんでした。
PHPカンファレンスまとめ
PHPカンファレンスのUSTREAMを見逃したのでリンクをまとめる! - developer's diaryの記事をこのページにまとめる。
9/24(金) ビジネスデイ Room A
12:00〜 [A-2]基調講演 「GREE Platformの現状と今後の取組について」
○発表者等
- グリー株式会社 取締役 執行役員CFO 事業開発本部長 青柳 直樹
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
12:50〜 [A-3]CakePHPで作るニフティWebサービスのレシピ
○発表者等
- ニフティ株式会社 ネットマーケティング本部 コンシューマメディア部 小田 祐史
☆概要
弊社では多くのサービスの運営を行っていますが、サービスの開発に利用している言語はサービスによってさまざまです。その中でも、PHPのフレームワークであるCakePHPを用いた中規模なサービスにおける効率的な開発及び運用の事例をご紹介いたします。Webサーバー及びDBサーバーが冗長化されている構成ならではの課題と解決方を、実際に遭遇した事例を交えながらご説明し、大規模なサービスにも耐えうるレシピをご紹介いたします。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
13:35〜 [A-4]ユニットホスティングを使った効率的なPHPプラットフォームのご紹介
○発表者等
- 株式会社ディノ 高原芳浩id:tumf
☆概要
ユニットホスティングを使って、symfonyアプリケーションの瞬間設置(OpenPNE3を例にして)および、PHPとHadoopを使った、スケーラブルなMapReduce処理について発表させていただきたいと思います。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
14:35〜 [A-5]大ヒットソーシャルアプリの裏側
○発表者等
- KLab株式会社 Kラボラトリー 高田敦史、第2開発部 新田祐介
☆概要
ソーシャルアプリの開発現場において、現場のリーダー的な視点と技術者の視点から見た苦労話やケーススタディーを高田、新田からお話させていただきます。高田からは、技術的観点(負荷対策等)、新田からはPM/開発リーダー的観点での苦労話、ケーススタディーさせていただきます。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
14:35〜 [A-6]Scaling the Worlds Largest Social Gaming Network
○発表者等
- Zynga Justin Waldron、Don Mosite
☆概要
Zynga についての紹介と海外・日本でのゲームについての考え方開発手法についてなどを紹介予定。
●関連リンク
9/24(金) ビジネスデイ Room B
12:50〜 [B-3]モバイル ソーシャルアプリの開発と運用
○発表者等
☆概要
まちつく!などのソーシャルアプリケーションをバックグランドで動いているか、どのような開発をおこなっているか。その注意点などを紹介する
●関連リンク
13:35〜 [B-4]〜モバイルオープンソーシャルにも対応!〜 OpenPNE Ver3.6紹介
○発表者
- 手嶋 守
☆概要
OpenPNEはあらゆる組織のコミュニケーションを支援するための、オープンソースのSNS構築ソフトウエアです。10月にリリースが予定されているVer3.6では、Twitter風のUIを実現する「アクティビティ」機能や、SNS上で外部アプリやゲームを動作させるための共通APIである「モバイルオープンソーシャル」への対応をはじめとし、多くの機能改善やチューニングを行っています。本セッションではOpenPNEを利用を始めたり、OpenPNE用のプラグインの開発を検討されている方に向け、これらの最新機能を詳しく紹介します。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
14:35〜 [B-5]新しいPHPアプリケーションのテスト手法
○発表者
☆概要
PHPバージョンアップ時のテスト工数が膨大。アプリケーション修正の影響を正確に把握したい。もうこのような問題で悩む必要はありません。弊社が開発したテストスイートを利用すれば簡単にチェックできます。どのように動作するのか?デモを交えて紹介します。
●関連リンク
9/25(土) テックデイ
10:30〜 [T-2]基調講演「PHP Then and Now.」
○発表者
- Rasmus Lerdorf
☆概要
ラスマスがPHPの15年の歴史を振り返り、PHP5.3の新機能を解説します*1
●関連リンク
11:15〜 [T-3]フレームワークアップデートLT
- 様々あるPHPのフレームワークの中から、とくに人気のある8つのフレームワークの最近のアップデートを、LT形式でお送りします。
○発表者
- Symfony 小川 雄大
- CakePHP 安藤 祐介(Video)
- Zend Framework sasezaki
- CodeIgniter Kenji Suzuki
- Agavi MugeSo
- Ethna sotarok
- rhaco riaf
- Lithium 安藤 祐介(Video)
●関連リンク
13:00〜 [T-4]HiPHoP for PHP
○発表者
- Facebook, Inc. Scott MacVicar
☆概要
HipHopはPHPのソースコードを最適化されたC++に変換します。これによりPHPで開発を行いつつも、C++の実行速度を得られます。HipHopは単なる理論上の話ではなく、多くのFacebookサーバ上で利用しています。このセッションではHipHopの使い方や、使用に伴い必要となるコードの変更点についてお話しします。*2
●関連リンク
13:45〜 [T-5]Microsoft ♥ PHP 〜 2nd Stage 〜
○発表者
- WebMatrix 登場! マイクロソフト株式会社 エバンジェリスト 奥主 洋、エバンジェリスト 物江 修
☆概要
PHP Conference 2007 以来、PHP コミュニティの皆様と様々な協業をさせていただきました。併せて、Windows 上でPHP を動かすための機能開発、チューニングも行ってきています。昨年来ご紹介させていただいている Web プラットフォーム インストーラーにより皆様との協業も次のステージへ移行してきています。今回はさらにその先の 2nd Stage についてご紹介します。
14:50〜 [T-6]文字コードに起因する脆弱性とその対策
○発表者
- 徳丸 浩
☆概要
文字コードの扱いが原因で脆弱性が生まれることは広く知られてきましたが、どうすれば「文字コードを正しく扱っている」と言えるのかは知られていません。このセッションではまず、文字コードの不適切な扱いに起因する脆弱性のデモを行い、その後文字コードを正しく扱う方法論を説明します。具体的には、文字集合と文字符号化方式の両面から文字コードを正しく扱うことの意味を説明し、PHPでの実装方法にブレークダウンします。
●関連リンク
15:30〜 [T-7]PHPストリーム概説
○発表者
- hnw
☆概要
PHP4.3.0より導入されたストリーム機構は、ローカルファイル・リモートファイル・圧縮ファイルといった外部データに対するI/Oを透過的に扱うための仕組みです。知名度不足からそれほど利用されていない印象がありますが、応用範囲が広く実用的ですので、PHPユーザーなら押さえておきたい知識と言えるでしょう。本発表では、ストリームラッパー、ストリームコンテキスト、ストリームフィルタといったストリームの構成要素について解説し、適用例を紹介します。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
15:50〜 [T-8]新潟アクセス修飾子のご提案
○発表者
- rti
☆概要
読めるけど書けないアクセス修飾子がほしいので、phpを改造して作ってみた。新潟の概要と実装方法を php本体のソースコードとともに説明します。phpよりZendエンジン周りのC/C++のほうが多いセッションです。
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
16:40〜 [T-9]PHPの中の人によるパネルディスカッション
○発表者
- Rasmus Lerdorf
- moriyoshi
- hnw
- 藤本 真樹
- 大垣 靖男
- 高木 正弘
- モデレータ: 廣川 類
●関連リンク
- どんぴしゃリンク
- を含むリンク
- 関連リンク
17:25〜 [T-10]ライトニングトークス
CodeIgniterをベースとしたCMS「seezoo」をオープンソースでリリース
○発表者
- 安藤 建一 (日本CodeIgniterユーザ会)
☆概要
PHPフレームワークのCodeIgniterを基幹としたCMS「seezoo」をオープンソースでリリース。CodeIgniter風のスクラッチを可能とするJavaScriptフレームワークも独自開発。seezooについての概要を説明します。
日本一の twitter bot サービス twitter bot GENERATOR
○発表者
- 時田 正彦
☆概要
twitter 上で自動でつぶやくボットを簡単に生成する twitter bot GENERATOR について発表いたします。現在62000アカウント。技術的な話題・運用ノウハウ・トラブル対応についてなどを紹介します。
激安VPS + nginx + PHP-FPM
○発表者
- KIM_TPDN
☆概要
PHP5.3.3よりバンドルされるようになったPHP-FPM。せっかくなので、それを使って最近流行っている激安VPSと最近流行っている軽量WebサーバであるnginxにてPHPを動かすまでを簡単に紹介します。
PHPフレームワーク擬人化とPowered byの改変について
○発表者
- yuunyan_m
☆概要
Symfony,EthnaなどのPHPのフレームワークの擬人化の歴史についてひもときつつ、Powered byの書き換えをおこなっていきたいとおもっています。
pecl php tokyo tyrantは面白いですよ。いろんな意味で。
○発表者
- rti
☆概要
pecl php tokyo tyrant を使った事例の紹介と、何かバグがあったのでパッチを作って送ったら即日採用されちゃったよ。という話。
PHP で 3D プログラミング
○発表者
- よや
☆概要
何処もかしこも 3D な世の中。 PHP でも OpenGL 位使えるべき。sourceforge の phpopengl が PHP4 でメンテが止まっていたので、少し改造して PHP5 でも動くようにしてみました。動作デモをお見せして PHP でも 3D で遊べると主張いたします。
PHPer100人にPythonを教えてみた
○発表者
- 桑田 誠
☆概要
PHPユーザにPythonとGoogle App Engineを教える「Python4PHPer」という講座を定期的に開催しています。現在まで約100名の方に受講いただき、それなりに好評をいただいております。本発表では、この講座の紹介と、PHPer100人にPythonを教えてみた感想を述べてみます。
PirumではじめるオレオレPEARチャンネルサーバー
○発表者
- 関山 隆介
☆概要
超シンプルなPEARチャンネルサーバー・マネージャー“Pirum”を使って自前のリポジトリを作成・公開する方法を紹介します。
やったーPHPでPEGパーサコンビネータできたよー
○発表者
☆概要
パーサコンビネータやPEGとは何かということからOpenpearで公開しているパーサコンビネータの概要や実績など諸々を紹介します。
究極のPHP本完成
○発表者
- 小川 雄大
☆概要
しっかり学ぶ、じっくり学ぶ、今までになかった本当のPHPの教科書。技術評論社から11月に発行予定の「パーフェクトPHP」について紹介します。
*1:※原文 Rasmus will take a look at the past 15 years of PHP and go through the new features in PHP 5.3.
*2: ※原文 HipHop transforms PHP source code into highly optimized C++ and then compiles it using g++. It allows developers to continue writing complex logical directly with PHP but leverages the speed benefits of C++. HipHop is more than just a theoretical exercise and currently powers the majority of Facebook servers. This session will cover using HipHop and some of the code changes required to use it.
EC-CUBEのデバッグに「debuglib」をもっと使う。
EC-CUBEのデバッグに「debuglib」を使う。 - 4丁目よりでdebuglibを取り入れたけどももっと取り入れてみた。
基底クラスとかを修正
SC_Utils_ExクラスにsfPrintRメソッドを追加
<?php /** * 各種ユーティリティクラス(拡張). * * SC_Utils をカスタマイズする場合はこのクラスを使用する. * * @package Util * @author LOCKON CO.,LTD. * @version $Id: SC_Utils_Ex.php 18734 2010-06-22 08:45:33Z nanasess $ */ class SC_Utils_Ex extends SC_Utils { function sfPrintR($obj,$title="") { print_a($obj,$title); } }
LC_Pageクラスのpメソッドを修正
<?php /** * Web Page を制御する基底クラス * * Web Page を制御する Page クラスは必ずこのクラスを継承する. * PHP4 ではこのような抽象クラスを作っても継承先で何でもできてしまうため、 * あまり意味がないが、アーキテクトを統一するために作っておく. * * @package Page * @author LOCKON CO.,LTD. * @version $Id:LC_Page.php 15532 2007-08-31 14:39:46Z nanasess $ */ class LC_Page { /** * デバック出力を行う. * * デバック用途のみに使用すること. * * @access protected * @param mixed $val デバックする要素 * @return void */ function p($val,$title="") { SC_Utils_Ex::sfPrintR($val,$title); } }
呼び出し側(基底クラスに入れてしまう)
<?php /** * Web Page を制御する基底クラス * * Web Page を制御する Page クラスは必ずこのクラスを継承する. * PHP4 ではこのような抽象クラスを作っても継承先で何でもできてしまうため、 * あまり意味がないが、アーキテクトを統一するために作っておく. * * @package Page * @author LOCKON CO.,LTD. * @version $Id:LC_Page.php 15532 2007-08-31 14:39:46Z nanasess $ */ class LC_Page { /** * デストラクタ. * * @return void */ function destroy() { $this->p($_SESSION,"\$_SESSION"); $this->p($_POST,"\$_POST"); $this->p($_GET,"\$_GET"); $this->p($this,"\$this"); } }
EC-CUBEのデバッグに「debuglib」を使う。
行うこと。
- eccube-2.4.4/data/module配下にdebuglib.phpを置く。
- eccube-2.4.4/data/class_extends/util_extends/SC_Utils_Ex.phpを修正する
eccube-2.4.4/data/module配下にdebuglib.phpを置く。
Debuglib for PHP5よりDLして、eccube-2.4.4/data/module配下に置く。
eccube-2.4.4/data/class_extends/util_extends/SC_Utils_Ex.phpを修正する
requires部分で、debuglibを読み込む。
require_once(CLASS_PATH . "util/SC_Utils.php"); require_once(DATA_PATH . 'module/debuglib.php');
SC_Utilsクラスを元に、SC_Utils_ExクラスにsfPrintRメソッドを記述
var_dumpしてるところをprint_aで記述。
class SC_Utils_Ex extends SC_Utils { /* デバッグ用 ------------------------------------------------------------------------------------------------*/ function sfPrintR($obj) { print("<div style='font-size: 12px;color: #00FF00;'>\n"); print("<strong>**デバッグ中**</strong><br />\n"); print("<pre>\n"); //print_r($obj); print_a($obj); print("</pre>\n"); print("<strong>**デバッグ中**</strong></div>\n"); } }
patch
diff --git "a/C:\\Users\\mitsugi\\AppData\\Local\\Temp\\SC_Utils_Ex_HEAD.php" "b/C:\\Users\\mitsugi\\Desktop\\eccube-2.4.4\\data\\class_extends\\util_extends\\SC_Utils_Ex.php" index e3432aa..66f5937 100644 --- "a/C:\\Users\\mitsugi\\AppData\\Local\\Temp\\SC_Utils_Ex_HEAD.php" +++ "b/C:\\Users\\mitsugi\\Desktop\\eccube-2.4.4\\data\\class_extends\\util_extends\\SC_Utils_Ex.php" @@ -23,6 +23,7 @@ // {{{ requires require_once(CLASS_PATH . "util/SC_Utils.php"); +require_once(DATA_PATH . 'module/debuglib.php'); /** * 各種ユーティリティクラス(拡張). @@ -35,5 +36,17 @@ require_once(CLASS_PATH . "util/SC_Utils.php"); */ class SC_Utils_Ex extends SC_Utils { + + /* デバッグ用 ------------------------------------------------------------------------------------------------*/ + function sfPrintR($obj) { + print("<div style='font-size: 12px;color: #00FF00;'>\n"); + print("<strong>**デバッグ中**</strong><br />\n"); + print("<pre>\n"); + //print_r($obj); + print_a($obj); + print("</pre>\n"); + print("<strong>**デバッグ中**</strong></div>\n"); + } + } ?>
使い方
SC_Utils::sfPrintRを使う*1
<?php SC_Utils::sfPrintR( $var );
親クラスがLC_Pageとかだと、pメソッドがSC_Utils::sfPrintRのラッパーになっているので、下記みたいな感じでdebugできる。
<?php $this->p($this);
<?php class LC_Page { /** * デバック出力を行う. * * デバック用途のみに使用すること. * * @access protected * @param mixed $val デバックする要素 * @return void */ function p($val) { SC_Utils_Ex::sfPrintR($val); } }
関連リンク
PHPのデバッグに便利「debuglib」 - 4丁目より
EC-CUBE2.0の設計思想があったのでメモメモ。 - 4丁目より
EC-CUBEをカスタマイズするときやデバッグ時に便利 SC_Utils::sfPrintR() - yuhei.kagaya
*1:sfPrintR()はDEBUG_MODEがtrueでないと出力されません。
phpで簡易ログ出力
単純にログを出力する場合はerror_logを使う。
若干詳細にログをとる場合はこんな感じに関数を定義する
<?php function access_logger($str){ $datetime = date( "Y/m/d (D) H:i:s", time() );//日時 $client_ip = $_SERVER["REMOTE_ADDR"];//クライアントのIP $request_url = $_SERVER["REQUEST_URI"];//アクセスしたURL $msg = "[{$datetime}][logger][client {$client_ip}][url {$request_url}]{$str}"; error_log($msg."\n", 3, "/var/log/php/access.log"); }
改造の余地(思いついたことや調べてたこと)をメモ
- ログレベル等をつけるたい
- phpのエラーレベルを参考に
エラーレベル | 内容 |
---|---|
E_ERROR | 重大な実行時エラー。これは、メモリ確保に関する問題のように復帰できないエラーを示します。スクリプトの実行は中断されます。 |
E_WARNING | 実行時の警告(致命的なエラーではない)。スクリプトの実行は中断されません。 |
E_PARSE | コンパイル時のパースエラー。パースエラーはパーサでのみ生成されます。 |
E_NOTICE | 実行時の警告。エラーを発しうる状況に遭遇したことを示す。ただし通常のスクリプト実行の場合にもこの警告を発することがありうる。 |
E_CORE_ERROR | PHPの初期始動時点での致命的なエラー。E_ERRORに似ているがPHPのコアによって発行される点が違う。 |
E_CORE_WARNING | (致命的ではない)警告。PHPの初期始動時に発生する。E_WARNINGに似ているがPHPのコアによって発行される点が違う。 |
E_COMPILE_ERROR | コンパイル時の致命的なエラー。E_ERRORに似ているがZendスクリプティングエンジンによって発行される点が違う。 |
E_COMPILE_WARNING | コンパイル時の警告(致命的ではない)。E_WARNINGに似ているがZendスクリプティングエンジンによって発行される点が違う。 |
E_USER_ERROR | ユーザーによって発行されるエラーメッセージ。E_ERRORに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_USER_WARNING | ユーザーによって発行される警告メッセージ。E_WARNINGに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_USER_NOTICE | ユーザーによって発行される注意メッセージ。E_NOTICEにに似ているがPHPコード上でtrigger_error()関数を使用した場合に発行される点が違う。 |
E_STRICT | コードの相互運用性や互換性を維持するためにPHPがコードの変更を提案する。 |
E_RECOVERABLE_ERROR | キャッチできる致命的なエラー。危険なエラーが発生したが、エンジンが不安定な状態になるほどではないことを表す。ユーザ定義のハンドラでエラーがキャッチされなかった場合(set_error_handler()も参照ください)は、E_ERRORとして異常終了する。 |
E_DEPRECATED | 実行時の注意。これを有効にすると、将来のバージョンで動作しなくなるコードについての警告を受け取ることができる。 |
E_USER_DEPRECATED | ユーザ定義の警告メッセージ。これはE_DEPRECATEDと同等だが、PHPのコード上で関数trigger_error()によって作成されるという点が異なる。 |
-
- rubyのLoggerを参考に
エラーレベル | 内容 |
---|---|
FATAL | プログラムをクラッシュさせるような制御不可能なエラー |
ERROR | エラー |
WARN | 警告 |
INFO | 一般的な情報 |
DEBUG | 低レベルの情報 |
- 改行を含むログの場合は配列に変換してからインデントを整えて出力
- explodeで配列に変換してarray_walk で編集する
- $_GETや$_POSTや$_SERVERのログも取る
- print_r($_GET,True)とか
ushahidiを使って児童虐待をどうこうできないか。って思っての行動その1
CentOS5.5にインストール
ソースを落っことしてきてフォルダに入れるがPHPのバージョンが5.1系なのでダメだそう。
oracleからPHP5.2系のRPMをダウンロードする。
参考:RHEL系でPHP5.2の最新版をパッケージからインストールしたい - ぷぎがぽぎ
インストールするrpm
- http://oss.oracle.com/projects/php/dist/files/EL5/x86_64/php52-common-5.2.13-1.el5.x86_64.rpm
- http://oss.oracle.com/projects/php/dist/files/EL5/x86_64/php52-cli-5.2.13-1.el5.x86_64.rpm
- http://oss.oracle.com/projects/php/dist/files/EL5/x86_64/php52-5.2.13-1.el5.x86_64.rpm
- http://oss.oracle.com/projects/php/dist/files/EL5/x86_64/php52-devel-5.2.13-1.el5.x86_64.rpm
mcryptが足りないようで。インストールで怒られます。
ソースからPHPをインストールしてmcryptだけとって来よう。
ソース(php5.2.14)をダウンロード
http://jp.php.net/get/php-5.2.14.tar.gz/from/this/mirror
$cd /tmp $wget http://jp.php.net/get/php-5.2.14.tar.gz/from/this/mirror $tar zxvf php-5.2.14.tar.gz $cd php-5.2.14 $./configure --with-mcrypt=shared --enable-shared $make $make install $cp /usr/local/lib/php/extensions/no-debug-non-zts-20060613/mcrypt.so /usr/lib64/php/modules/ $echo "extension=mcrypt.so" > /etc/php.d/mcrypt.ini /etc/init.d/httpd restart
mcrypt.soだけほしいのにmake installとかしちゃった(ぁ
インストールはできたけども。mod_rewriteが有効になってなくてトップから移動できない・・・・
/etc/httpd/conf/httpd.confを修正
#LoadModule rewrite_module modules/mod_rewrite.so LoadModule rewrite_module modules/mod_rewrite.so #有効に。 <Directory "/var/www/html"> AllowOverride All # AllowOverride None AllowOverride All #.htaccessにAllowOverride できるように。
とりあえず移動できるようになりました。。