ページ: << 1 ... 6 7 8 9 10 11 12 13 14 15 16 ... 24 >>

第10回高蔵寺SE勉強会を開催しました

パーマリンク 2008/07/06 22:48:51 著者: あつ メール
カテゴリ: PHP, CakePHP, Ajax, 勉強会・セミナー

第10回高蔵寺SE勉強会を開催しました

第10回高蔵寺SE勉強会を開催しました。

今回の宿題は「PHPでスクレイピングしてみよう」とのことだったので、このブログの右側にある「今日の料理」コーナーをスクレイピングで表示するようにしてみました。

<?php
$url = $_GET['url'];
$img_url = $_GET['img_url'];
$width = $_GET['width'];
$count = $_GET['count'];

if (empty($url) || empty($img_url)) {
exit;
}
if (empty($width)) {
$width = 200;
}
if (empty($count)) {
$count = 5;
}

$img_url = str_replace('/', '\\/', $img_url);
$pattern = '<img.+?src=[\\'"][^\\'"]*(' . $img_url . '.+?)[\\'"].*?\\/>';

$i = 1;
$page = 1;
$base_url = $url;

echo 'document.write(\'<ul class="thumbnail">\');';
while ($i <= $count) {
$html = file($url);
$str = implode('', $html);

// 画像取得
$str = mb_convert_encoding($str, 'EUC-JP', 'UTF-8');
if (preg_match_all('/' . $pattern . '/i', $str, $match)) {
foreach ($match[1] as $value) {
// URL 取得(画像の後にrdf情報があるとする)
$pattern2 = 'rdf:about="(.*)"';
$str2 = explode($value, $str);
if (preg_match('/' . $pattern2 . '/i', $str2[1], $match2)) {
echo 'document.write(\'<li><a href="' . $match2[1] . '"><img src="' . $value . '" width="' . $width . '" border="0"></a></li>\');';
$i++;
if ($i > $count) { break; }
}
}
}
// ページは5ページ前まで
$page++;
$url = $base_url . '?paged=' . $page;
if ($page > 5) { $i = $count + 1; }
}
echo 'document.write(\'</ul>\');';

結構決め打ちの部分が多数。

今回はおみうが面白いことをやっていたので、今後スクレイピングをやる時には参考にしようと思う。



僕の発表は「CakePHPでの安全なサイトの作り方1~SQLインジェクション~」を行いました。
資料は高蔵寺SE勉強会ブログに掲載してあります。
これをきっかけにセキュリティへの意識を高めていって欲しいです。


もう一つの発表はみっくの「CakePHPでAjax [入門編]」。
知らない部分もあり、いままでAJAXで作った部分を見直そうかなと思いました。


あとは、近況報告などで時間がなくなってしまったので、先週からスタートした開発は今日はありませんでした。

次回の宿題は僕から出題することになりましたので、お楽しみに♪

CakePHP1.2 RC2がSJIS環境で開発できない

パーマリンク 2008/07/02 21:27:37 著者: あつ メール
カテゴリ: PHP, CakePHP

CakePHP1.2 RC2がSJIS環境で開発できない

CakePHP1.2 RC2をShift JIS環境で開発している時に、コントローラーからモデルを呼び出したら、見慣れないメッセージが表示されました。

Warning (2): preg_replace() [function.preg-replace]: Compilation failed: nothing to repeat at offset 12 [CORE/cake/libs/inflector.php, line 454]

上記の警告の部分を見てみると、どうやら

$map = array(
	'/à|á|å|â/' => 'a',
	'/è|é|ê|ẽ|ë/' => 'e',
	'/ì|í|î/' => 'i',
	'/ò|ó|ô|ø/' => 'o',
	'/ù|ú|ů|û/' => 'u',
	'/ç/' => 'c',
	'/ñ/' => 'n',
	'/ä|æ/' => 'ae',
	'/ö/' => 'oe',
	'/ü/' => 'ue',
	'/Ä/' => 'Ae',
	'/Ü/' => 'Ue',
	'/Ö/' => 'Oe',
	'/ß/' => 'ss',
	'/[^\w\s]/' => ' ',
	'/\\s+/' => $replacement,
	String::insert('/^[:replacement]+|[:replacement]+$/', array('replacement' => preg_quote($replacement, '/'))) => '',
);

この部分がShift JISでは文字化けしてしまい、その後の処理がうまくできずに上記のメッセージが表示されたようです。

Shift JISで構築しなければならない場合もあると思うんだけどな~。
そんな開発者の人はいないのかな・・・・・。

#Ticketの出し方がわからない

第3回CakePHP勉強会の動画資料を追加しました

パーマリンク 2008/06/28 11:41:48 著者: あつ メール
カテゴリ: PHP, CakePHP, 勉強会・セミナー

第3回CakePHP勉強会の動画資料を追加しました

CakePHPクッキングに第3回CakePHP勉強会の動画資料を追加しました。
勉強会資料

今回の発表も盛り沢山でかなり良かったのではないでしょうか。
また、今回から動画配信を用意してくださって、行けない人にとってはすごくありがたいです。
感謝しております。
ただ、うちの回線の調子が悪く、リアルタイムでは全然だめでした・・・。

CakePHPのOpenIDで特定のサイトだけ駄目な場合の対応方法

パーマリンク 2008/06/18 19:46:16 著者: あつ メール
カテゴリ: PHP, CakePHP

CakePHPのOpenIDで特定のサイトだけ駄目な場合の対応方法

CakePHP で構築したサイトで OpenID 認証を行おうとしたら、特定のサイトのみ駄目だった。
駄目といっても、OpenID 自体の認証は正常に返ってきているので、こちら側の問題みたい。

調べてみると、認証 OK だよというのをセッションに書き込んだ後、別ページへリダイレクトさせると、そちら側でセッションがうまく読み込めず、結果駄目という感じになってしまっていました。

試しに app/config/core.php の CAKE_SECURITY を medium にしていたのを low に変えてみると、うまくいった♪

ということは・・・・ cake/libs/session.php 内で CAKE_SECURITY の値の違いで異なる処理をやっているところは・・・・・ line 436 の function __initSession あたり。
high と medium では

if (function_exists('ini_set')) {
    ini_set('session.referer_check', $this->host);
}

という感じでリファラーのチェックの設定がされていました。
一方、low だとそれをやっていない。

ということだったので、リファラーがどのように渡っているかを調べてみると、正常に動作するサイトからはリファラーが空で返ってきていて、うまく動かないサイトからは正常に相手先のリファラーがセットされていました。

これっぽい。

とりあえず、上記の処理をコメントアウトして進めようかな。

CakePHPで一部だけSafeModeを外す方法

パーマリンク 2008/06/07 08:42:22 著者: あつ メール
カテゴリ: PHP, CakePHP

CakePHPで一部だけSafeModeを外す方法

SafeMode ありの環境下において、どうしても使いたい関数等が SafeMode の影響を受けてしまい、うまく処理できない時は、SafeMode を外すしかありません。
しかし、全てを外してしまっては困る状況の時は、必要最低限の部分のみ SafeMode を外せば良いです。

通常の PHP で構築していれば、httpd.conf に該当するフォルダのみ SafeMode を外す処理を追加すれば良いのですが、CakePHP を使っている場合は、Rewrite での構造の為、該当のフォルダが実在しないので、うまくいきません。
そこで、ダミーファイルを置くことで対応してみます。

たとえば、http://example.com/hoge/ 配下だけ SafeMode を外したい時は、DocumentRoot 直下に /hoge/index.php を作成します。
そして、作成したファイルに下記の内容を記載します。

<?php
$_GET['url'] = '/hoge/'; 
require_once( dirname( dirname(__FILE__) ) . "/index.php" );
?>


さらに、httpd.conf で上記の /hoge/ 配下だけ SafeMode を OFF にします。

    <Directory /path_to/hoge>
        php_admin_flag safe_mode off
    </Directory>


これで、/hoge/ 配下のみ SafeMode が OFF の環境を作れます。

<< 1 ... 6 7 8 9 10 11 12 13 14 15 16 ... 24 >>

あつ

Facebookやってます

愛知県名古屋市在住のWEBシステム屋(SE・プログラマ)。株式会社一六社(いちろくしゃ)所属。PHP、 CakePHPを利用して日々開発中。WEBで地域活性化を目指します。好き:フットサル/GTD/Mac/ 住んだことのある場所:一宮(愛知)、豊田(愛知)、浜松(静岡)、浦添(沖縄)、中津川(岐阜)、名古屋(愛知)

検索

タグクラウド

勉強会

欲しい物リストの全て

レコメンデーションエンジン

16ブログ     powered by b2evolution