<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HattaraTecLog &#187; wordpress</title>
	<atom:link href="http://teclog.hattara.info/?feed=rss2&#038;tag=wordpress" rel="self" type="application/rss+xml" />
	<link>http://teclog.hattara.info</link>
	<description>LinuxネタとかPHPネタとかの技術ログ</description>
	<lastBuildDate>Tue, 18 Nov 2014 12:15:20 +0000</lastBuildDate>
	<language>ja</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.8</generator>
	<item>
		<title>[Memo]wordpressで「現在メンテナンス中のため、しばらくの間ご利用いただけません。」</title>
		<link>http://teclog.hattara.info/?p=362</link>
		<comments>http://teclog.hattara.info/?p=362#comments</comments>
		<pubDate>Tue, 29 Jan 2013 00:01:11 +0000</pubDate>
		<dc:creator><![CDATA[hattara]]></dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[error]]></category>

		<guid isPermaLink="false">http://teclog.hattara.info/?p=362</guid>
		<description><![CDATA[久しぶりのブログ更新が、比較的どうでもいいネタで、 かつwordpressなんで、少し微妙ではありますが、メモ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>久しぶりのブログ更新が、比較的どうでもいいネタで、<br />
かつwordpressなんで、少し微妙ではありますが、メモ程度に。</p>
<p>wordpressの更新(いわゆるバージョンアップ)をしてみたら、<br />
ブログページも、管理ページも以下のエラーが表示されて、何もできなくなったというお話です。</p>
<blockquote><p>現在メンテナンス中のため、しばらくの間ご利用いただけません。</p></blockquote>
<p>結論からいうと、処理中でなく、処理完了後もこのエラーがでているようなら、<br />
SSHやFTPや、レンタルサーバならファイルマネージャみたいので、<br />
サーバ上のwordpressを置いてあるディレクトリ(フォルダ)直下に<br />
「.maintenance」ファイルができてると思うので、これを削除するか、<br />
不安だったら、「.maintenance_org」など適当な名前にリネーム(変更)したら表示されます。</p>
<hr />
<p>具体的な内容としては、まあ、既に巷に溢れてるんだろうと思いますが、<br />
共有のレンタルサーバとかでwordpressを利用している場合に、FTPのポートが開いているので、<br />
wordpressのバージョンアップを自ずとFTPで行う場面が多くなりそうですが、<br />
バージョンアップ処理を開始して、実際に新しいバージョンのファイルをコピーする前に、<br />
「wp-admin/includes/update-core.php」ファイルの「update_core関数」によって、<br />
以下のようにメンテナンスにロックファイルが作成されます。(関係ないけど直前に古いロックファイルは消してるみたい)</p>
<blockquote><p>
$maintenance_string = &#8216;<!--?php $upgrading = ' . time() . '; ?-->&#8216;;<br />
$maintenance_file = $to . &#8216;.maintenance&#8217;;<br />
$wp_filesystem-&gt;delete($maintenance_file);<br />
$wp_filesystem-&gt;put_contents($maintenance_file, $maintenance_string, FS_CHMOD_FILE);
</p></blockquote>
<p>で、ブログページ側の挙動を追っていくと、　（wordpressを置いているフォルダを起点に書きます）<br />
1. 「index.php」で「wp-blog-header.php」をrequire。</p>
<blockquote><p>require(&#8216;./wp-blog-header.php&#8217;);</p></blockquote>
<p>2. 「wp-blog-header.php」で「wp-load.php」をrequire。</p>
<blockquote><p>require_once( dirname(__FILE__) . &#8216;/wp-load.php&#8217; );</p></blockquote>
<p>3. 「wp-load.php」で、「wp-config.php」が存在すればrequire。</p>
<blockquote><p>
if ( file_exists( ABSPATH . &#8216;wp-config.php&#8217;) ) {<br />
/** The config file resides in ABSPATH */<br />
require_once( ABSPATH . &#8216;wp-config.php&#8217; );<br />
：
</p></blockquote>
<p>4. 「wp-config.php」で、「wp-settings.php」をrequire。</p>
<blockquote><p>require_once(ABSPATH . &#8216;wp-settings.php&#8217;);</p></blockquote>
<p>5. 「wp-settings.php」で、「wp_maintenance関数」を呼び出し。</p>
<blockquote><p>
// Check if we&#8217;re in maintenance mode.<br />
wp_maintenance();
</p></blockquote>
<p>6. 「wp-includes/load.php」の「wp_maintenance関数」が呼び出され、<br />
「.maintenance」ファイルがあり、かつファイル内に記載されているepoch値(エポック値)から<br />
600秒(10分)以内の場合には、「wp-content/maintenance.php」があれば、それを表示。<br />
それがなければ、「 _e( &#8216;Briefly unavailable for scheduled maintenance. Check back in a minute.&#8217; )」が<br />
表示される。</p>
<blockquote><p>
function wp_maintenance() {<br />
if ( !file_exists( ABSPATH . &#8216;.maintenance&#8217; ) || defined( &#8216;WP_INSTALLING&#8217; ) )<br />
return;</p>
<p>global $upgrading;</p>
<p>include( ABSPATH . &#8216;.maintenance&#8217; );<br />
// If the $upgrading timestamp is older than 10 minutes, don&#8217;t die.<br />
if ( ( time() &#8211; $upgrading ) &gt;= 600 )<br />
return;</p>
<p>if ( file_exists( WP_CONTENT_DIR . &#8216;/maintenance.php&#8217; ) ) {<br />
require_once( WP_CONTENT_DIR . &#8216;/maintenance.php&#8217; );<br />
die();<br />
}<br />
:</p>
<h1><?php _e( 'Briefly unavailable for scheduled maintenance. Check back in a minute.' ); ?></h1>
</blockquote>
<p>7. 日本語設定になっている場合には、「 _e( &#8216;Briefly unavailable for scheduled maintenance. Check back in a minute.&#8217; )」が<br />
「wp-content/languages/ja.po」に基づいて「現在メンテナンス中のため、しばらくの間ご利用いただけません。」が表示される。</p>
<blockquote><p>
#: wp-includes/load.php:178<br />
msgid &#8220;Briefly unavailable for scheduled maintenance. Check back in a minute.&#8221;<br />
msgstr &#8220;現在メンテナンス中のため、しばらくの間ご利用いただけません。&#8221;
</p></blockquote>
<p>そして、管理者ページ側もほとんど同じですが、<br />
「wp-admin/index.php」で</p>
<blockquote><p>require_once(&#8216;./admin.php&#8217;);</p></blockquote>
<p>「wp-admin/admin.php」</p>
<blockquote><p>require_once(dirname(dirname(__FILE__)) . &#8216;/wp-load.php&#8217;);</p></blockquote>
<p>されているので、結果、ブログページの3番以降と同じフローにのります。</p>
<p>あとは、メンテナンスページとして自分の作成した内容を表示したい場合には、<br />
「wp-content/maintenance.php」という名前のファイルを作って、表示させればいいです。</p>
<p>サンプルテキストを置くとしたら、</p>
<blockquote><p>echo &#8220;メンテナンス中です。ご迷惑をお掛けしてすいません&#8221; &gt; ./wp-content/maintenance.php</p></blockquote>
<p>簡単にメンテナンスのテストするなら、コマンドラインから以下をたたいて今のepoch値でロックファイルを作ります。<br />
（※当たり前ですが、wordpressはメンテ中になりますので、ご注意ください）</p>
<blockquote><p>php -r &#8220;echo sprintf(&#8216;<!--?php \$upgrading = %d; ?-->&#8216;, time());&#8221; &gt; .maintenance</p></blockquote>
<p>ということで、エラーがでたので、久しぶりにphpのコードを読んで、中身を追って、<br />
どこにでもありそうな処理フローの解説をするという誰得っぽい記事を書いてみました。久しぶりの更新なのに。。</p>
]]></content:encoded>
			<wfw:commentRss>http://teclog.hattara.info/?feed=rss2&#038;p=362</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
