【解決済】さくらのレンタルサーバでPHP5.6を使用すると、file_get_contenst等でSSLエラーになることがある件と、当座の解消法

★追記:2016-04-30

さくらのレンタルサーバの「標準のPHP」が5.6になってたので、改めて確認したところ、SSLエラーは解消されていました。

さくらのレンタルサーバ・さくらのマネージドサーバにて標準のPHP[PHP5] のバージョンを変更します
http://support.sakura.ad.jp/mainte/functionaddentry.php?id=17892

−−−−−−−−−− 以下、解消前の記事 −−−−−−−−−−

スクリーンショット 2015-09-02 10.02.18

しばらく前から、さくらのレンタルサーバでPHP5.6が選べるようになって大変嬉しいのですが、PHP5.6からSSLの扱いが変更になったことと、サーバの証明書の関係で、readfilefile_get_contents などでHTTPSなURLを参照すると、下記のようなエラーになることがあります。

Warning: readfile(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /foo/var/ssl_test.php on line 1

Warning: readfile(): Failed to enable crypto in /home/foo/bar/ssl_test.php on line 1

Warning: readfile(https://tbx.sakura.ne.jp/test.txt): failed to open stream: operation failed in /home/foo/bar/ssl_test.php on line 1

PHP5.6に設定した後から、他所のファイル読込みやPOSTが一部できなくなって、調べてみたら上記のようなエラーがありました。

root権限のないサーバではやれることに制限があるものの、HTTPSなファイルの読込みを維持したいので、ひとまずは以下のいずれかの方法で解決します。
サポートへリクエストを送ったので、いずれ解消されると思います。

  1. ピア証明書の検証を行わない。 任意の証明書を読ませるオプションを追記する

    php – file_get_contents(): SSL operation failed with code 1. And more – Stack Overflow

    (追記)
    この次の方法でエラーが解消されない場合は、ソースコードをいじることになりますがこの方法が適しています。
    検証を迂回するのはさすがにまずいですね…

  2. php.ini に新しい証明書を認識させる

    ComposerからLaravelを導入しようとしてOpenSSL周りのエラーで困った件 – Qiita

    さくらはphp.iniを編集できるので、新しい証明書を認識させてやります。

    新しい証明書を cacert.crt などにリネームし、適当なところへ配置して下記のようにフルパスを記述します。

    curl.cainfo=/home/foo/bar/cacert.crt
    openssl.cafile=/home/foo/bar/cacert.crt


編集者権限ユーザがWP-Pollsの更新を行えるようにする小ネタ

WP-Pollsは管理者のみ更新可能ですが、必要に迫られて編集者でも更新できるようにした際の小ネタ。
プラグイン本体を修正するのはおっかないので、テーマファイルのfunctions.phpに追記する方法をとります。

参考サイト

functions.php に追記する内容

function add_wp_polls_caps(){
	$role = get_role('editor');
	if(!$role->has_cap('manage_polls')) {
		$role->add_cap('manage_polls');
	}
}
add_action('admin_init', 'add_wp_polls_caps');

livedoor blogからWordPressへ移転する際のパーマリンクに関するメモ

ライブドアブログからWordPressに記事を移転するお仕事した際、なるべくURLを変えたくないなーと思ったのでやってみた作業メモ。

  1. 下準備
  2. WordPress側の設定
    • パーマリンク設定: /archives/%postname%.html
  3. インポート
    • WordPressは、標準でMT形式のインポート機能を追加できる。[ツール > インポート]
    • 環境によっては非常に時間がかかる。
      取込み試験を行ったさくらスタンダードでは、1件につき5秒くらい。ローカル環境では、30分で300件ほど。
    • 取り込んだ後、URLが従前と同じ形式が確認してみる。
  4. ライブドアブログ側のコメントを閉じる。
  5. DNS設定を変更し、移転完了。

パーマリンクの様式をなるべく引き継いだ場合、ひとつ面倒くさくなるのがスラッグの設定。
インポート時、ライブドアブログの記事IDを post_id にできないかといろいろやってみたのですがうまくゆかず、通常通り postname に収めることになったのですが、パーマリンクを post_id ではなく postname にすると、新規投稿を登録するたびにスラッグを設定する必要が生じます。
特に何も考えないと、今まで記事IDだった短いURLが、タイトルから再構成された長ーいものになってしまいます。しかし毎回固有IDっぽいのを割り当てるのも非常にめんどい。
スラッグへIDっぽい文字列を自動で割り当てられたら便利なので、下記サイトのコードを参考にしました。

WordPress の投稿スラッグを自動的に生成する | Simple Colors
http://www.warna.info/archives/2317/

私の場合はこんな塩梅に変更して functions.php に追記しました。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
	if ( $post_type == 'post' && $post_ID > 0 ) {
		$slug = 60000000 + intval($post_ID);
	}
	return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );

$post_type == ‘post’ の部分を入れておかないと、固定ページほかあらゆる投稿タイプでスラッグが自動入力されてしまいます。
投稿タイプがpostの場合、WordPressの記事IDに60000000を足した文字列をスラッグに登録します。
60000000は適当です。今現在のライブドアブログ側記事IDが52000000あたりなので、キリの言い数字でスタートすれば分かりやすいかなというふわっとした理由によるものです。
ライブドアブログ側での最終更新の記事IDにちょっと足した数値でも良いでしょう。

記事インポート時はスルーしたいため、 $post_ID > 0 も加えました。
インポート時、wp_insert_post() が動く際には記事IDが確定していないため、$post_idは 0 のままこのフィルタに渡されます。こうしておくとインポート時にはスルーされるようになります(多分)

以上、参考になれば幸いです。


WordPress4.1.1→4.1.2以降/4.2以降にアップデートすると新規投稿できない問題と解消方法のメモ

確認した事象

  • ちょっと古くから使っているWordPressのサイトにおいて、WordPress4.1.1から4.1.2以降へアップデートすると、新規投稿できない/既存記事を更新すると文字化けする。

原因っぽいこと

  • DBがujisのまま
  • DBはutf8だが、一部テーブルのCHARSETがujisのまま(textboxはこのケース)

確認しておくこと

  • DBのダンプデータをエディタ等で開き、「CHARSET=ujis」を検索する。問題が発生している場合、たぶん見つかる。
    (textboxの場合、25テーブル中10あった)

対処方法

  • 暫定措置

    下記フォーラムを参照。
    https://ja.forums.wordpress.org/topic/150103#post-208912
    WordPress4.2.1では2593行目を修正。
    https://core.trac.wordpress.org/browser/tags/4.2.1/src/wp-includes/wp-db.php#L2593

  • ここでやってみた対処方法

    フォーラムにはCHARSETを変換するのが良さそうとあったので、この際だからきちんとやってみる。

    • 作業前提
      • DBは charset utf8 にしてあった
    • やったこと
      • mysqldumpするかphpmyadminでエクスポート
      • 書き出したデータを開いて、CHARSET=ujis を CHARSET=utf8 に置換
      • utf8なDBを新たに作ってインポート
      • wp-config.php のDB設定を変更して再ログイン
      • 新規投稿できるか確認する

うまいこと投稿できるようになりました。ありがとうございました。


QuickCacheがZenCacheになった

Image 2015-03-16 at 3.05.36 午後

WordPressのキャッシュプラグイン「QuickCache」の有料版がとても便利なので、「QuickCache Proを使うべきn個の理由」みたいな記事をいずれ書こうと思ってたら、「ZenCache」になって価格設定が変わり、有料版を少し勧めづらくなってしまいましたが、今のお仕事では欠かせないプラグインです。

キャッシュの生成条件が柔軟で、UserAgentやCookieの値によって別々のキャッシュを生成できるので、端末や任意の機能による表示切替が容易に行えて便利です。
他のキャッシュプラグインは分からないのですが、 require(‘wp-load.php’); が入っている外のページもキャッシュしてくれます。

従前のライセンスを購入してる人は、自動的に3年間のUnlimited-Site Licenseが与えられてるので、ちょっとお得。

マルチサイト運用の場合、一部の不具合が残っているので、ZenCacheに移行する際はご注意ください。

あとこれも。


備忘録 : wp_list_categoriesで出力されるカテゴリ一覧のリンクの中に記事数も含めるテスト

タイトル長い……

WordPressのテンプレタグ[wp_list_categories]で通常出力されるカテゴリ一覧のリンクは、

上記の通り。これを、

上記のような塩梅にしたい時のソースは下記。WordPressのテンプレをいじるには少々PHPを覚えにゃならんらしい。

<ul class="***">
<?php
$string = wp_list_categories('show_count=1&title_li=&echo=0');
echo preg_replace('/<\/a> (\([0-9]*\))/', ' $1</a>', $string);
?>
</ul>


070701 :: ここまでのおさらい

使用者にとっては激しく既出なはずの留意事項を、私が忘れないように書き留めおくことに。

テーマの件

  • 元となるテーマは、公式のTheme ViewerからBasic 1.0を選んだ。およそ必要なタグが使われていて、スタイルシートは真っ白という非常にありがたいテンプレート。これをもとにソースの細かい部分とスタイルシートを編集。
  • Basic 1.0を含め、いくつかのテーマにXSS脆弱性があるので、それを予め解消しておく事。
  • カレンダー表示を加えると、記事のアップ間隔の長さがバレるので、ものぐさにはお薦めできない(ぉ
  • PHP系のアクセス解析を埋め込む際はindex.phpの中にincludeする。テーマファイルには書かない。
  • 画像表示のアクセスカウンタはテーマファイルの中に。その際、カウンタ自体のファイル置き場設定などはフルパスが好ましい。

モブログの件

  • WordPress自体のメール投稿機能だと携帯電話からのメール処理に難があるので、SOMY.JPで配布している「SOMY Mobile Gate」を使用することで解決。
  • ただ、WordPressの置き場とindex.phpの設置場所が異なる場合は、mobile-gate/modules/wp-mail.php の399行目、401行目、431行目を適宜いじる必要あり。
  • メール送信後自動的に記事作成するには、cronとかで一定間隔の処理を予約しておく。単にMobile Gateを読み込むだけなので、wgetが良し。

070630 :: ちょいと模様替え+いろいろ

お仕事でWordPressをいじる機会が出てきたので、中身をいろいろ知る為に自分のネタ帳もBlosxomからWordPressにしてみました。今までありがとうBlosxom……。データベースいらずで動作が軽すぎるので大量の記事があってもモリモリ使えるんだけども、自分のスキルが少ないからお仕事で引き合いに出す事がついに出来ない……。記事の承認機能はディレクトリの同期でフォローするとして、独特の投稿形態をお客さんが納得するものに仕立てる能力がない。Perl勉強するかなぁ……。

で、中身が変わればRSS Feedも変わるという事で、お手数ですがRSSの登録を変更してください。一応リダイレクトはやっておきます。

RSS2.0] [RSS0.92] [Atom

加えて、ついでに、あまり変わらんのですが模様替え。
以前、MODxをいじってる際に触った1024pxというテンプレートがとても気に入ったので、それに倣う感じに。
日常的に味付けの濃いものに触れているので、自分とこはダラーッと何もない方が良いなーと思った次第。

古いネタ帳は下に書いた通り、メニューの[old neta]から辿れます。また、大事めな記事はいくつかこちらに移しました。
特に、window.close()ネタはとても勉強になりました。現在のFirefoxのバージョンではtakashiさんの方法でもうまく閉じてくれないようなのですが(こちらの手違いかも……)、挙動を知る上で参考になります。

では、今後ともよしなに……