Posts Tagged ‘wpmu’

ブラウザの壁

木曜日, 10 月 15th, 2009

さてさて今回は久しぶりのcodingネタですよ。
最近何やっているかというと、なんか再びPHPに戻ってます。
というのものページ作成を例によって某氏と一緒にやっていたから。 いや正確にはやっているから。でも一通り完成といったところですね。見た目は。

今回主に私が書いたのは、WordPressのインストールディレクトリ配下にない場所に置いたPHPファイルから、WordPressの情報を取り出す、という作業。 最初はworpressの関数群を呼び出す必要があるかと思ってたんだけど、よく考えたら(いや考えるまでもなく)自分でQuery発行する気があるなら、データベースに直接クエリ発行してしまった方がいろんな意味で早いんでね?と気づいた訳です。
どの道、書き込みをする気はなかったのでWordPressのデータベースの情報を整合性を破壊する心配はないし。
DBへの負荷はむしろ減るかも知れないし(笑)。

さて私がやったこと、そして躓いたことを。
まず第一に、自分の使っているサーバのDBへアクセスするために必要な以下の情報を確認。
ホスト名、ユーザ名、パスワード
次に、WordPressが利用しているデータベースのDB名。
最後に、WordPress(MU)が利用しているテーブルに着く、データベース接頭辞。
WordPressの関数群を利用するなら、WPDBオブジェクトのインスタンスglobal $wpdbのメンバbase_prefixを参照すれば分かります。
そうでなくとも、phpMyadminするなり、MySQLに接続するなりすれば、分かると思いますが…。
あとはそもそもconfig.phpをみれば丸わかりですな。上記全て。

とりあえず、単純にDBに接続するテスト。mysql_connectを呼んで、適当なテーブルから情報を読み出してみる。
成功。次に、後々使うに決まってるからmysql_な関数たちのごく一部、使いそうなやつだけラッパーを書いた。
ここで、クエリを発行するためにmysql_real_escape_stringをしようとしてハマった。
ただの勘違いでしかないんだけど、echo mysql_real_escape_string($string);すると、文字化けするんだよね。
ちなみに$stringはUTF-8で書いてる。そもそも文字化けして当然だということをよく理解せずに、「何で文字化けしてるんだー!」とあっちゃこっちゃのQ&AやらTipsやらリファレンスやらを読み漁るも、解決できず(出来る訳がない)。

ようやっとescapeしているのがシングルクォートや\r\nだということを理解し、なんか徒労感に襲われる(実際徒労なんだが)。
んでクエリにreal_escapeした文字列をぶち込んで成功。
そしてクエリ丸ごとescapeして失敗(そりゃそうだわな)。
やっぱり駄目か…と思いつつ、クエリを渡すとシングルクォートでexplodeして、シングルクォートに挟まれた文字列だけをescapeして再結合するルーチンを追加。シングルクォートがいくつでも今のところ動いているようだ。
やったことは単純で、explodeした後の配列を$stringsとすると、for($i=1;$i SQL文はシングルクォートから始まったりしないという知識を利用しているのであんまりよろしくない気もするが、正しくないクエリーは何れどこかで弾かれるので、まぁ問題ない気もする。

ここまでできれば後は簡単で(といいつつエラーを出しまくったが)、WordPress CODEXのデータベース概要を見ながら、欲しい情報を取り出すクエリを書き、ラッパー関数からクエリの結果をもらい、整形するのみ。
こっから後で出したエラーは行末の;忘れたとか文字列結合演算子.を飛ばしてたとかそんなんばっか。
SQLのWHERE句の中でのNOTを使おうとして詰まったが、!=に書き直したらあっさり動いたので満足している。

もうひとつ微妙なエラーがあったのを思い出した。
if($array[x]=query($query_strings)){}の形式でif文を構成した時、queryの結果がNULLだと、 if文の中は実行されないが、変数にFALSEが入るなんでorz
結局elseの中でunset($array[x]);しましたよ。妙な仕様だなぁ。
たしか$array[]だとちゃんと代入されないんですよねー。
添え字を指定するとミョーなことが起きるorz
ご注意ください(誰が?)。

さて次に私が請け負った作業がCSSの調整。ページの大枠と素材は某氏が既に完成させていて、私は調整だけ。
とはいえクロスブラウザにまつわる問題…と言うよりIE7とIE6で表示が崩れるのを何とかする、つー話だったので、辛かった。
何しろCSSの何がどう影響を与えているのか見当もつかなんだ。
真IE6の挙動は奇怪です…。(と言いつつ我が家のデスクトップのIEはver6ですが)
今回初めてIE8を見直しましたよ。ええ。標準準拠は素晴らしい。
結局どんなところで躓いていたかと言うと、

  • XHTMLのxml宣言がひっかっかっていた。
  • CSSでfloat指定したセレクタに、widthとpaddingを同時指定するとバグ、に引っかかっていた。
詳しくは、前者はDOCTYPE宣言がブラウザに与える影響と言う話で、 原因が分からないので兎に角ggrks状態だった私が、ヤケクソでIE opera firefox css 崩れるとかそんなワードで 検索してたどり着いたページにあったのをみつけて、藁にすがってみたらこれだった、と言うもの。
これを修正するまでIE6では絶望的にレイアウトが崩壊していた。いわゆる互換モードだったわけ。
互換モードだとそれこそCSS Hackでもしない限り、まともな表示は望めない。
後者は、IE6 float CSS 上下 崩れるとかで検索して出てきたページで見つけたもの。
ほかのサイトでも見てた内容のような気はするけど(IE6はバグのワンダーランドなので解説サイトは山ほどある)、 この時点まで作ってるサイトのCSSが引っかかってるとは気づいてなかった訳です。
どういうことかといえば、aタグにIDを割振ってあって、CSSの中でaタグすべてについてpaddingを設定しており、 あるIDの要素についてwidthを設定してあった為に、ぱっと見分からないけれども特定の要素に対してどちらも設定されていた、と言う話。
widthがないといかんともし難いので、paddingを削除。
書いてしまえばこれだけなんだけど、なにしろどこで何が起きてるのかさっぱり予想がつかないので、先が見えない。
先の見えないデバッグは心に傷を残します(笑)。
自分で書いたコードならどこでエラーが起きてるか見当が付くし、テストコード挟めばハッキリ分かるので良いんですが…。

JavaScriptもそうですが、ブラウザの非互換性は本当にもうどうしようか、と途方にくれてしまいますね。
もうブラウザなんて一種類で良いよ!!!とか思いましたとも(危険発言)。
そういう私がメインで使っているブラウザはOpera(シェア2%以下)だったりするんですが。
IE6のシェアも今年夏時点でまだ24%あると言うことですから、決して疎かには出来ない…。


クロスブラウザ問題は、永遠に、不滅です。

木曜日, 8 月 13th, 2009

暫く前から見聞伝本家はAtahualpa342で動いている。のだが…。
Atahualpa342導入時、私は大いに期待していた。
特に「CSSとJavaScriptの外部化」にはちょー心躍ったのだ。
CSSを外部化するコードをatahualpaのheader.phpに書き込む、なんて邪道は要らなくなるぜ!
と無邪気に喜んだのだが…。
糠喜びでしたorz

まぁ導入する時にちゃんと調べて置けよ、って話ですけどねー。
とりあえず動作確認しただけで安心しちゃったんですよ。
気付いたのは、8/6に朝倉氏の指摘があってでした。
「何かAtahualpa新しくなってから動作遅くね?」@駒場図書館
うーんマジで?それは困るな…。と思いつつとりあえずSafariのWebInspectorを起動。
確かにどう考えても遅くなっている。しかもリロードしても殆ど速度が上がらない。
その上遅いのは件のCSSとJSっぽい。ナゼ?
というかリロードして速くならないのだから一々生成しているとしか思えないが…。
先ずはここから、とページソースを見てみれば外部CSSの記述には?bfa_ata_file=cssの文字が。
モロまんまクエリじゃねーか!
これでアクセスの度生成している疑いは濃厚を超えて限りなく黒に近いグレーに。
しかし未だ逮捕状は降りない。物証主義だから。
wpmu/?bfa_ata_file=cssにもアクセスしてみるが、圧縮(空白文字を除去)されたCSSが表示される。
アクセスにかかるラグからするとやはり生成が行われている気配が濃厚だが、詳しく調べる時間が無かった。
続きは家に帰ってから、という事でバイトに出撃する。

さて帰宅して第二ラウンド。手始めにatahualpa342の配下でbfa_ata_fileを含むファイルを洗う。
functions.phpが何かやっているので見てみる。
思えばここで道を踏み外した…。
190行目付近の記述に引っかかり、add_filter()の動作を追うべくWPMU本体のソースコードの山へ…。
この期に及んでもfilter_hookとaction_hookの辺りが良く分かってないんです。
やっぱ使ってないからかなぁ…。
なんて愚痴?はともかく、ソースを掻き分け、query_varsにbfa_ata_fileを登録しているらしい、ということは分かった。
しかしその登録されたクエリがどうやって解釈されるのかが良く分からない…。
そういうコードはどこから見つければいいんだ???などとよく分からない悩み。
この辺で8/8位ですね。この後煮詰まり感からしばし中断。

第三し…おっとっと。こんな所でゼミ長を喜ばせている場合ではないのだ(そこ?
第三ラウンドはなんと今朝から始まった。アレだけ煮詰まってたのに…。
解決する時は案外あっさり解決するものである。
今日はなんだか朝っぱらからこの間近所の図書館で借りたJavaScriptの参考書を眺めていたのだが、そしたらなんだか当たり前のことに気付いたのだ。
余談だが、私がこの手の参考書を読むのは珍しい。
大変いい世の中になったもので、大抵の言語(※もちろんコンピュータ言語デスヨ)のリファレンスやサンプルは、Webだけで手に入ってしまう。
話を戻すと、気付いたのは「結局CSSを出力する部分はAtahualpaと同じタイミングでインストールされたはずである」、つまりatahualpa342の配下に最終的に出力するためのコードが含まれているはず。
当たり前の話なんですがねぇ…。ここのところゲームとかゲームとかゲームとかに現を抜かしていたせいか、頭があんまり動いていなかったらしい。
でatahualpa342でgrepしたら「CSS」という語を含んだファイルが見つかる見つかる。
やっぱり怪しいのでfunctions.phpをあけようとフォルダを開くと…。
css.phpってファイルがあるじゃーありませんか。どう見てもこいつだろw
ナゼ最初に気付かない自分。
開けて見るとやっぱりコイツデスヨ。セットでjs.phpってヤツも居るしね…。
さてどこからこれが呼び出されているのかなーとgrepすると、functionsの私が捕まってた行から30行も下じゃない所にあったし。
細かい経緯は不明だけどbfa_css_js_redirect()って関数がtemplate_redirectってアクションにフックされているので、こいつのせいだろ。
さて結局の所、atahualpa342はCSS/JSの外部化はするが外部ファイル化はしないということが判明したわけです。
なんというか中途半端な機能だな…。これじゃーヘッダを見栄えよくする以上の意味は無いではないか。

つまるところ、旧Atahualpaとほぼ同等の手続きをとってCSSをファイルとして保存せにゃなるまい、というのが結論。
CSS関連だけ一ファイルにまとまっているのは改造しやすいけど…。Atahualpaが更新されるたびにこれをやるのかと思うとちょっと気が重いぜorz
さて改造しますか…。ついでにzip圧縮も試してみようかな…。でも圧縮ファイルが受け取れるブラウザかどうかってどうやって判別するんでしょうか?
投げっ放しでとりあえず完。

WPMU覚書1

木曜日, 7 月 16th, 2009

さて今回から数回のシリーズで、私が知る限りの知識範囲ではあるが、WordPressMUの構造と動作について書いて行きたいと思う。
今回は概要と、データベース構造くらいで。まぁ9割方自分用覚書ですが。

    目次
  1. でWordPressMUって何よ
  2. 概要
  3. データベース構成

でWordPressMUって何よ

まずはここから(しつこいね)。
まぁ公式(系)を見ましょうか。
WordPress MU、WordPressµ とは、ブログアプリケーション WordPress の複数ユーザ版(multi-user version)です。
ほうほう。つまりWordPressを複数ユーザ対応にしたものなのね。でWordPressは?
WordPress (ワードプレス) は、オープンソースのブログ/CMS プラットフォームです。
CMSはContent Management Systemだから、まとめると、複数ユーザで使う、ブログ/Webコンテンツを作成&管理するための土台のアプリケーションと言った所?プラットフォームって日本語にし難いですねぇ。
とにかく、今現在の見聞伝はこのシステムを利用しています。
便宜的に私が”本家”と呼んでいる部分ではCMSとして、他の個人ブログ(このブログとか)ではブログプラットフォームアプリケーションとして、ですね。
うーん英語をカタカナで表現すると、やたら長くなるよなー。Blog Platform Applicationだもんなー。
戯言は置いといて、次行きましょうか。
WordPressの何がいいのかと言えば、Webページの作成や編集がお手軽にできる(一応強調しておきますが、これでもかなりお手軽ですよ!)ので、グループでやる時にページ作成の負担を分担できる、というのが見聞伝で採用している理由、だと思います。
と言う訳で、皆さんがんがん記事を作って下さい(お前もな)。
あとは開発者(特にサードパーティ)が非常に多いので、様々な機能がプラグインの形で公開されており、それを利用できる、と言うのも大きな魅力でした。
とはいえ、大抵のプラグインはMUではなくて、ただのWordPress向けに作られて居るので、そのままでは動かないこともしばしばですが、それでも0から作るのに比べれば、遥かに省力です。
あとは基本的に内容とデザインが分離されているため、デザインの改造がやり易いとか、サイト全体的なデザイン設計/更新が簡単だ、と言ったことが上げられるでしょうか。
このサイト全体のデザイン設計をWordPressテーマと呼んでいる訳ですね。
そうそう、大事なことを忘れていましたが、WordPressはGPLです。改変や再配布も自由なライセンスです。そしてタダ!うーん素晴らしい。
(GPLは必ずしもタダであることは意味しません…ほとんどの場合はそうですが。)

概要

さてそんなWordPressMUですが、

  • Apache:Webサーバ
  • MySQL:RDBMS
  • PHP:CGI
が動作する環境が必要です。
これらのソフトのバージョンですが基本的には新しい方がいいです。しかしWPMUのバージョンによってこまごまと違う様なので、お気をつけ下さい(だれが?)。
ものすごーくおおざっぱに言うと、WordPressMUは、HTTPリクエストを受けると、
  1. Apacheのmod_rewriteの機能を利用して、あるディレクトリ以下へのアクセスを、全てwp-content/index.phpに集める
  2. 当初のリクエストURIから、どのブログにアクセスしているか判定
  3. 当初のURI(パーマリンク)をブログ毎に設定されたrewrite_rulesに基づいてクエリ形式(?year=2009&month=5&day=13&name=…とかそんなの)に変換
  4. クエリに基づいて、SQL文を生成し、データベースから表示する情報を取り出す(複数の投稿やページの時もある)
  5. 取り出して来た情報を、整形をして表示
と言うことをやっているらしい。細かい所把握してないことも多いけど、どうもこんな感じみたいですハイ。
今後も出てくると思うので、ここでWordPressで使う用語についてちょっと書いて置きます。
極めて誤解を招き易いことに、WordPressではややこしい用語を使います。言わばWordPress用語ですね。
投稿(Post)
WordPressで使われる、最も一般的な記事の形式。主に時事性があること-時とともに価値を減ずる様な情報とか-を記述することを意図している。メインページに表示される。
ページ(Page)
WordPressでは、通常の意味とは異なり静的な情報を保持しておくための記事の形式。階層性を持たせることも出来る。
テーマ(Theme)
サイト全体のデザインを決定するもの。各投稿やページのデータはデータベースに保持されているので、それをWebページとして表示するために使われる。
カテゴリ(Category)
記事などが所属するグループ。階層性を持たせられる。二重に所属することも可能。
タグ(Tag)
記事などに付けるキーワード。カテゴリと異なり、階層性を持たせることは出来ない。幾らでも付けられるのはカテゴリと同じ。
なんか記述がちぐはぐですが、まぁこんな所でご勘弁を。

データベース構成

WPMUのデータベース構成ですが、基本的には以下の様になっています。

  • 以下のテーブルはブログ毎に存在
    • comments::コメントを保存
    • links::リンクを保存?よく見てない
    • options::ブログの設定情報を保存している。超重要
    • postmeta::投稿のメタデータ
    • posts::投稿そのもの。実際はページも投稿も添付ファイルの情報も一緒にここに保存されている。
    • terms::タグやカテゴリーに使われた単語を保持してIDを振っている
    • term_relationships::termsに保存された単語が、どの投稿やページと関連を持っているかを保持している
    • term_taxonomy::termsに保存された単語を分類する、分類法を保持している。categoryなのか、tagなのか、とか。
  • 以下のテーブルはサイト全体で一つ
    • users::サイトに登録されたユーザの情報を保持しているテーブル
    • usermeta::ユーザの権限や、ブログではなくユーザに属する設定情報が保持されている
    • site::ドメインが保持されている。用途がいまいち分からない
    • sitemeta::サイト全体の設定。アップロード可能なファイルタイプとか、最大アップロード容量とか、利用可能テーマとか、過去のrss?とかを保持しているようだ
    • blogs::サイトにどんなブログがあるかを保持している
    • signups::良く分からない。使われていない?
    • registration_log::ユーザが承認されたことが記録されている
    • blog_versions::良く分からない。使われていない?
    • sitecategories::サイト全体で使ったtermが保持されている。実際にはcategoryに分類されないものも全部入っているので、この名前はどうかと
あ、あと前にも紹介しましたが、WordPressのデータベース構成はここを参照しましょう。なにしろコードの99%同じと言うだけあって、ほとんど同じです。
WPのデータの保存の仕方は、user friendlyというか、administrator friendlyと言うか、かなり「そのまま」です。フィールド名やキー名は見れば大体意味が分かりますし、保持されているデータも、人間の可読性を意識したものがほとんどです。
ちょこちょことデータベースから直接データをいじることを想定してあるんでしょうか。
まぁコーディングし易いってのが一番の理由ですよね…。

今回はこんな所で。既に十二分に長いし。次回からはリクエスト処理-というか呼び出し関係-を順番に辿って行きましょうか。自分のためにもなりそうだし。

さらば700行

金曜日, 6 月 19th, 2009

さてAtahualpaの改造だが、一応当初の予定通りの動作をするものが出来た。
ソースを見てもらえば、以前はヘッダにあった長大(700行を越える)なCSSが無くなって、代わりにbfa_ata_style.cssとか、そんな名前のファイルが読み込まれる様になったのが分かると思う。
私が行った改造の具体的な内容及び手順は以下。

  1. Atahualpaの設定が更新されたことを記録するタイムスタンプをadd_optionで用意(実は必要ないが、念のため)
  2. Atahualpaのフォルダ直下にある、functions.phpを開けて、update_option()を呼び出している部分を探す
  3. 上記部分(Save Settingsを押すと呼び出される関数)の末尾に、タイムスタンプをupdate_option('option_name',date('YmdHis'))で記録する部分を追加
  4. header.phpに、カテゴリ判別してスタイルシートの名前を生成するコードを追加(以前からカテゴリ判別してCSSを書き換えていた)
  5. ファイル名を$filenameとすると、filemtime( TEMPLATEPATH . $filename)と、先ほどのタイムスタンプを比較して、タイムスタンプが大きければCSSを再生成する
  6. CSS再生成は具体的には以前のCSSを書き出していた部分の前後から、<style></style>を取り除き、前後にob_start()ob_get_clean()を配置、 バッファリングした内容を変数で受けて、ファイルに保存($filepointer=fopen($filename,'wb+'); fwrite($filepointer,$content);)
  7. 最後に、再生成をしてもしなくても、<link rel='stylesheet' href='春眠に限らず暁を覚えず'>を吐くように記述。

しかし誤算があった…。本家ブログだけでAtahualpaを使っているつもりだったのだが、そうではなかった。
木許さんのブログでもAtahualpaを使っていたのでした…。
複数のブログでAtahualpaを使うと、CSSが一種類しか生成されていないので片方の設定が更新されると、もう片方で読み込まれるCSS(同じファイル)が変わってしまい、結果奇妙なことが起きるのは想像がついていたのだが、「確か他にAtahualpa使ってる人はいないよなー、じゃあブログ判別ルーチンは書かなくていいや〜」と適当に書いた所、案の定衝突が起きました…。
現在はまずglobal $blog_idを呼び出してブログ判別を行い、更にその後カテゴリ判別をしています。
カテゴリとカテゴリIDの対応は、当然ブログ毎に違うので、この判定ルーチンはブログID毎に用意しなくてはいけないのが難点です。
今は本家以外ではカテゴリ判別を行っていないので特に問題はないけど、他でも行おうとすると中々面倒なことに。
引数としてブログIDとカテゴリIDを渡すと、ファイル名を生成するみたいな専用関数を書かないと収拾が着きませんな。
$filename=cr_fname($blog_id,$cats)みたいな。
しかも実際に吐き出すCSSの内容も変更しなくてはいけないので、中々難儀。
そうなったら変更に合わせた内容をoptionに格納してしまうぐらい必要だなー。
要らぬ心配(?)をするのでありました。

あたわるぱ。

水曜日, 6 月 10th, 2009

さてお約束通りCODINGネタ。
前回のキャッシュする作戦は一応成功したらしく、運悪く再生成する場合には、顕著に表示が遅くなる。
まぁ自己満足ですけどね。
でもアルゴリズム的に無駄な所を一カ所発見してショーック。
make_update_list()は、引数を4つ取っているのですが、当然どんな引数が渡されるかは実行時にならないと分かりません。 つまり、前回の引数と違っていたら、動作を変えなくてはいけないので、キャッシュを破棄して再生成しなくてはいけない。
そこで、再生成する度にそのとき使った引数をデータベース上に保存することにしたのですがー。
別に個々の引数が必要な訳じゃないんだから、まとめて判定してまとめて保存しておきゃーいいのに気付かず、 いちいち引数四つを個別に更新しているか判定、さらに個別に保存してまつた…。
後で直します…。

さて次の私の(自己満足の)ターゲットは、本家のあの長〜いヘッダ。アレどうにかしたい。CSSを外部ファイル化したい。とてもしたい。
その為のHeadClearnerってプラグインもあるんだけど、諸般の事情により使えないので、自作(!)しちゃえ。
自作と言う程のことは出来ないけど、Atahualpaのheader.phpを操作(ってかhack)すれば、ページに出力されるCSSが変更できるのは実証済みなので、 その出力を(場合によって)ファイルに保存しておけばいいのです。で、<style rel=”???.css”>とか書き込めば、うまくいく筈ですよね?
同じCSSを使っているページなら、外部CSSファイルを共有して、ブラウザ側でキャッシュしてくれるので、そう言う意味でもサーバ側もクライアント側も嬉しい筈。

で、方針。echoをリダイレクトします。出来るのかチェックした訳じゃないんだけど、これだけCそっくりなんだったら、標準出力への出力をリダイレクトする機能も多分あるでしょ。
CSSをモーレツに出力し始める手前で、条件分岐して、ファイルの更新日時と、タイムスタンプを比較して、もし設定が変わっているようなら、ファイル出力をやり直します。
そうでないなら素通しで。あ、あとカテゴリ毎に違うヘッダを適用するって、Atahualpaじゃ出来ないんでしょうか。Atahualpaの設定項目のほとんどは、CSSの形でheader.phpで呼び出されてしまうので、 header.phpの内容をどうにかしない限りは、どうにもならない。
今はheader.php内にカテゴリ判別を付加して強引に動かしているのですが…。
そんな感じ。いつ取りかかれるやら…。Atahualpa設定項目多過ぎですよ(泣)。

キャッシングは計画的に。

月曜日, 6 月 8th, 2009

いやはや、中々儘ならぬものと言うか、コーディングでよくあるのはうっかりミスである。
今回の、make_update_list高速化計画こと、caching(って言うのかな…)しようぜ!計画は、一応成功裏に終わったのであるが、躓いた所を列挙してみよう。

  1. OSの違いに泣くある程度の部分はローカルでテストをしたのだが、前にも書いたと思うが私の環境はWinXP+Apache2.2+PHP5.2+MySQL5.0である。Unixと違ってパーミッションが無くて云々て言う話は前もしたような気がする。今回はfilemtimeなる関数を使おうとしたのだが、これはWinでは実装されていないそうだ。ダメか。ついでにmb関数群もダメらしい。それは無いだろ。おいおい。という訳で、結局ローカルではプラグイン丸ごとの試験は出来なかったorz
    これはUnixマシンを所有せよとの神のお告げか!?(どーゆー神だ&金はあるのか)
  2. array_splice()は中々曲者であるというのも、添え字が保存されないので、foreach($array as $key => $element)の中で呼ぶと、array_splice()した部分以降の、$keyと$elementの関係がずれてしまうらしいのだ。あるいは、条件式で( $number && $x != 1)みたいなことをやったのだが、つまり$numberが0か空ではなく、しかも別の変数$xが1でないという条件式なのだが、これが意図した通りに解釈されなかった可能性もある。ちゃんと切り分けて実証はしていない。とにかくarray_spliceするループを分離してしまったら収まったので、それでよしとした。
  3. 定義リストを閉じ忘れたトップページのソースを見てもらえば分かるが、”ゼミ生ブログ集”の部分は、DIVタグで囲われた定義リスト(DL)になっている。んで定義リストを閉じる部分を吐き出し忘れた(てへ)。直ぐ気付いたが…。
  4. パスを間違えたのに気付かなかった。キャッシュを保存しているのだが、いくらやっても上手く保存できている様子が無い。この間実験した時には上手く行ったのに、何がいけないんだ…と頭を抱えていたら、スラッシュが一本足りず、存在しないディレクトリにあるファイルを開こうと頑張っていた。そらー開きませんわ。書き込めませんわ。
あとは、データベース上のブログオプションに、一部のデータを保存したくて、この間も紹介した我等がバイブルを参照していたのだが、そこでget_last_updated()なる関数を発見してしまったorz
コレ、私が苦労してデータベースにクエリ発行して取得していた情報を取ってくる関数じゃありませんか。徒労感が…。
とは言え、幾つかのデータは結局データベースにアクセスしないと、用意された関数群からでは取得できそうに無い(?)ので、まぁいいかと自分を慰めています。ハイ。或いは灰。
まぁそもそもこの関数を見つけられたのだって、関数名と引数を見れば大体どんな関数なのか見当がつくという、WPMU(あるいはWP)での命名作法に慣れてきた証ではあります。喜びましょう。悲しみましょう。
これできっと恐らく多分(随分自信ないんだな)、ブログが更新された直後にKENBUNDENトップを訪れた不運な人意外は、キャッシュされたデータでリストが作成されるので、随分表示が速くなる…といいなぁ…。

オマケ:この記事の投稿に使っているstrongタグの閉じタグを、一箇所storngと表記してしまって、変な投稿をしてしまったのは内緒である。

奮闘記02

月曜日, 5 月 18th, 2009

えーと結論を申しますと…インストールできました。 ずばり、phpからmysqlを呼び出せるように設定してませんでしたorz

何をやってるんだか…。ApacheとPHPをインストールした時に、設定を後回しにして失敗したな。まぁローカルへのインストールは成功~。Unixと違ってWinではファイルのパーミッションとかもないし、メンド臭くないですね(セキュリティ意識のない奴め)。これからいじくるぞー。

奮闘記01

月曜日, 5 月 18th, 2009

さて私が何と格闘したかと言えば、WordPressMUである。 なんかもう定番の観すらあるね。強敵である。 そもそもデータベース初心者でPHPも大して使ったこと無いヤツが、 WordPressのような巨大なPHPアプリを読み解こうと言うのが オコガマシイのではあるけれども。

今回の課題は、ローカルにWPMUをインストールである。結論から言うと未だ成功していない。 そのものズバリのローカルPCにWordPressMUをインストールなんてページがあったので、 大分参考にした。何でそんなことするの?と言えば、サーバ上ではセキュリティ上の理由から(当然ながら)エラー表示は抑制されてしまう。 しかし初心者の私はエラーログとかエラーメッセージがないと、どこでエラーってるのかよくわからん。 サーバの設定を書き換えるのは(レンタルサーバなので)無理だから、じゃ〜ローカルにインストールしてみますか。 という単純な発想。そこでこんなに詰まるとは…!

私がやった手順を一応書いて置こう。間違いを指摘してくれる人とか現れないかなw 小文字で書いた所は適当に書き換えてます。 因に環境はWinXP、Apache2.2.11、PHP5.2.8、MySQL5.0.77です。細かいVer情報追記。

  1. ソースと日本語化パッチ?をダウンロードして、ドキュメントルート下のサブディレクトリに解凍
  2. MySQLでCREATE DATABASE databasename DEFAULT CHARACTER SET utf8;
  3. MySQLで管理者を追加(GRANT ALL ON *.* TO username@”%” IDENTIFIED BY ‘password’ WITH GRANT OPTION)
  4. もう一丁管理者を追加(上記ページの情報より)GRANT ALL ON *.* TO username@localhost IDENTIFIED BY ‘password’ WITH GRANT OPTION
  5. あーもしかしてFLUSH PRIVILEGESし忘れたかも?
  6. C:\WINDOWS\system32\drivers\etc\hostsを開いて、127.0.0.1にwp.muという別名を設定
  7. DocumentRootに直接インストールしたい訳ではないので、DocumentRootはhtdocsにしておく
  8. Apache再起動
  9. http://wp.mu/dirname/index.phpにアクセス(インストールスクリプトまでは動く)
  10. Submitしても凍りついて先に進まない(ブラウザがフリーズとかではない)

その後の原因究明活動〜。

  1. 取り敢えず複数回同じ動作を行う
  2. ダメなので、MySQLとApacheをつけたり消したり
  3. ダメなので、ProcessExplorerで監視しながらやってみる
  4. どうやらMySQLのモジュールが動いていないとか言う訳ではないらしい(瞬間的にCPU使用量が増加している)
  5. お手上げーなのでフォーラムを覗く
  6. mail関数周りのせい?
  7. しかしデータベースに新しいテーブルが作成されていない!…ということはそれ以前の問題か…。

結論:ワカンネ 家に帰ったらエラーログを洗おう…。PHPのエラーならエラーメッセージが出て実行停止するはずだしなー。 あとはこのへんを参考にして、データベース自体を一回消去してみるべき? でも何も書き込まれてないんだが…。いっそrootユーザでアクセスしてしまうかw そもそもPHPでMySQLが使える様に設定できてないとか?いやいや。

    対処方針
  1. php.iniでMySQLが使える設定になっているかチェック
  2. FLUSH PRIVILEGESしてみる(多分無意味)
  3. rootユーザでアクセスしてみる
  4. mail関数周りの設定を変えてみる
  5. データベースを一度消去(実害はないので)
とりあえず今考えられる対処法はこれくらいかー。エラーログをちゃんと読まないとダメだなー。 では次回朗報を書けることを祈りつつ。

窪田-タイトルは短く本文は長く-史朗