広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog
「ここにブログの名前を入れます」は更新を終了しました。記事はすべて新ブログ「Big Bang」に移転済みです。記事のタイトルをクリックすると新ブログの該当記事に移動します。そちらでお楽しみください。

カテゴリー別アーカイブ  :  

WordPressマルチサイトでエラー! "The site you have requested is not installed properly."

WordPressを使って、マルチサイトにしていたブログが突然アクセスできなくなった。正確にはサーバーとはアクセス出来ている。ただしブラウザには、ブログではなく、こんなメッセージが表示される。

The site you have requested is not installed properly. Please contact the system administrator.

Googleの翻訳にかけるとこういう意味だ。「あなたが要求したサイトが正しくインストールされていません。システム管理者に連絡してください。」

ふざけるな。俺がシステム管理者なんだよ!

WordPressのマルチサイトだけに起こるエラー

調べたところ、これはマルチサイト特有のエラーらしいです。もっとも参考になったのは「Labor Of Love - Laughing Out Loud」さんの記事。

とりあえず、PhpMyAdminで、全テーブルにチェックを入れ「テーブルを最適化」。 上手くいきました。元通り、エラーなく表示することができました。

早速、テーブルの最適化をやってみます。ただし、PhpMyAdminは入れていないのでコマンド処理。-u の後のuser_nameにユーザー名、database_nameにデータベース名を入れます。

mysqlcheck -o -u user_name dabatabe_name -p

こう入力してEnterを押すと「Enter password:」と表示されるので、パスワードを入力して、もう一度 Enter。するとテーブルの最適化が始まります。

xxxxxxxxxx.wp_blog_versions                   Table is already up to date
xxxxxxxxxx.wp_blogs                           OK
xxxxxxxxxx.wp_bp_activity                     OK
xxxxxxxxxx.wp_bp_activity_meta                OK
.............(省略)

最適化は数秒で終了。早速ブラウザをリロード!無事にブログが表示されました。

そういえば今年に入って、これとは別のマルチサイトでアクセス不能になったことがあります。その時はログイン出来たので違う原因かもしれませんが、スパムを全部削除したら直りました。データベースはマメに整理した方が良さそうです。

うちのブログはまだ、復旧しただけですが「Labor Of Love - Laughing Out Loud」さんの記事には再発防止のための対策も書かれています。

新ブログ「Big Bang」で続きを読む

PDOでストアドプロシージャの結果取得

一つ前の記事で書いたように、MySQLのストアドプロシージャを使ったアプリを書いたんですが、
ストアドプロシージャで作ったデータをPHPのPDOでどう取得すればいいのかわからなかったので覚書き。

参考までにつくったのは下のものです。ちなみに「ふっかつのじゅもん」はアクセス誘導のために
別の場所に書いてあったんですが、ここにも書いておきます。「モウイッカイ」です。


ハロウィンの運命




入力したデータをRESTで送って、返却値をJavaScriptで黄色い枠内に書き込んでいます。

送信するデータは以下のとおりです。

  • id : 結果表示場所のid
  • hidden : 送信ボタンの上に追加する表示部分のid
  • type : halloween、xmas、otherのどれかを指定(他でも使いまわすため)
  • name : 入力された名前
  • pass : ふっかつのじゅもん(オプション)

上記パラメータを受信したサーバー側で、JavaScriptを生成。それを送り返して来ます。
その戻ってきたデータを読み込んだブラウザで、スクリプトが作動して結果が表示されます。

サーバー側のPHPソースですが、パラメーター取得方法とエラー処理、それから生成されるJavaScriptに関しては、今回のテーマと違うので省略します。

プロシージャの仕様は以下のとおりです。

fortune(OUT _string VARCHAR(2048), IN _user VARCHAR(128), IN _type VARCHAR(128), IN _pass VARCHAR(1024));

コマンドで使うときは以下のカンジです。

call fortune(@str, "username", "halloween", "password");
SELECT @str;

以下、PDOでストアドプロシージャのデータを取得する部分のソースです。

ちなみにコメントアウトしてある3行ですが、環境によって必要であったり、なかったりします。
実際に設置したのはCORESERVERですが、CORESERVERでは、ないと文字化けしますのでコメントアウトは外して有効にしてあります。ただ、ローカルのLinux mintにaptで構築した環境では不要でした。

$host="localhost";
$dbname="xxxxxxxxxxxxx";
$username="xxxxxxxxxxxxx";
$password="xxxxxxxxxxxxx";

$base="var pos=document.getElementById('%s');以下省略";

try{
	$pdo=new PDO("mysql:host=$host;dbname=$dbname",$username,$password);

	//以下の3行は環境によっては必要
	//$pdo->query("SET character_set_client=utf8");
	//$pdo->query("SET character_set_connection=utf8");
	//$pdo->query("SET character_set_results=utf8");

	$stmt=$pdo->prepare("call fortune(@str,?,?,?)");

	$stmt->bindValue(1,$name,PDO::PARAM_STR);
	$stmt->bindValue(2,$type,PDO::PARAM_STR);
	$stmt->bindValue(3,$pass,PDO::PARAM_STR);

 	$stmt->execute();

	header("Content-type: text/javascript; charset=UTF-8");
	printf($base,$id,$pdo->query('SELECT @str')->fetchColumn());
}catch(PDOException $e){
	header("HTTP/1.1 500 Internal Server Error");
}

$pdo=null;

prepareを使って処理するということがわかれば簡単なのですが、そこにたどり着くまで苦労しました。

bindValueの第3引数には、第2引数の型を指定します。
今回はたまたま文字列型だけでしたが、PHPのマニュアルページに色々な型が書いてあります。

新ブログ「Big Bang」で続きを読む

PHP implodeで簡単表作成

CodeZineの「PDOでサクサクDB開発」という記事に、下のコードが掲載されていた。

try {
    $pdo = new PDO("mysql:host=localhost; dbname=pdotest",
                   "root", "pass");
    $stmt = $pdo->query("SELECT * FROM CD");

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        echo implode(", ", $row) . PHP_EOL;
    }
} catch (PDOException $e){
    var_dump($e->getMessage());
}

$pdo = null;

この中のimplodeという関数を知らなかった。

implodeとは何ぞや?」と思い、調べてみたらチョー簡単にHTMLのテーブルが作れることがわかった。

新ブログ「Big Bang」で続きを読む