PHP4.4.9でopenssl1.0.0以上が入らない
PHP4系でしか動かないプロジェクトがあったので、PHP4.4.9をビルドしました。
SSLの動作検証も必要だったので、OpenSSLも追加しました。
しかし、makeした時に下のようなopenssl.cでエラーが大量に出てOpenSSLを有効にすることができません。
/usr/local/src/php-4.4.9/ext/openssl/openssl.c:1955: error: 'struct php_x509_request' has no member named 'priv_key_encrypt'
/usr/local/src/php-4.4.9/ext/openssl/openssl.c: In function 'zif_openssl_pkey_export':
/usr/local/src/php-4.4.9/ext/openssl/openssl.c:2006: error: 'struct php_x509_request' has no member named 'priv_key_encrypt'
make: *** [openssl.lo] Error 1
調べてみると、PHP4.4.9とOpenSSLが1.0.0以上だと、OpenSSLが入らないようです。
X Info Line - OpenSSL module for PHP 4.4.9 and OpenSSL version 1.0.0 and greater
親切なことにopenssl.cのパッチが作成されていたので、無事にビルドすることができました。
以下手順です。
AdMobでリンクエラーが発生した時の対処法
環境
症状
iPhoneでAdMobを組み込もうと思い、googleのドキュメントと同じように実装をしたところ、以下の様なエラーが発生。
ld: library not found for -lGoogleAdMobAds
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決方法
AdMobのSDKをコピーしてきた時のファイルをリネームする必要があります。
下の図のように、「libGoogleAdMobAds.a」を「lGoogleAdMobAds.a」に変更します。
このようにすることで、ライブラリを読み込めるようになり、コンパイルが通ります。
感想
facebookのグループでメール通知が送られてしまう
facebookのグループ機能、公開範囲が限定されるのでよく使ってます。
ですが、メール通知を切っているのに新着情報がどんどん届いていました。
▼マーク>アカウント設定>お知らせ
おかしいと思い、もう一度よく見てみると、「各グループのメール設定を変更」という項目があるではありませんか!
しかし残念なことに、メール通知はグループごとにデフォルトでONになっていたのです!(私の環境では)
というわけで設定します。
「各グループのメール設定を変更」をクリックして、チェックを外してあげればOKです。
この設定をしてあげると、ようやくメールが鳴りやみました。
新しいグループが出来るたびに設定し直すのは面倒ですね。
array_walk_recursiveで変更された値を取得する
だいぶ詰まってしまったのでメモ。
PHPでarray_walk_recursiveという関数があります。
これは指定した関数に、配列を再帰的に処理していくというものです。
配列の中身が多次元配列だととても重宝する関数ですが、戻り値はbooleanになっています。
つまり、
$array = array_walk_recursive($array, 'ユーザ定義関数');
としてあげても、$arrayの中身はarray_walk_recursiveが正常に終了したかどうかのtrueかfalseが入ってしまうということです。
これを解決するためには、ユーザ定義関数の引数にアンパサンド(&)をつけてあげればいいです。
&をつけることによって、ユーザ定義関数で値が変更されると、もともとの値も変更されます。
例)arrayに入っている文字列の文字コードをUTF-8に変更する
function changeCharCode(&$value, $key){ //$valueの頭にある&が重要!
$value = mb_convert_encoding($value, 'UTF-8');
}
$array = 文字列の多次元配列;
array_walk_recursive($array, 'changeCharCode'); //メソッド呼び出し