Category Archives: CMS

CMS プログラミング

WordPressなどのソース一式をzip圧縮してダウンロードする方法

Published by:

レンタルサーバーでWordPressなどのCMSを動かしている方は数多くいるかと思いますが、sshやtelnetアクセスができないサーバーも意外に多くあります。
その場合、FTPで時間をかけて何百、何千というファイルをアップロード、ダウンロードしなければいけません。

アップロードについてはすでに「unzip.zip」という素晴らしいツールがありますので、みなさまそちらを使いましょう。

今回ここで紹介するのは、zipで圧縮してまとめてダウンロードする方法です。

zipdownload.zip

上のプログラムをGET&解凍して出て来るzipdownload.phpを、まとめてダウンロードしたいディレクトリの中にアップロードします。
WordPressの場合は、wp-contentとか、wp-config.phpなどのファイルがあるところにアップすればよいかと思います。

ここまで出来れば、後はブラウザで http://xxx/zipdownload.php のようにリクエストしてください!
download.zipという名前でダウンロードが開始されます。

ダウンロードが終わった後に zipdownload.php を必ず削除してくださいねー

CMS

Contact Form 7で確認用メールアドレスの入力フォームを加える方法

Published by:

Contact Form 7はお問い合わせフォームを用意するのに、非常に便利なWordPressプラグインです。これまでWordPressを使ったサイトで、このプラグインを入れなかったことは一回もありません。

今回確認用メールアドレスを入力欄として設けなくてはならなくて調べたのですが、意外にいい方法が見つからなかったので、自分で作ってみました。

functions.phpに下記コードを追加(UTF-8で保存すること!)

<?php
add_filter( 'wpcf7_validate_email', 'wpcf7_text_validation_filter_extend', 11, 2 );
add_filter( 'wpcf7_validate_email*', 'wpcf7_text_validation_filter_extend', 11, 2 );
function wpcf7_text_validation_filter_extend( $result, $tag ) {
    $type = $tag['type'];
    $name = $tag['name'];
    $_POST[$name] = trim( strtr( (string) $_POST[$name], "\n", " " ) );
    if ( 'email' == $type || 'email*' == $type ) {
        if (preg_match('/(.*)_confirm$/', $name, $matches)){
            $target_name = $matches[1];
            if ($_POST[$name] != $_POST[$target_name]) {
                if (method_exists($result, 'invalidate')) {
                    $result->invalidate( $tag,"確認用のメールアドレスが一致していません");
                } else {
                    $result['valid'] = false;
                    $result['reason'][$name] = '確認用のメールアドレスが一致していません';
                }
            }
        }
    }
    return $result;
}
?>

※2015/3/4に修正しました。まつしたさん、情報ありがとうございます!

Contact Form 7の設定画面では次のようなフォームを記述

<p>メールアドレス<br />
[email* your-email] </p>

<p>メールアドレス (確認用)<br />
[email* your-email_confirm] </p>

これで確認用メールアドレスが実現できますよ~

CMS 発表、ニュース

A8minをMovable Typeで使うための導入方法をまとめました

Published by:

A8minのインストールと使い方(Movable TypeでA8.netバナー表示)

実は、A8minはWordPressプラグインに限らず、PHPが動くサーバーであればどこでも動くんです。
ということで、とりあえずMovable TypeでA8.netのバナーを表示する方法をまとめました。

フリー版のA8minでも、もちろんMovable Typeと一緒に使えますので、ぜひお試しください。



CMS コンピュータ

s13.coreserverへDBD::mysqlをインストールしてMovable Typeする

Published by:

ちょっと試しに、かなり久々にMovable Typeを使ってみようと思い、Movable Type(オープンソース版)をインストールしようとしたところ、システムにDBD::mysqlがインストールされていないのでDBにMySQLを使えないというエラーが・・・

なんだかなあと検索してみたら、「s13.coreserverのDBD::mysqlが動いていない」という記事がありました。

引越しが少々面倒ですが、このような場合、他のサーバに移動するのが早い解決方法のようですね。より負荷の少ないサーバで試したところ、ちゃんとDBD::mysqlも問題なく動いていました。
s13coreがハズレだったようでした。

(; ; うちのサーバー、ハズレだったようですよ。

ちくしょーと思いながら確認したところ、DBD::mysqlはインストールされていて、リンクしているMySQLのライブラリのバージョンが異なっていました。

■リンク内容をチェック!
xxx@s13:~> ldd /usr/local/lib/perl5/site_perl/5.8.8/i686-linux/auto/DBD/mysql/mysql.so
linux-gate.so.1 => (0xffffe000)
libmysqlclient.so.15 => not found ←これ
libz.so.1 => /usr/local/lib/libz.so.1 (0x40022000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40035000)
libnsl.so.1 => /lib/libnsl.so.1 (0x40068000)
libm.so.6 => /lib/tls/libm.so.6 (0x4007e000)
libc.so.6 => /lib/tls/libc.so.6 (0x400a5000)
/lib/ld-linux.so.2 (0x80000000)

■MySQLのライブラリもチェック!
xxx@s13:~> ls /usr/local/mysql/lib/mysql/libmysqlclient.so*
/usr/local/mysql/lib/mysql/libmysqlclient.so
/usr/local/mysql/lib/mysql/libmysqlclient.so.16 ←これ
/usr/local/mysql/lib/mysql/libmysqlclient.so.16.0.0

おそらくcoreserverの中の人が、別サーバーからコピペでインストールしたんでしょうね。(ー_ーメ)

MySQLのライブラリを別途インストールしてLD_LIBRARY_PATHを通すことも出来そうですが、DBD::mysqlを自前インストールすることにしました。

詳細な手順はこれ!
xxx@s13:~> mkdir server_src
xxx@s13:~> cd server_src/
xxx@s13:~> wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.011.tar.gz
xxx@s13:~> tar -xzvf DBD-mysql-4.011.tar.gz
xxx@s13:~> cd DBD-mysql-4.011/
xxx@s13:~> mkdir ~/perl
xxx@s13:~> perl Makefile.PL PREFIX=$HOME/perl
xxx@s13:~> make
xxx@s13:~> make install
xxx@s13:~> perl -I ~/perl/lib/perl5/site_perl/5.8.8/i686-linux/ -e 'print $DBD::mysql::VERSION . "\n"' -MDBD::mysql
4.011
xxx@s13:~> cp -Rpd ~/perl/lib/perl5/site_perl/5.8.8/i686-linux/* public_html/MTインストールディレクトリ/lib/

これで無事MySQLを使えるようになりました。
ふ~危ない危ない(何が?)。

CMS

CMS「concrete5」でサイトを構築したけど疲れてやめた

Published by:

昨年11月、必見!怖くなるくらい優秀なCMS「concrete5」の記事を見ていたときにちょうど1つサイトを立ち上げようと思っていたので、試しにconcrete5でセットアップしてみました。

記事の通り、確かに画面全体の編集がらくらくに行えて、記事の追加も直感的で分かりやすい。
が、一番困るのは、サイト全体の共通ブロックを持てないというところです。

たとえばメニューバーには共通の内容(ページの一覧やカテゴリの一覧など)を表示したいとします。
concrete5ではなぜかそれをさせずに、ある固定の内容をコピペする機能だけを提供しています。
その場限りのコピペなので、その共通部分の内容を変更したい場合はこれまで作ったページ全部を一個ずつ修正しないといけない

何でこういう設計にしたのかはよく分からないのですが、おそらく私がイメージしていた利用コンセプトと一致していなかったのでしょう。
本家サイトのフォーラムでもこの件についての問い合わせが多く、もしかするとそのうち修正されるかもしれませんが、システムコンセプトから変わるわけではありませんので、やはり運用可能なサイトはある程度決まってくると思います。

concrete5での運用が有効なサイトは、次のようなものになるのではないでしょうか。

  • ページ数がある程度限られている(せいぜい10~20ページ)
  • html、cssを理解できる管理者がいない
  • ページごとの構成を内容に合わせて変えたい

こういうWebサイト作成はニッチでもなんでもないので、こういったサイトであればむしろおすすめするかもしれません(テーマが少ないのがネックですが)。

私の件のサイトは、結局使い慣れたWordPressで再構築しました。
我が家のような使いやすさ・・・

「最強の」とか「必見」とか「マスト」とかに弱いので、また別のところで同じことをやってしまいそうですが。。

CMS プログラミング

WordPress2.7で長すぎる投稿が表示されない不具合の原因と対策

Published by:

shortcodes
このドイツ語のブログでやっと原因と修正方法が分かりました。
几帳面にも、問題の正規表現の図解で解説までつけてくれたドイツ人に感謝。
それにつけても、やっぱりドイツ人てすげぇ・・・

 現象

そもそもの問題の現象ですが、WordPress2.7で長めの投稿をすると、何も表示されなくなるということが起こりました。
最初はプラグインを疑って利用停止したりしたのですが、それでも改善しません。

WordPressにはデフォルトでいくつかのフィルター(記事の内容に対して行われるコンテンツの更新機能)がありますが、途中のフィルターまではちゃんと動作している。
一つずつ確認していったところ、wpautopフィルターでコンテンツが削除されていることが分かりました。

wpautopフィルターの問題箇所を探していくと、下記の最終行で削除されています。

wpautop関数:
$pee = preg_replace('/<p>s*?(' . get_shortcode_regex() . ')s*</p>/s', '$1', $pee); // don't auto-p wrap shortcodes that stand alone

ここまできてGoogleで検索して確認しましたが、WordPress2.5.1のときからこの行に関しては問題を起こしていたようで、対応としてはコメントアウトする(臭いものにふたをする)というものばかり。

・・・で、件のブログを見つけました。

原因

ドイツ語ブログで書かれているとおり、本当の問題はショートコード(画像のキャプションなどを[caption] ~[/caption]のように記述する記法)用の正規表現を定義したget_shortcode_regex関数(wp-includes/shortcodes.php)にありました。

get_shortcode_regex関数(修正前):
return '[('.$tagregexp.')b(.*?)(?:(/)?](?:(.+?)[/1])?';

wpautop関数もそうですが、get_shortcode_regex関数もほとんどプログラム効率無視なコードになっていて、貪欲な正規表現によってpreg_replace関数が悲鳴を上げたのが原因のようでした。

対策

対策は、問題のget_shortcode_regex関数内のコードを修正すること。

get_shortcode_regex関数(修正後):
return '[('.$tagregexp.')b([^]]*?)(/)?](?:(.+?)[/1])?';

おおおっ!動いた~(T  T
プログラミングに国境なし、を改めて感じました。

#追記
次のバージョンで修正が消されるといやなので、WordPressサイトにバグ報告しました。
#再追記
と思ったら、http://trac.wordpress.org/ticket/8553とduplicateでしたorz
#2009/2/14 追記
WordPress2.7.1で直ってなかったので、自動アップグレードで元に戻ってしまった。
ぐはあ。