Latest Publications

facebookのPHPSDKでSSLエラー

localhostでfacebookのPHPSDKを試していると下記のエラーで動かず。

Uncaught CurlException: 28: SSL connection timeout thrown

PHPSDKの中にあるbase_facebook.phpに1行追加したら動いた。

    $opts[CURLOPT_SSLVERSION] = 3;//この行を追加
    curl_setopt_array($ch, $opts);

cakePHPのafterFind

findで取得するデータに表示用のテキストなど付けたい場合はModelでafterFind。

	public $options = array(
		'flag' => array(
			1 => 'カテゴリA',
			2 => 'カテゴリB',
		),
	);
	public function afterFind($results) {
		foreach ($results as $key => $val) {
			if (isset($results[$key]['User']) && is_array($results[$key]['User'])) {
				$val = $results[$key]['User']['flag'];
				$results[$key]['User']['flag'] = array();
				$results[$key]['User']['flag']['val'] = $val;
				$results[$key]['User']['flag']['str'] = $this->options['flag'][$val];
			}
		}
		return $results;
	}

macでデフォルトのapacheが起動する

普段はmacportsでインストールしたapacheを動かしているが、たまになぜかデフォルトのapacheが起動してしまい、設定をしていない状態なので

It Works!

とだけ表示されてしまう。

原因はよくわからないが、terminal で apachectl stop としてデフォルトのapacheを終了すると、macportsのapacheになる。

表の画面が真っ白になる対策

coreserverにwordpressをインストールしたら、管理画面は普通に表示されるのに表の画面が真っ白になり何も表示されない状態になった。

結果、管理画面からwordpressを最新のものに更新すると解決。

cakePHP1.3移行時のUnsupported operand typesエラー

cakePHP1.2で作った古いシステムを1.3対応させているときにエラーが発生。

Unsupported operand types in /Users/username/xxxxxx/cakePHP1.3.8/cake/libs/view/helpers/html.php on line 337

調べた結果、viewでcssの設定をしていた下記のような箇所が原因

echo $html->css(‘documents’, null, null, false);

解決方法としてはcontrollerでHtmlヘルパーを付け、css指定は下記のようにする。

echo $html->css(‘documents’);

phpmailerの日本語添付ファイル文字化け解消

日本語が頭についているファイルを添付すると、文字そのものが消えてしまう。元のスクリプトを解析してたらようやく原因発見。basename()という関数でパスからファイル名を取得しているんだけど、それがPHP5ではバグにより日本語が上手くでないとか。PHP6では直す予定らしい。

class.phpmailer.php

#1349あたりを

//$filename = basename($path);
$filename = end(split(‘/’,$path));

として完了。原因を探すまでが大変だった。

phpをcronで動かすときにphp.iniを指定する方法

cd [ディレクトリパス]; [PHPパス] -f [実行ファイル] -c [php.iniのパス]


cd /home/example/example.com/public_html/; /usr/bin/php5 -f ./cron.php -c /home/example/php.ini

phpMyAdminでアップロードできない大きなSQLファイルをアップするBigDump

サーバー移転のためデータをごっそりと移動させようとして失敗。データの出力はphpMyAdminのエクスポートでできるが、インポートをしようとすると大きすぎるとエラーが出てできない。

設定ファイルをいじれる場合はconfig.inc.phpの中の$cfg[‘UploadDir’]=”;を$cfg[‘UploadDir’]=’./upload’;などとして、サーバーにディレクトリを作りSQLファイルをアップロードすればphpMyAdminのインポート画面で選択できるようになるのでインポート可能。

ただ、レンタルサーバーで設定がいじれないケースだったので調べてみた。

BigDumpというスクリプトを発見。結果これでできた。

ダウンロードするとPHPファイルがひとつ入っているのでそれを開き、DBの設定だけしてインポート先のサーバーにアップロード。同じディレクトリに大きすぎて困ってたSQLファイルをアップロードし、ブラウザからアクセスすると実行できる。

コツとしてphpMyAdminでのエクスポート時に設定をデフォルトから変える必要があった。エクスポートの画面で「生成するクエリの最大長」が50000になっているのを100にしてSQLファイルを作る。

参考にさせてもらったページ
WikiCookRecipe日記: MySQLインポートファイルがでかすぎる時には BigDump を使ってみよう!

WordPressがタイムアウトで表示されない

運営していたWordpressサイトのひとつが、アクセスしてもタイムアウトとなり何も表示されない現象となった。

同じサーバーの他Wordpressサイトは表示されるのでサーバーが原因でもなく、テキストファイルなどを直接URL入力されると表示されるのでDNSなどが原因でもない。

しばらくアップグレードも変更もしていないので原因不明だったが、phpMyAdminで「テーブルの最適化」をしたら復旧。なぜこうなったのかは不明。

テストツールのseleniumを使ってみた

広島システム開発者勉強会で、テストツールのseleniumを使ったのでPHPの部分をメモ。

機能として、1つはFirefoxのアドオンとして、操作した動きを記録してボタンひとつでそれを再生できる。selenium downloadのIDEをクリックしてアドオンを入れるだけ。後はツールから開けば専用ウィンドウが出る。

もう一つは操作の動きをプログラミングできる。大量の条件をループさせる時などに便利。javaのサーバープログラムを動かした上で、PHP(など)で書いたテスト動作のスクリプトをコマンドプロンプトから実行する。

下準備。

PEARを最新にする。
pear upgrade PEAR

PEARのPHPUnitを入れる
pear channel-discover pear.phpunit.de
pear install phpunit/PHPUnit

先ほどアドオンを入れたのと同じselenium downloadから、Selenium RCをダウンロード。

解凍し、中に入っている
selenium-server-x.x.x/selenium-server.jar
をどっかわかりやすいトコに置く。そのままでも良い。

こっから動作。まずseleniumのサーバーを起動。コマンドプロンプトを開き、上記ファイルを実行。
java -jar selenium-server.jar
例)java -jar C:\htdocs\selenium-server-x.x.x.\selenium-server.jar

PHPでのテストコードのサンプルを作るには、FirefoxのツールからseleniumのIDEを起動して、何か適当に動作を覚えさせた後記録を停止し、
「オプション」「フォーマット」「PHP」にするとPHPコードができる。これが先ほど記録した動作をPHPで表したもの。これをどこかに保存。test.phpとか。

phpunitが動く場所(c:\xampp\php\ とか)で先ほど保存したテストコードを実行。
例)phpunit c:\test.php

これでコードで指定したブラウザが立ち上がり、テストが実行される。後はテストコードを好きなように書く。

(オマケ)下記のエラーが出て、原因がわからなくて調べるのに苦労したけどテストコードのパス間違ってただけだった。
Argument #1 of PHPUnit_Utill_Fileloader:checkAndLoad() is no existing file