Quantcast
Channel: サイト制作覚書
Viewing all 44 articles
Browse latest View live

XサーバーのPukiWikiではkakasiもchasenも使えない

$
0
0

有名どころのオープンソースには触っておきたいのでWikiGAというFreeGAのウィキサイトを立ててみました。

wikiga

サブサイトなので余っていたXサーバーのスペースにインストールしています。

なんとXサーバーにはpukiwikiの自動インストール機能があるので導入は簡単でした。

しかし・・・モジュール不足で50音順表示は絶望的

リストをアルファベット順以外にも50音順で整理したかったのですが、PukiWikiでそれを実現するにはkakasiかchasenがサーバーにインストールされている必要があります。

これは必須機能だと思いモジュールの有無をXサーバーに問い合わせてみました。

pukiwikiを自動インストールしたのですが標準で設定されているパスではkakasiもchasenもnot foundになってしまいます。

$pagereading_kakasi_path = ‘/usr/local/bin/kakasi’;
$pagereading_chasen_path = ‘/usr/local/bin/chasen’;

xserverではpukiwikiを五十音表示をする術が用意されていないのでしょうか?

 

その翌日に返信がありました。

調査の結果、該当モジュールについては当サーバーでの使用は
困難であるかと存じます。

該当モジュールについては各種設定を行う必要があるかと存じますが
誠に恐れ入りますが詳細な動作保証については行う事ができかねます。

ご希望に添えず誠に申し訳ございませんが、
上記ご確認の程ご了承いただきますようお願いいたします。

これだけ読むとインストールはされているけど設定が難しいかのように読み取れますが、別のメールによるとモジュール自体がインストールされていないようです。

VPSであればモジュールをサクッとインストールして解決ですが、レンタルサーバーでは打つ手がないと思います。

 

自動インストールだったので最低限の機能は使えると踏んでいたのですが、その最低限にはPukiWikiの日本語対応は含まれていなかったようですね。

 

まとめ

これからXサーバーでPukiWikiを運用する予定の人はkakasiやchasenの使用は諦めた方が良さそうです。

また、この問題をモジュールなしで対応するにはコアな部分を激しく改造する必要がありそうです。

そんなことをすれば色々と問題が生じるだろうし、VPSにインストールした方が100倍楽なので検証すらしていません。

今回はサブサイトだし、サイドメニューを強化すればリストがショボくても我慢できる気がしたので、WikiGAはXサーバーで構築することに決めました。

 

XREAではkakasiに公式対応しているようなので、本格的にPukiWikiを運用したいのであればXREAやVPSがおすすめでしょう。

 


functions.phpが肥大化したので条件分岐で管理画面でのみ呼び出すようにした

$
0
0

現在制作中のフリーガにてプラグイン0化計画を推進中なため(無理無理(-。-)y-゜゜゜)、やたらとfunction.phpに書き込んでいたら500行近くになっちゃいました。

2015-12-02 (2)

 

ファイルサイズだけを見ると15KBちょっとなので大したことがないように感じられますが、ファイルサイズ云々よりも実際に走るプログラムの処理負荷が気になります。

functions.phpを分けて条件分岐させる

ちなみにググっても思い通りの情報を得られなかったため、我流となっています。なので自己責任でお願いします。

プログラム書いてれば誰でも思いつくシンプルな手法です。

function.phpからfunction_sub_admin.phpを呼び出す

ファイル名はなんでも良いですがfunction_sub_admin.phpとしておきました。

function_sub_admin.phpには管理画面でのみ呼び出したい内容を記述します。

これを単純にfunction.phpから呼び出したい場合は以下の1行を記述するだけで内包できます。

include( get_template_directory().'/function_sub_admin.php' );

 

 

フォルダを分けて管理したければ/sub/function_sub_admin.phpとかにします。

 

これだと分けただけで意味ないですね。

if (is_admin() ) { }に入れてやる

function.phpの分割自体は最初からやっていたので、今回やりたいことは肥大化によるパフォーマンス低下への対策です。

考えるまでもなく以下の方法を思いつきました。

if (is_admin() ) {include( get_template_directory().'/function_sub_admin.php' );}

 

ふむ・・・ちゃんと動いてるな。

この方法ならプラグイン0化計画のメリットを十分に活かせそうです。

(だから無理だって(;´・ω・)buddypressトカSocial Loginトカ・・・)

if ( !is_admin() ) { }をさらに追加

『!マーク』でis_admin以外を指示してやれば、常に読み込むfunction.php、管理画面でのみ読むfunction_sub_admin.php、管理画面以外でのみ読むfunction_sub_noadmin.phpに分けてやることができます。当初はis_pageとかも追加してみたのですが、わけが解らなくなってきたし、あんまり分けると逆に遅くなりそうなので、この3パターンが丁度良いことにします。

function.phpはこんな感じです。

if (is_admin() ) {
//管理画面用
include(  get_template_directory().'/function_sub_admin.php' );
 }
if ( !is_admin() ) {
//管理画面以外用
include( get_template_directory().'/function_sub_noadmin.php' );
}
・・・あとは常に読み込むコードを通常通り記述

 

うむ・・・ちゃんと動いたお。

こいつはプラグイン使うよりも柔軟で良いじゃないか(*‘∀‘)

まとめ

管理画面用のコードばかりだったので実際に効果を確認できました。

ちょっと前までプラグインの改造(というよりはphp7用の修正)をよくやっていたのですが、『プラグインを改造するぐらいならfunction.phpで管理した方が楽かもなぁ』という発想で、プラグインを少しずつ減らしています。(当サイトは扱いが雑なのでプラグイン使いまくりっす)

プラグインは入れた瞬間から使えて便利なんですが、作者さんの更新が続くとは限りませんし、function.phpで条件分岐しながら呼び出した方がサーバー負荷に対するメリットもあるようなので、大事なサイトを扱うときは『なるすく』でいこうと思います。

最近忙しくてフリーガの製作が止まっていたけど、最終段階まできているので頑張りますお(‘ω’)ノ

KUSANAGIがPHP7に対応!!mysql_connectが邪魔な件も解決

$
0
0

追記————

※この記事を書いて間もなくプライム・ストラテジーの方からコメントを頂きました。

記事のタイトルも『KUSANAGIがPHP7に対応したけどmysql_connectが邪魔なので修正して使いながらアップデート待ち』から変更しています。

15年12月16日以降のKUSANAGI7.7-3にアップデート後、頂いたコメントの通り作業をすることで、何ら問題もなく動いています。

【解決するための要点】

1. 15年12月16日より前のKUSANAGI7.7ならyum update を行う(一見すると同じkusanagi7.7でも7.7-3になるらしい)

2. その後にkusanagi update pluginコマンドを実行する必要がある

3. kusanagi php7コマンドを打ってphp7モードに切り替える

4. wp-config.phpにdefine(‘WP_CACHE’, true);を追加

5. kusanagi bcache onコマンドを実行

6. wordpressのKUSANAGIプラグインで『advanced-cache.phpの再生成』を実行

以上の通り作業を行えば、以下の本文に書かれているような修正作業をする必要はなく、デバッグモード上でもnoticeやエラーを吐きませんでした。
fcacheについては未検証です。

下の方に頂いたコメントもあるので興味のある方は参考にしてください。

追記ここまで———–

どうもFreeGAをベータ版としてスタートしてみました。そんな中、KUSANAGIがPHP7に対応したので早速hhvmからPHP7に変更したときの話です。

なぜPHP7を使うかだって??そりゃ好きだからだよ。PHPがね。

KUSANAGIのPHP7への移行は簡単すぎる

サクリとyum updateで最新版のkusanagiへアップデートしたら、kusanagi php7コマンドを打つことでPHP7へ移行できます!!

php -v とかphpinfo.phpとかで確認してphp7に切り替わっていたら成功です。

なんか泣けるほど簡単だなぁ。3か月ぐらい前にphp7を入れたときは色々と苦労した気がするんだけど気のせいなのか。

1点注意があるとするなら・・・

FreeGAはもともとPHP7上で開発していたのでスムーズに移行できましたが、通常はNoticeが出ると思いますので軽く覚悟しましょう。

Noticeも蓄積すると開発の邪魔なので、私の場合はwp-config.phpを define(‘WP_DEBUG’, true); にして作業をしています。

あれ??bcacheもfcacheも動かない

制作中のサイトのためキャッシュを切って作業していたのですが、そろそろキャッシュも試験したい頃合いになりました。

とりあえずSSHコンソール上でkusanagi fcache onしてkusanagi statusで確認・・・・・・・・・・・・fcache offのままでした(完)

いや、エラーもでてないしfcacheとbcacheの違いをそもそも理解できてませんから、bcacheだけでいいや!!

 

そしてkusanagi bcache on・・・・・・・・・・・・・・・

無事にbcache onに切り替わりましたとさ(つづく・・・)

 

php7ではmysqlはmysqliへ移行

一見問題がなかったキャッシュ機能ですが、なんと管理者以外はサイトを見れない状態になっていました。運用中のサイトで作業している場合は気を付けましょう。

エラーをみるとこんな感じです。

Fatal error: Uncaught Error: Call to undefined function mysql_connect()

 

あっ。このエラーはよく見たなぁ。

にわかに信じがたいのですが、KUSANAGIのキャッシュ機能が吐くadvanced-cache.phpはPHP7に対応していないようですね。キャッシュが使えなければ自前のnginx1.9×php7からKUSANAGIへ移行した意味が皆無です。何回か修正したことのあるエラー内容だったのでadvanced-cache.php内を見てみました。

以下は120行目の問題個所です。

$dbh = mysql_connect(
 $dbset['host'],
 $dbset['user'],
 $dbset['pass'],
 true
 );

php7からはmysql_connectはmysqli_connectになっていて、従来とは違ってデータベースも同時に指定するのが基本型になっています。

すこし上の行を見ると’name’ => DB_NAMEが指定されていたので、そのまま使わせていただきます。

$dbh = mysqli_connect(
 $dbset['host'],
 $dbset['user'],
 $dbset['pass'],
 $dbset['name'],
 true
 );

ここはこれでOK・・・他の行もサラッと読んだらmysql関数が数か所あったのですが、一見するとmysqlをmysqliにするだけで対応できそうだったので、すべてのmysqlをmysqliに書き換えてみました。

※あんま頭使って直さなくても、KUSANAGIのアップデートがあると踏んでいるが故にテキトー

今度はWarning: mysqli_query()

そりゃそうだよねって思いながら該当箇所をみるとmysqli_query( $sql, $dbh );が不味いとのこと・・・・。

あるぅえ??いけそうだが?

まぁ、小生の書き方と違うのが気持ち悪いので自分なりに書き換えるなら mysqli_query( $dbh ,$sql); です。

結果:エラーが解消

 

ほー。

どっちでもいけそうだけど厳密なんですね。

もう一か所 $ret = mysqli_query($sql );という箇所でエラーが出ていたので、とりあえず $ret = mysqli_query( $dbh,$sql ); に変更。

 

でも、なんでこんなことになっているのかなぁ・・・って思いながら付近のコードを見わたすと mysqli_select_db( $dbset[‘name’], $dbh );を発見。

そっか。以前は mysql_select_db( $dbset[‘name’], $dbh );と$ret = mysql_query($sql );を使いながら次へ繋げていたっぽい。

 

ってことはmysqli_select_db( $dbset[‘name’], $dbh );もいらなくなるので削除。

結果

しばらくすると以下のエラーが発生

Non-static method KUSANAGI_Replace::replace() should not be called statically in

(PHP 7 では静的にコールすることが非推奨になりました)の話は解るが、そういう話??

KUSANAGI_Replaceクラスが何かをしてるように見えるんだけどKUSANAGIという名前が出てきた時点でブラックボックスな予感がしたので define(‘WP_DEBUG’, false); にしちゃいました。

出来ればデバッグモードを使いたいので何とかしたいなぁ。

それにadvanced-cache.phpはKUSANAGIが自動で生成してくれる動的なファイルなんで、いつ書き換えられて元に戻されるか解ったもんじゃないですね。

とりあえず、好奇心もあるのでキャッシュを効かせながら運用を続けてみます。

 

はやくKUSANAGI側で対応してくれると良いですね。

ニコニコ動画風の動画投稿サイトをHTML5(WordPress)とJavaScriptで作った話2

$
0
0

またもフリーガの話です。安易ですが動画投稿のページを【弾幕動画】というコーナーにしました。
ConohaサーバーとConohaオブジェクトストレージの性能試験を兼ねた試運転を継続中です。
niconico_video

UIがチープですが俺のデザインを観るサイトではないし、他の部分を頑張りたいので暫らく許してください。

コメントリストを下に配置した

画面の左側には投稿者様の大切な広告スペースがあるのでコメントリスト(フリーガで言うところの弾幕リスト)は動画の下に配置しています。

・・・と言うよりも、画面のサイドにコメントリストを配置するとニコニコ動画さんとの権利問題が絡みやすくなるらしい。逆に言うと【コメントリストの仕様】を変えて【データベースとの接続方法】も大きく異なるフリーガのシステムであれば、ほぼ権利問題に抵触することがないことも解りました!

安全第一、この方針は変えずに進めていきます。

何度か死にたくなるぐらい頑張って作ったのに、権利なんかで消されてたまるかです(;’∀’)

コメントと動画の再生時間を接続した

この機能はないと不便なので必須ですね。(コメントをクリック時に動画の再生時間も移動する機能のこと)

フリーガのコメントリストはPHPで生成したtableに対して、コメントデータベースと時間データベースを個別に呼び出すことで表示しています。

そしてHTML5にはcurrentTimeプロパティ という【動画の再生状態を取得する】便利な機能があるので、ビックリするぐらい再生時間とのリンクが簡単なんです。

実装の仕方

  • 1.currentTimeの中に【取得した時間】を入れるコードを書く
  • 2.テーブルの各TRにonclickを仕込む

シンプルで良いですね。まず1のコードは以下です。

function commenttime(x){ var vid = document.getElementById("danmaku"); this.x = x; vid.currentTime = x; }

フリーガの実装方法とは多少異なりますが、シンプルに書くとcommenttime(x)のxで時間を受け取って、IDで指定した動画(ここではdanmaku)のcurrentTimeに入れてやるだけのものです。

2.の時間を渡す側はもっと簡単です。

<tr onclick='commenttime(0.1*{$row['time']}-1)'>

とりあえず0.1とか-1は無視してください。

単純に、クリックしたらcommenttime()の中にデータベースからの時間を放り込んでいます。

0.1は単位の調整です。
-1は【動画の再生時間をワープした後】に1秒戻ることによって、【クリックしたコメント】も見れるようにしています。
-1秒戻らないとコメントが通り過ぎちゃって読めません。

あとは cursor: pointer; や hover時の background-color を指定しておけば、【クリックすると何かが起きる】という雰囲気がユーザーに伝わるかと思います。

動画の再生時間順にソートできるようにした

デフォルト状態では【実際に投稿した時の時系列】で表示されていますが、動画の再生時間順にソートした方が【どの辺りが盛り上がっている】のかが解りやすくなりますね。

それを実現するにはtablesorterという素晴らしいjQueryのプラグインがあります。

上のサイトでダウンロードしたプラグインを呼び出してから以下のコードを追加するだけでソートの準備が整います。

jQuery(document).ready(function() { jQuery("#commenttable").tablesorter({ headers: { 0: { sorter: false }, } }); } );

フリーガでは以下のようにデータベースを読み込みつつ、データベースから呼び出した時間を使ってソートしました。

//まずはmysqlに接続

$conn = mysqli_connect("private.hosting.freega.net","mysql_username", "mysql_password","mysql_commentlist");

mysqli_set_charset($conn, "utf8");
global $tbname;
if(isset($_POST['jikan'])) {
$time=$_POST['jikan'];
}
if(isset($_POST['danmakucome'])) {
$text=$_POST['danmakucome'];
}

$sql="SELECT text,time FROM ".$tbname;
$dyn = mysqli_query($conn,$sql);
if(!$dyn){
 die("query error");
}
//以下テーブルの作成
echo "<div class='comentlist_wrap'>";
echo "<table  id='commenttable' class='tablesorter hide_area' >";
echo "<thead>";
echo "<tr>";
echo "<th>コメント一覧";
echo "</th>";
echo "<th>時間(0.1秒)";
echo "</th>";
echo "</tr>";
echo "</thead>";
 echo "<tbody>";

while ($row = mysqli_fetch_array($dyn)){

echo "<tr  'commenttime(0.1*{$row['time']}-1)' >";
 
 echo "<td>" .$row['text'];
 echo "</td>";

 echo "<td class='sortValue:{$row['time']}'>" .$row['time'];
 echo "</td>";
 
 echo "</tr>";
}
echo "</tbody>";
echo "</table>";
echo "</div>";

数字の大きさでソートが出来るように td のクラスにtimeを割り振っています。
クラスに数字を入れるのが必須なのかは不明ですが、英語を何となく読みながら【勘】で実装してみました。心にゆとりがあるなら、ちゃんと調べてみた方が良いでしょう。

まぁ、ソートできてるし合ってるんじゃないかな(^^)

長いから打ち切り

あとはjqueryを使って【コメントリストの表示、非表示の切り替え】や【ボリュームツマミの実装】をしたり、【shCircleLoaderでロードアイコン】をつけたり等々、細々とした作業が沢山ありました。
しかし、ここまでくれば方法なんて何でも良い段階だし、ただの力仕事です。

それと厄介な問題が一つあって、アンドロイドの標準ブラウザでのフルスクリーン表示が上手くいかないです。スマホ上で見てもCSSとかの何が悪いか予想つかんのですよ(;´・ω・)
アンドロイドOS自体がGoogleの製品なんだからChormeに統一しろよな・・・あんなんIEみたいなもんで・・・グチグチ

そんな愚痴は置いておいて、そのうちコアだった初期段階の覚書も書きたいですね・・・いや、書きたくないですね(;´・ω・)タイヘンソウダー

さすがに大変そうなので、その辺りの話はフリーガで徐々に解剖しつつ、小出しにしながら蓄積していこうと思います。

つくづく辛いと幸いは紙一重ですよね。

Viewing all 44 articles
Browse latest View live