PHPのDOMDocument::loadHTML()がHTMLエンティティを変換してしまう件(未解決)
あえてHTMLエンティティのまま読み込んでそのまま出力してもらいたいのだけど、loadHTML()が勝手にもとに戻してしまい、これが元で意図した動作になってくれない。
この問題はこのへんでも論じられているが、解決はしていないみたいです。
調べてみると、これの内部処理はlibxmlが行っている模様。 で、libxmlのドキュメントを読むとこの動作を制御するためのxmlSubstituteEntitiesDefault()というのが用意されているみたい。
http://xmlsoft.org/entities.htmlxmlsoft.org
でもPHPからこの関数を叩く方法が用意されていない…。 一応要望は出されているみたいだけど、2002年から放置なので対応する気はなさそう。
https://bugs.php.net/bug.php?id=15145bugs.php.net
こんなん見ても無いもんはないw
これはもうどうにもならんので他の方法を考えることにします。。
AWS EC2(CentOS)のストレージ拡張
AmazonLinuxではなくてCentOS6です。 AmazonLinuxではオンラインで拡張できるようですが、CentOSの場合は1度OSリブートする必要があります。
AWSマネージメントコンソールからELBをリサイズ # cat /etc/redhat-release CentOS release 6.6 (Final) # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 20G 0 disk └─xvda1 202:1 0 8G 0 part / # df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.8G 6.0G 1.5G 81% / tmpfs 498M 0 498M 0% /dev/shm # wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -i epel-release-6-8.noarch.rpm # yum install dracut-modules-growroot # dracut --force --add growroot /boot/initramfs-$(uname -r).img # reboot 再起動後 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 20G 0 disk └─xvda1 202:1 0 20G 0 part / # df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 20G 5.9G 13G 32% / tmpfs 498M 0 498M 0% /dev/shm
再起動したら拡張が適用されてました。 resize2fsが必要だと思っていたのだけどなんでだろう…。
LINEモバイルを早速検証、年齢認証も突破!
いよいよ始まりましたLINEモバイル。 これはあのLINEがはじめたMVMO、所謂格安SIMサービスです。
メインとなるプランは月額500円で1GBの通信ができるプランです。 特徴はなんといっても、LINEとの通信は容量カウントされないという事です。 LINEでの通信がメインの人にはこれ以上のプランはないでしょう。
更に特徴となるのが、LINEの年齢認証を突破できる事です。 いままでは格安SIMではLINEの年齢認証を突破できなかったのでこれは大きな利点です。 年齢認証が通らないとID検索ができませんので、中々不便でした。
そんなLINEモバイルの申込はこちらからできます。
現在のところ初回販売2万契約限定との事ですが、現時点ではまだ申込ができるようです。
そんなわけで昨日9/7、早速申し込んでみました。 サイトから各種情報を入力、身分証のアップロード、カードの登録等行います。
そして本日9/8、早くもSIMが届きました!

早速試してみました。 使っている端末はドコモ版iPhone5cです。

ちなみに今まで使っていたSIMはIIJmioです。 格安で安定していることで有名ですので、特にLINEに拘らないならオススメです。
IIJmioのSIMはまんまdocomoのものだったのですが、 LINEモバイルのものはdocomoのロゴは無いようです。

付属の説明書に従ってAPN構成プロファイルをダウンロード、インストールします。 この端末ではすでにIIJmioのプロフィールが入っていたため、予め削除するという操作が必要でした。

インストールすると問題なく通信できるようになりました。 キャリア表示も「docomo LTE」となっています。

LINEの年齢認証を突破してみる
さて本題です。
まずLINEを立ち上げ、IDの設定自体は済んでいます。 ここから「IDで友だち追加を許可」をしようとすると、今まではキャリア認証ができず有効にできませんでした。
今回ためしてみると、「LINEモバイルをご契約の方」という項目が増え、進めるようになっています。

そこで「利用コード」というのを入力する必要があります。

これ最初は悩んだのですが、LINEモバイルのサイトにログインすると利用コードが表示されていました。 こちらを登録することで次へ進めます。

あとは画面の指示通りに進むことで、年齢認証をクリアし、無事「IDで友だち追加を許可」を有効にすることにできました!

如何でしたでしょうか。 月500円でIDが使える状態のLINEを使えるのはすごくお得だと思います。 最近普通のキャリアでスマフォを買うと月額がやたら高いですので、これらをうまく活用して節約していきたいですね!
Electronの対応OS
今話題のElectronでのアプリ開発を模索しています。 Electronが対応しているOSを調べてみました。
・Mac
OSX 10.8(Mountain Lion)以降
7より以前のWindowsについては今後も対応するつもりはないようです https://github.com/atom/electron/issues/691 https://github.com/atom/electron/issues/1775
技術者としては大変よくわかかるのですが、コンシューマ向けアプリの開発をしようとするとターゲット層によっては結構厳しいですね…。
【SSL証明書】PositiveSSLを使ってみた【激安】
長らく使える激安SSL証明書といえばRapidSSLが君臨してきましたが、RapidSSLの更に数分の一という価格のPositiveSSLを使ってみました。
円安等の煽りを受けRapidSSLも年間3000円くらいになってしまいましたが、PositiveSSLは年間1000円前後で販売されているようです。(2015年6月現在)
まずは認証経路をば。Chromeで表示した所です。

AddTrust External CA Root
↓
COMODO RSA Certification Authority
↓
COMODO RSA DOmain Calidation Secure Server CA
↓
自ドメイン
ルート証明書は「AddTrust External CA Root」です。
各端末の搭載状況としては以下のような状況でした。
| 端末 | 状況 |
|---|---|
| PCブラウザ | 問題なし |
| iOS | 問題なし |
| Android | 問題なし |
| docomoガラケー | 2008年新型番以降の端末の多くは搭載 |
| auガラケー | 1機種(W47T)を除き全機種搭載 |
| softbankガラケー | 2009年11月以降に発売した端末に搭載 |
ガラケーのSSL対応も全キャリア2G世代が廃止されたことによりだいぶ整理されました。どちらかと言うとルート証明書より端末がSHA-2対応しているかのほうが問題です。
激安証明書のわりに新興認証局というわけではなく、それなりに(?)歴史ある証明書のようです。とりあえずガラケーの事を考えなければ何の問題もなさそうですし、発売年を考えるとガラケーでも大部分は対応していそうです。
ガラケー対応を考えるなら従来通り、安く済ませるならRapidSSL、カバー率100%が必要ならSymantec(Verisign)という状況は今も変わらないようです。
証明書のブランドを気にせず、ブラウザの警告を消したいだけならば今後はPositiveSSLを買っていこうかと思います。
参考
COMODO 携帯電話、スマートフォン、タブレット対応状況
(ドコモ)FOMA機ルート証明書搭載状況
(au) SSL証明書一覧
(softbank) SSL 証明書一覧
携帯電話とSSLルート証明書
macのPHPからcURLでhttpsアクセスすると失敗する件
3時間ほどハマったのでメモ。 PHPのcURLからとあるサイトを読み込もうと思っても何故かcurl_exec()からはfalseが帰ってきます。当然全然関係のないサイトを指定すれば問題なく読み込めるのですが…。
curl_error()などを使ってエラー理由を調べた所、以下のようになりました。
Error Number:56 Error String:SSLRead() return error -9806
SSL関係でエラーとなっているようです。確かに読み込もうとしているページはhttpsのページでした。試しに他のhttpsサイトを試しましたがそちらは成功。特定のサーバー相手の場合のみ発生するようです。
いろいろ調べた所、どうもmacのhomebrewでインストールしたPHPはSSL通信のライブラリとして「Apple's Secure Transport」とかいうものをリンクするようなのですが、こいつがどうもTLSに対応していない?という事のようなのです。SSLv3は脆弱性が見つかっており無効にしてTLSを使うようにしているサーバーも多いので、そういったサーバーとは通信できずエラーとなるようです。
対症療法としては「Apple's Secure Transport」ではなく普通のOpenSSLライブラリを使うようにPHPを再インストールするという作業になります。私の環境の場合はphp5.6をインストールしている(参考)ので以下その場合の手順となります。
まずこの方法の対象はhomebrewでphpをインストールし、以下のコマンドを実行して所定の結果が出る場合となります。
$ php -i | grep "SSL Version" ↓ SSL Version => SecureTransport
一旦既にインストールしているphpをアンインストールします。
$ brew uninstall php56
homebrewのcurlをインストールします。
brew install --with-openssl curl
Apple's Secure Transportではなく、OpenSSLをリンクするように指定してphpをインストールします。
$ brew install \
--with-apache \
--with-homebrew-curl \
--with-homebrew-openssl \
--without-snmp \
--with-apxs2=/usr/sbin/apxs php56
$ brew install php56-mcrypt
これで再度コマンドを打って以下のようになれば成功です。
$ php -i | grep "SSL Version" ↓ SSL Version => OpenSSL/1.0.1j
apacheに反映させたい場合はapacheの再起動をお忘れなく。
これで無事にTLSのみ有効なサイトともhttps通信できました。
参考サイト
http://stackoverflow.com/questions/26461966/curl-post-to-https-url-returns-sslread-error