えらくはまったので備忘。

  • イメージファイルの多いコンテンツをWordpressでexport/importしたい
  • エクスポートはDeMomentSomTres Exportを使用。これを使用すれば画像もサムネイルも正しく移行できる
  • が、エクスポートファイルや画像が大きいとimportの際にエラーになる(phpがタイムアウトする)
  • エラーになると画像は途中でアップロードされた状態となる。(画像→記事の順でimportされている模様)
  • importを繰り返すと画像は最終的にアップロードされるが、記事がアップロードされる最後のimport以前のimportで取り込まれた画像は記事とリンクしていない(記事中のurlはexportした側のwordpressのディレクトリを見ている)。アップロードされた画像はリンク先の記事が存在しない状態になる。

解決した手順

  • php.iniのmax_execution_timeを大きくする(30→300)
  • 必要に応じてupload_max_filesizeも大きくする

これだけではだめ。apacheのタイムアウトが短い場合はこちらも長く。さらに、

  • /usr/local/apache/conf/php.confにIPCCommTimeout 300を追加

これはmod_fcgid.cの設定らしい。fcgidはphpのプロセスを「keep alive」のように一定時間killせず保持しておく高速化のためのモジュールらしいが、これの保持期間がデフォルト40秒だった。

なお、IPCCommTimeoutを設定する場所は環境依存と思われる。(httpd.confで設定する環境もあり)

課題

300秒でも現実的には短すぎ。天リフの場合30記事分くらいwww なのでカテゴリで分割してねちねち移行するしかないw

もちろん移行作業終了後は設定を戻すことを忘れずに。現設定では、たぶんアクセス集中で落ちやすくなっているはず。