Skip to content

PHPからGoogle Spreadsheets APIを使う

PHPからGoogle Spreadsheets APIを使う published on PHPからGoogle Spreadsheets APIを使う へのコメントはまだありません

同じことやるの2度目なのに、すっかり忘れてしまっていたので、3度めに備えてメモ。

やりたいこと

(MySQLに入っている)あるデータを、Google Spreadsheets APIを使ってスプレッドシートに書き込む。

使うもの

以下のライブラリを使う。

Continue reading PHPからGoogle Spreadsheets APIを使う

PHPマニュアルの関数リファレンスを隅から隅までざっと読んでみた

PHPマニュアルの関数リファレンスを隅から隅までざっと読んでみた published on PHPマニュアルの関数リファレンスを隅から隅までざっと読んでみた へのコメントはまだありません

知らない関数や機能をなくしたい!

PHPの歴史って長くて、その間に付けたし付けたしでどんどん関数が増えていき、PECLモジュールもかなりの数になっている。

なので、普段PHPをよく使っている人でも、結構知らない関数や機能があったりする。かくいう自分もちょくちょく新しい関数を発見して、その都度「もっと早くに知っていれば」という悔しい思いをしていたんだけど、この度

PHPマニュアルの関数リファレンスを全部読んで、知らない関数や機能を発見しよう!

と思いついたので、実行してみた。

注意事項

以下、筆者が知らなかった、あるいは知っていたけど載せる価値がある、と思ったものを載せているので、読んでいる方にとって自明の事であったり、あるいはここに載っていないけど読んでいる方にとって知らないものとかがあるかもしれない。

と言う事で、善良なPHPerの皆さんは、各自でマニュアルを読み込む事をお勧めする。

Continue reading PHPマニュアルの関数リファレンスを隅から隅までざっと読んでみた

Couldn’t locate driver named mysql

Couldn’t locate driver named mysql published on Couldn’t locate driver named mysql へのコメントはまだありません

新しいサーバー(VPS)にsymfonyを入れている。

schema.ymlを書き換えてsymfony doctrine:insert-sqlを実行したら以下のエラー。

$ symfony doctrine:insert-sql
>> doctrine  creating tables
  Couldn't locate driver named mysql

まぁメッセージの通りドライバーが足りないんだろう。以下のコマンドで確認できる。

php /usr/share/pear/data/symfony/bin/check_configuration.php

結論から言うと、php-mysqlとphp-pdoをインストールすれば解決。

環境:CentOS 5.5

PDO

PDO published on PDO へのコメントはまだありません

■PHPからMySQLにアクセス

最近PHPを使う時はいつもsymfonyを使ってるので、DBに接続したりSQLを投げるコードを直接書くことはなかったんだけど、つい最近、ほんのお遊びプログラムを作る時に、わざわざsymfonyを使うまでもないと思ったので、プレーンなPHPで書くことにした。

普通のPHPを使うのなんて久しぶりなので、最初はmysql_connectとかの昔ながらのやり方をやってたんだけど、それだとさすがに芸がないので他のやり方をすることにした。

■PDO

どうやら調べてみたら、ここ最近ではPDOを使う人が多いみたいなので自分もそうしてみることにした。CodeZineにPDOの記事が載ってたのでそれを見つつやってみる。PDOにしろ何にしろ、そもそも人間の労力を減らすための物なので、そんなに難しいわけがない。

・文字コード

で、次に引っかかったのが定番の文字コード。色々見てると例の

set names utf8

ってのを実行してる例が多かったけど、これって筋が悪いというかあまり美しくないって個人的には思う。で、調べている途中にこんなページが見付かった。

Shift JISの場合、set namesで文字コードを指定しても、PDOが文字コードを意識した作りになってないから(?)、SQLインジェクションが起こる可能性があるらしい。

Continue reading PDO

DoctrineのModelクラスとTableクラスの違い

DoctrineのModelクラスとTableクラスの違い published on DoctrineのModelクラスとTableクラスの違い へのコメントはまだありません

 shema.ymlに色々書いてsymfony doctrine:build –modelを実行すると色々なクラスが自動的に生成される。lib/model/doctrine以下には、各モデル毎に[ModelName].class.phpと[ModelName]Table.class.phpという2つのクラスが生成される。

その2つの使い分けは何となくやってたんだけど、最近明快な答が載ったページ(英語)を見つけたのですっきりした。

まぁソースコードを見ればすぐ分かるんだけど、継承関係としては以下の通り。

  • Doctrine_Record > sfDoctrineRecord > [ModelName]
  • Doctrine_Table > [ModelName]Table

てことで、[ModelName]Tableの方は、テーブルからデータを取ってきたりする処理を記載して、取ってきたレコードに対する処理は[ModelName]クラスの方に記載する。

symfonyのコマンドラインで出力幅を広げる

symfonyのコマンドラインで出力幅を広げる published on symfonyのコマンドラインで出力幅を広げる へのコメントはまだありません

symfonyでコマンドを入力する。例えばsymfony project:deploy –go xxxxとか。で、何かエラーが出るとする。画面に出力されるメッセージから色々判断しなきゃいけないんだけど、出力が長い場合、画面の幅に収まるように、symfonyの内部で勝手に…..とかに省略されてしまい非常に不便。

設定で簡単に変えられないか調べたんだけど、分からなかったので結局ソースを直接修正した。

/lib/command/sfFormatter.class.php の38行目辺り(symfony 1.4.5の場合)。以下の値を大きな値に変更すればOK。

$maxLineSize = 65;

参考にしたページ(英語)。

DoctrineのfindBy

DoctrineのfindBy published on DoctrineのfindBy へのコメントはまだありません

symfony 1.4だとDoctrineが標準になったので必然的に使う事になってる。

もしかしたら世間的には常識なのかもしれないけど、昨日発見して感動した事。

Doctrine::getTable("TableA")->findByField1AndField2("val1", "val2");

ってやると以下のSQLが実行される。

SELECT * FROM TableA WHERE Field1='val1' AND Field2 ='val2'

複数のカラムにまたがる検索も一発で出来るのは非常に便利。当然 findByField1AndField2 なんてメソッドは自分で用意しなくても使える。

最近のORマッパーってこんなもん?

app.ymlから値を読む

app.ymlから値を読む published on app.ymlから値を読む へのコメントはまだありません

自分用メモ。

symfonyでは、独自の設定項目をapp.ymlに追加していく事が出来る。それの読み込み方は以下の通り。

sfConfig::get('app_foo')

まぁこれはすぐ分かるんだけど、app.ymlの中身が以下のように階層構造になってたらどうすれば良いんだろうと思ってググってみたら、このページが見付かった。実際にまだ試してないけど・・・

all:
foo:
bar: "val"

symfonyでタスク

symfonyでタスク published on symfonyでタスク へのコメントはまだありません

symfonyはご存じの通りwebアプリケーションを作るためのPHPのフレームワークなんだけど、それ以外にも便利なな機能がある。

システムを作るのって、単に表に出てくる機能を作るだけじゃなくて、バックアップだったりデータのメンテナンスだったりってのも含まれるんだけど、バックグラウンドで動くタスク・ジョブを簡単に作れる機能がsymfonyにはある。1.2のリファレンスにcookbookに説明があるので、1.2から出来た機能かも。

 ま、このページの説明で大体間に合ってしまう気もするけど、少し説明。

Continue reading symfonyでタスク

mb_convert_encodingの引数にautoを指定

mb_convert_encodingの引数にautoを指定 published on mb_convert_encodingの引数にautoを指定 へのコメントはまだありません

LimeSurveyを触っていたら以下のようなPHPのNoticeが出た。

Notice: Use of undefined constant auto - assumed 'auto' in C:xampphtdocslimesurveycommon.php on line 4505

autoって定数が定義されていないのか。調べてみたら、該当行ではmb_convert_encoding関数が使われてた。でも、autoって指定すると自動的に文字コードを判別するはずだし、定義されていないはずはないよなぁと思って色々調べたけど、結局以下のように引用符でくくったらエラーが出なくなった。あほらし・・・

auto → "auto"

ちなみに、ほんとに"auto"っていう引数が使えないケースもあるらしく、php.iniの設定を変えたなんていう人もいた()。