Latest Publications

phpのssh2.soのエラー解決

サーバー環境をいろいろといじっていたら、
PHPが下記のようなエラーを出すようになった。
何を変えたことで発生したかは不明。

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/ssh2.so' - /usr/lib64/php/modules/ssh2.so: undefined symbol: php_checkuid in Unknown on line 0

ssh2.soやlibssh2.soを再インストールしても
エラーメッセージが多少変わるものの治らず。

結局、ssh2-0.12をソースからコンパイルする時に下記のオプションを付けて解決。

./configure --with-ssh2 --with-php-config=/path/to/correct/php/bin/php-config

php-configのパスは下記で探した。

sudo find / -name "php-config*"

大変だった。

MacでWindowsのexeに関連付けた特定の拡張子ファイルを開く

Mac(mountain lion)でWindowsのプログラムを使うためのwineというものがある。
exeファイルをwine経由で起動させることにより実行が可能。

ただ、exeファイルだけではなく
特定の拡張子をプログラムに関連付けをし
ファイルをダブルクリックするだけでそのプログラムで開くようにしたい。

今回実施したいのはjwwのファイル。
他でも同じ方法でできるはず。

プログラムファイルであるjw_win.exeをダブルクリックで開くようにはすぐできたが
データファイルのfilename.jwwをダブルクリックすることでjwwと共に開くのに苦労した。

まずはwineのパスを調べる。
インストールした方法によるが、自分はNXWineというアプリで入れたので
/Applications/NXWine.app/Contents/Resources/bin/wine
にあった。
jw_win.exeのパスも調べておく。

MacのAutomaterでApplicationを選び、Run Shell Scriptをダブルクリックして右側にウィンドウを出し
入力を「as arguments」にした上で

/Applications/NXWine.app/Contents/Resources/bin/wine start /unix "/pathToJwwFile/jw_win.exe $1"

とする。

後はこのApplicationに適当な名前を付けてどこかに保存。
これで、このApplication経由でjwwファイルを起動すると
$1の部分にjwwのファイルパスが入り、jw_win.exeがwine経由で起動することになる。

関連付けは、どれか適当なjwwファイルを右クリックしてGet Infoを選び
Open withのところで先ほど作成したApplicationを選択し、
その下のChange Allボタンで他のjwwファイルもすべてこのApplicationで起動するようにする。

(追記)
上記でjw-cadは使用できるようになったものの
なぜか印刷してもできず。(印刷キューに出てこない)

色々と試した結果、macportsよりwine-1.7.2を
インストールすることで解決。

上記のパスは下記に変更。

/opt/local/bin/wine start /unix "/pathToJwwFile/jw_win.exe $1"

PHPを5.4にしたらCakePHP2.xがエラーに

core.phpに下記を追記して解決。

Configure::write('Error', array(
    'handler' => 'ErrorHandler::handleError',
    'level' => E_ALL & ~E_DEPRECATED & ~E_STRICT,
    'trace' => true
));

PHPやコマンドで画像比較

2つの画像を比較して、変化したかを調べる方法を探していたら
Libpuzzleというツールがあることを発見。
PHPでもコマンド(CUI)でも使えるということで自分の用途にぴったり!

インストールは下記を参考にさせてもらった。

PHP5.4でLibpuzzleを使って画像の類似度判定を行う – 波打際のブログさん

コマンドでも下記のように使える。

$ puzzle-diff img1.jpg img2.jpg

Adwordsの金額指定支払

金額を自動支払いにしていると
使った分だけ後払いで支払うことになるが
請求の都合などで切りの良い数字にしたい時には手動支払いを行う。

これをたまにしかしないため
その支払い画面がどこにあるかいつも迷ってしまうのでメモ。

Snapshot 2013:09:02 11:35

jenkinsでgitリポジトリ指定時のエラー

stdout: 
stderr: Host key verification failed. 
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

known_hosts不足だった。
/var/lib/jenkins/.ssh/known_hosts
に追記して解決。

MySQLのカラム順番変更

SQLとしては順番は関係ないけど見ててわかりやすいように整理するために。

ALTER TABLE テーブル名 MODIFY カラム名 データ型 after 移動させる一つ上のカラム名;

phpのcurlでsslサイトにつなぐ

phpからcurlを使ってサイトにアクセスした際に
どうしてもレスポンスが取得できないことが発生。

何もレスポンスがないので原因判明に苦労したが
terminalのコマンドで

curl -I https://example.com -k

と入力すると

curl: (35) Unknown SSL protocol error in connection to example:443

ということでSSLのプロトコルエラーであることが判明。

色々とコマンドを試し、

curl -I https://example.com -k  --tlsv1

で接続できた。

これをphpのcurlでどうやるかも苦労したけど
下記のオプションで、SSLのバージョンを手動指定することで解決。

curl_setopt_array($m,
  array(
    CURLOPT_URL =>'https://example.com',
    CURLOPT_SSLVERSION => 1,
  )   
);

SSLのバージョンは通常、自動判別するけど
サイトによってはそれが上手く動かず
指定をする必要があるみたい。

gitで新規作成ファイルがstatusに上がってこない問題を解決

ファイルを変更したものはgit statusに上がってくるが
新規作成したものは出てこない。なのでaddもできない。
.gitignoreでもそんなことしていないし、原因を探すのに苦労した。

原因は上位ディレクトリの.gitignore。

Macのホームディレクトリにあるドットファイルを
gitで管理しはじめたが
その下位ディレクトリに開発ソースを置いていたので影響を受けてしまった。

プロジェクトの.gitignoreに下記を追加

!*
!.*

無視しない、ということなのでイコール許可するということ。
一旦全部許可した上で、改めて無視ファイルを指定する。

git サブモジュールメモ

gitのサブモジュールを追加

自分の管理しているgitプロジェクトの内部に
プラグインなどとして別のgitプロジェクトを追加したい場合は
サブモジュールとして入れる。

プロジェクトルートで下記。

git submodule add git://example.com/repo.git DIR

サブモジュールの中身は変更しない。
したらgit add できずに modified contentとかって残る。

gitのサブモジュールを展開

git cloneしただけではサブモジュールはディレクトリしかできない。
下記が必要

git submodule init
git submodule update

gitのサブモジュールを削除

サブモジュールのディレクトリを消して
.gitmodulesも.git/configも修正したのに
再度追加しようとすると
already exists in the index
ってエラーが出たら

git rm -r DIR