WordPress4.0がリリースされてから少し出遅れ気味ですが、
テスト環境を構築する意味も含めて、アップデートしてみました。
その後ログイン画面までは行くけど、ログインしようとすると何も表示されていない
画面に遷移するだけ・・・という、(おそらく)レアなケースが発生したので一応メモ。
1.事象
Wordpress3.9.2からアップデートしたら、強制的にログイン画面に飛ばされる
(セッション関連のモジュールもアップデートされるので当然です)
が、ログインしようとすると何も表示されない。
2.原因と対処
手っ取り早くapacheのログをチェックすると、phpで致命的なエラー吐いている場所を発見。
要約すると「hash()なんて関数ねーぞ」って言ってる。
調べてみるとphpの拡張モジュールにhash.soがあって、その中の関数であることが判明。
phpのインストールディレクトリにあるextensions.iniファイルを見てみると
見事にコメントアウトされていたので、コメントを外す。
;extension=hash.so → extensions=hash
3.結果
解決。
今回はサーバーのコンソールに入れる環境だったので対処できたけど、
レンタルサーバーの設定によってはWordpress4.0は動かない可能性があるので注意ですね。
(sshでアクセスできないとか、ftpで設定ファイル関係のある場所までいけないとか)
ただまぁ・・・レアなケースだろうなぁ。
facebookのポストをrssで取得して出力しようとしたら、
タイトルの日本語が全部HTMLエンティティになってて、trimもなんにも上手くいかない。
なので、packしたり、html_entity_decode使ったりして変換しようとしたけれど、
どうにも言う事聞いてくれなくて、格闘した末うまくいったのでメモ。
// rss取得
// クラス
include_once(ABSPATH.WPINC.'class-simplepie.php');
$rss = new SimplePie();
// feed url
$rss->set_feed_url(array('あんなところ','こんなところ','のfeed url'));
$rss->init();
$maxitems = $rss->get_item_quantity(3);
// アイテム取得
$items = $rss->get_items(0,$maxitems);
// 出力ループ
foreach ($items as $item) :
$title = $item->get_title();
// 数値参照文字っぽいものを含む場合だけ処理
// そうしないとまっとうなUTF-8タイトルまで破壊される
if(preg_match('/&#x.{4};/',$title)){
// get_title()メソッドで&が全て&に変換されてしまってたのでもとに戻す
$title = preg_replace('/&/','&',$title);
$title = mb_convert_encoding($title,'UTF-8','HTML-ENTITIES');
}
// こっから出力関係適当に
・・・・・
endforeach;
16進文字列取ってpackしてみたり、別のエンコード経由で変換してみたりと無駄なことをしていたことが判明。
ただし、エンティティと日本語の混合文字列だとどうなるか判らない模様。
wordpressを使ってて思うのが、サイトurlを変更したり、
cssやjs・画像ファイルをwordpressのインストールディレクトリとは
別にした時、ソース上のパスが相対パスの嵐になってしまうので、
それを正規化するフィルターを一本ゴリ押しで書いてみた。
<?php
// 適当にパスを突っ込む
$real = 'http://hoge.jp/install_dir/wp-admin/wp-content/../../../css/test/../test.css?aaa=bbb&amp;ccc=ddd#flag';
var_dump(opt_path($real));
// パスを正規化(http(s)://から始まる絶対パスのみ)
function opt_path($base=''){
// urlパース
$parse = parse_url($base);
// schemeに合わなければ何もしない
if (!preg_match('/^https?\:\/\//',$base) ){
return $base;
}
// パスを/で区切る
$tmp = split('\/',$parse['path']);
// 配列を定義
$dirs = array();
foreach($tmp as $pt){
// 親ディレクトリの場合は前に積んだディレクトリをはずす
if($pt == '..'){
array_pop($dirs);
}else if($pt == '.'){
// カレントの場合は何もしない
continue;
}else{
// それ以外はディレクトリ名として突っ込む
//(隠しディレクトリもいけると思うけど無対応)
array_push($dirs,$pt);
}
}
// url組み立て開始
$urls = $parse['scheme'] . '://' . $parse['host'] . implode('/',$dirs);
// クエリがあれば付加
if($parse['query']){
$urls = $urls . '?' . $parse['query'];
}
// フラグメントがあれば付加
if($parse['fragment']){
$urls = $urls . '#' . $parse['fragment'];
}
return $urls;
}
?>
・・・なのかどうなのかは定かではないけど、
結婚指輪をすると、指が荒れるのはなぜだろう?汗疹?
とにもかくにも辛いので、基本外しているのだが、
カミさんとの身長差・年齢差、そして何より自分の老け顔もあってか
適当な格好でコンビニとか行って、タバコとか買ってもらってたりすると、
ただのヒモみたいな見られ方されてそうで怖い。