Author Archives: ne-zu - Page 2

巨大なSJISのCSVファイルをfgetcsv関数で処理する

久々にcsv扱って、検索したら懐かしい記事を自分のevernoteから拾ってきました(笑)

さて、前回記事「PHPでメモリ上に一時ファイルを作る」では、file_get_contents関数でCSVファイル全体を取得して文字エンコーディングの変換を行い、変換結果に対してfgetcsv関数を利用しました。しかし、CSVファイルが巨大な場合にはfile_get_contentsを使うとメモリ上限に引っかかってPHPが停止してしまいます。

引用元: 巨大なSJISのCSVファイルをfgetcsv関数で処理する – hnwの日記.

今更Shift-JisのCSVを読み込む機会もないだろ、と思いましたが、ストリームフィルタ自体はなかなか便利そうなので、メモさせて頂きます。

引用記事ではfopenで作成したストリームに、Stream_Filter_Mbstringという、文字エンコーディング変換を行うストリームフィルタを作って適用する、ということをされてます。素敵ですね。

身も蓋もなく言うとPHPでXMLを受け取るとはつまり

タイトルはホッテントリメーカーを使ってみましたw
面白いですね。これ。

というわけで、PHPでXMLを受け取る方法ですが
とあるサービスでこちらのPHPサーバファイルを叩いて貰って
XMLを取得する、ということをしたかったんですが
POSTデータを見ても何も入ってないΣ(゚д゚lll)ガーン

ん?ん?取得方法を間違えたかな?何か特殊な受け取り方があるのかな?と思っていたら
なんと標準入力で受け取るんですね。。


$xml = file_get_contents('php://input');

PHP長いこと使ってましたが、初めてXMLをリクエストとして受け取ったので
全然知らなかったです。。

WordPressでjQueryを使う。

WordPressでjQueryが使いたくなったのですが、 なんか勝手に読み込むと競合しちゃうんじゃないかな?という懸念がありました。 ところがWordPressに最初から入っているjQueryを使う、なんて簡単な方法があるんですね。

ヘッダーファイル(header.php)の wp_head()の前に wp_enqueue_script(“jquery”) を呼び出す、と。

 

<?php wp_enqueue_script("jquery"); ?>
<?php wp_head(); ?>"</p>

 

これは簡単です。まあpluginによっては競合するかもしれないで、気を使ってscriptを書く必要はあると思いますが。

Mac 10.7.2にPEARを入れる。

表題通り、PHPのPEARをMacにインストールするというお話です。
portからhomebrew派になった私としては、 brew install pearなどしてみましたが、ありませんでした(笑)

でも実は(XCode入れてるからかもしれないけど)Macにインストーラが用意されてるんですね。

$ ls /usr/lib/php/
build extensions install-pear-nozlib.phar pear

といわけで実行します。

# php install-pear-nozlib.phar
[PEAR] Archive_Tar - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.3.0
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util - installed: 1.2.1
[PEAR] PEAR - installed: 1.9.4
Wrote PEAR system config file at: /private/etc/pear.conf
You may want to add: /usr/lib/php/pear to your php.ini include_path

php.iniのinclude_pathに/usr/lib/php/pearを追加しておきましょう。

githubのリポジトリを作ってみた

github、もちろん利用させて頂いてましたが、自分のリポジトリを作ったことがなかったので1度やってみようと、

ナウなヤングのためのgithub入門講座 -基本機能からdotfiles管理まで-

を参考に作ってみました。

何を上げようかな〜と考えたのですが、以前PHPの種を掃除した時さっくり消したPreg Onlineを復活させることにしました。これはウェブブラウザからPreg Matchなどのpreg系関数の動作確認をリアルタイムで行えるウェブサービス(?)的なものでした。
まだまだ正規表現につまることが多いので、リアルタイムで確認できると結構便利なのですよね。。

新しい名前は Preger として、基本動作だけ簡単に作ってみました。

Demoを

http://www.php-seed.net/preger/

に置いておきますので、正規表現が苦手&初心者の方は是非お使いください。面倒でなければローカルに落として使うとレスポンスが早いと思います。

$ git clone git://github.com/yusukenakagawa/Preger.git
$ cd Preger
$ wget -O jquery.min.js http://code.jquery.com/jquery-1.7.1.min.js

README.mdの書き方などは、

脱GitHub初心者を目指す人のREADMEマークダウン使いこなし術

を参考にさせていただきました!

これでgitに触れる機会が増えるかな。。

MacでBrewでxdebug

まあBrewが入っていれば

brew install xdebug

するだけです。

Terminal  screen  97×49

お手軽ですね。

書かれているように、php.iniに

zend_extension="/usr/local/Cellar/xdebug/2.1.1/xdebug.so"

を追加します。

PHPでクロージャ

というわけでPythonをちょこちょこ使ってたので(主にGoogle Application Engineのため)、
クロージャを使うのが当たり前になりました。
でも、Pythonは言語仕様的にクロージャが使いやすくなっており、
PHPで言うなら

hoge.php
$x = 0;
function get($y) {
    $x += $y;
    return $y;
}

----

require('hoge.php');
hoge.get(2);

こんな感じで簡単にクロージャが実装できるんですよね。

まあ、それは無理なので。。クロージャを使ったことが無い人に、クロージャのサンプルを上げるとすると、

function counter () {
    $v = 0;
    return function () use(&$v) {
        return $v++;
    };
}

$c1 = counter();
$c2 = counter();

echo($c1() . "\n");
echo($c1() . "\n");
echo($c2() . "\n");
echo($c1() . "\n");
echo($c2() . "\n");
echo($c1() . "\n");

wikiにも載ってるこんな感じのプログラムでしょうか。counterの返り値に無名関数を返して、$vをlexicalに使おうという感じのプログラムです。phpはuse()で使用するlexical変数を指定しなくてはいけないんですねー。変更も加えるので参照付き呼び出しです。
結果は、

0
1
0
2
1
3

こうなります。
便利ですか? まあクラスでやっても同じですねw

class Counter
{
    private $v = 0;
    public function inc()
    {
        return $this->v++;
    }
}

$c1 = new Counter();
$c2 = new Counter();

echo ($c1->inc() . "\n");
echo ($c1->inc() . "\n");
echo ($c2->inc() . "\n");
echo ($c1->inc() . "\n");
echo ($c2->inc() . "\n");
echo ($c1->inc() . "\n");

本当は名前空間を汚さないように、Javascriptのように

(function () {
    function () {
        // hogehoge
    }
})()

こう使いたいんですけど、最後の()で関数実行が出来ないんですよね。
PHPの無名関数は返り値に使うか変数に入れるかしないといけないみたいです。。
残念。

なんだかんだでPHPに戻ってきた

去年はPython、Scalarと他の言語もちょいちょいっと触ってみましたが、なんだかんだでプロトを作ったりサンプルを作ったりなどのプログラムにが多い私としては、やはりPHPが一番使いやすいですね。
「この時はどうするんだっけ」
「PHPで出来るあれは、Pythonだとどうすれば・・」
などを一々調べるのが面倒というのが1番かもしれません。

でもなんだかんだで他の言語を触ってみるのはいいことだな、とも思いました。
Pythonはクロージャ使って当たり前な感じなので、PHP5.3では積極的にクロージャを使っていこうと思ったりしますし。

というわけで、サーバサイドはPHP、フロントエンドはPHP+Javascriptで2012年は乗り切ろうと思います。
でもRubyもやるかも。

新しくなったamazon APIにアクセス

Amazon APIを叩きまくってた日々が懐かしく思われる私ですが、色々と仕様が変わってからさっぱりでした。
ので、ちょっと調べてみたところ、このサイトが非常に参考になりました。

Knockin’on TechLog » Blog Archive » amazon API (AWS) を試す PHP.

まあ、所謂2leggedOAuthな感じですね。

上記サイト、非常に参考になったのですが、実行して出来たURIを叩いてみると

Mozilla Firefox  Vimperator

必要なパラメータが無い、と怒られます。AssociateTagなど、と指定されているので、これが良く忘れられがちなんでしょうね。というかこれが最近必須になったのか。

上記サイトのサンプルプログラムに


// 検索するキーワード 入力から取得
$params['Keywords'] = "php";
// AssociateTagを追加。
$params['AssociateTag'] = 'php-seed-22';

AssociateTagを追加して、出来たURIを叩くと無事リクエストが通りました!

認証が必要になるのも時代の流れですかね。

2011年、PHPerにオススメの本。

2011年、あまりPHP関係の本は読まなかったものの、一番のオススメといったらやはり所謂徳丸本の

これでしょう。買ってさらっと読んで手元に置いておくだけでもいいと思います。こんなに勉強になって実践的な本はない! そのうちどんな中身かブログに書こうと思っていて、ついに年を越しましたのでw せめて紹介だけでも。

どうもこのPHPの種はビジネスでPHPをやられている方がよくご覧になられているようなので、ビジネス向けとして紹介したかったのです。社内にこういうことをちゃんと考える人がいたほうが何かと良いかと。というかあなたがぜひ社内のセキュリティ第一人者になって、社内のセキュリティ向上をドライブしていってください。私も頑張ります!