ようこそ!逆襲のニートブログへ

ブログ内検索

最近の記事

はてなブックマーク数

この日記のはてなブックマーク数

カテゴリー

月別アーカイブ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XREA に OpenPNE を設置する

レンタルWebサーバの「XREA」に、オープンソースのSNS「OpenPNE」をインストールしてみます。

設置の注意点をまとめてみました。

1. OpenPNE2.0をダウンロードする。
http://docs.openpne.jp/?%A5%C0%A5%A6%A5%F3%A5%ED%A1%BC%A5%C9

(最新のOpenPNE2.2系ではなく、とりあえずバグフィックスの落ち着いていそうな2.0系を使ってみる。)

2. OpenPNE セットアップガイドに従い、セットアップする。
http://tejimaya.org/openpne/docs/2_0/OpenPNE_Setup.html

3. 画像が表示されないという、XREA固有のエラーが出た。


ココからが本メモのメインの内容

OpenPNEをカスタマイズして、画像が表示されない状況を改善する。

Googleで「XREA OpenPNE 画像 エラー」を検索。

OpenPNEをオープンに使うサイト
http://openx.xrea.jp/

↓↓↓これが参考になるだろうか?↓↓↓

画像が表示されない不具合
http://openx.xrea.jp/modules/newbb/viewtopic.php?topic_id=9&forum=2

投稿日時: 2006-3-14 10:10 管理人

投稿: 15 Re: 画像が表示されない不具合
OpenPNE1.8.3(または1.9.2)をXREAサーバにインストールしたときにこの不具合が発生しているようです。

OpenPNE1.8.3では、img.phpで取得する画像を全てキャッシュ経由で表示するように変更しているみたいです。
XREAではセーフモードが有効になっているため、キャッシュファイルが生成されず、そのため画像が表示されなくなっているようですね。

Imgクラスのoutput_img()で、キャッシュがない場合の処理を追加すれば画像は表示されます。

該当箇所 /webapp/lib/img/img.class.phpの166行目

function output_img()を以下で置き換えます。(※修正は自己責任で行ってください。)



function output_img()
{
//キャッシュがある場合
if ($this->config_cache_source_enabled && $this->cache_exists) {
$this->send_content_type();
if ($mtime = filemtime($this->cache_fullpath)) {
// Etag
require_once (DOCUMENT_ROOT.'/webapp/lib/Etag.class.php');
$etag = new Etag($this->cache_filename.$mtime, $mtime);
if ($etag->etagCheck()) {
exit;
}
}

@readfile($this->cache_fullpath);
return true;
}

//キャッシュがない場合
if ($this->src) {
//TODO ディレクトリから取ってくる場合
}
elseif ($this->dbsrc) { //DBからとってくる場合
//リサイズせずに、かつ、形式変換しない場合、
//出力にGD系の関数を使用しない(画質が劣化するので)
if ($this->rawImageData && !$this->gdimg_output) {
$this->send_content_type();
echo $this->rawImageData;
return true;
}
elseif ($this->gdimg_output) {
//リサイズ or 形式変換する場合は、GD系の関数で出力
$this->send_content_type();
switch ($this->outputFormat) {
case "jpeg":
case "jpg":
default:
imagejpeg($this->gdimg_output);
break;
case "gif":
imagegif($this->gdimg_output);
break;
case "png":
imagepng($this->gdimg_output);
break;
}

return true;
}
}

return true;
}



ふむふむ、なるほど。
・画像のキャッシュファイルがある場合
・画像のキャッシュファイルがない場合
の判定処理を入れると。

OpenPNE2.0の場合はどうなるだろうか?

↓↓↓

Imgクラスは、
/OpenPNE/webapp/lib/OpenPNE/Img.php
にありました。

169行目に、該当のメソッドがあります。


/**
* 画像を出力
*
* @access public
*/
function output_img()



・画像のキャッシュファイルがない場合は、データベースから画像データを取り出して、出力するようにすべし!
・キャッシュファイルを作らない分だけ処理が遅くなり、サーバに負荷がかかるが、しょうがない。><
・データベースから画像データを取り出す処理は、generate_img()メソッドの処理を真似すればOK。

以上の改変内容をまとめると、output_img()メソッドの内容は以下のようになります。
これでXREAでも、OpenPNE2.0で画像が表示されますね!

function output_img()
{
if ($this->check_cache()) {
//キャッシュがある場合
$this->send_content_type();

if ($mtime = filemtime($this->cache_fullpath)) {
// Etag
require_once 'Etag.php';
$etag = new Etag($this->cache_filename.$mtime, $mtime);
if ($etag->etagCheck()) {
exit;
}
}
@readfile($this->cache_fullpath);
}
else {
//キャッシュがない場合 → DBから取ってくる
$this->raw_img = $this->get_raw_img();
$w = $this->requests['w'];
$h = $this->requests['h'];

// サイズ指定がなく、かつ、形式変換しない場合(GDに変換する必要なし)
if (!$w && !$h && ($this->source_format == $this->output_format)) {
$this->send_content_type();
echo $this->raw_img;
return true;
}
// create a GD image from raw_img
if (!$source_gdimg = imagecreatefromstring($this->raw_img)) {
return false;
}

if ($this->requests['f'] == 'jpg') {
// JPEGの場合、携帯対応
imageinterlace($source_gdimg, 0);
}

//リサイズ
$output_img = $this->resize_img($source_gdimg, $w, $h);

//リサイズした画像をGD系の関数で出力
$this->send_content_type();
switch ($this->output_format) {
case 'jpeg':
case 'jpg':
default:
imagejpeg($output_img, '', $this->jpeg_quality);
break;
case 'gif':
imagegif($output_img);
break;
case 'png':
imagepng($output_img);
break;
}

return true;
}
}



↑ブログにソースコードを貼り付けると、表示したときインデント(字下げ)が反映されてないですね。

ちょっと見づらいかな?

とりあえず、画像が表示されるようになったから良しとするか。
根本的には、Imgクラス自体を作り直す必要があるのかな?

50×50ピクセルとか、小さい画像をリサイズして、表示させる機能がうまく働いていない。

めんどくさいなー、もう。。。
後で修正しよっか。ふぅ~。
関連記事

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURL:
http://gooddays1.blog37.fc2.com/tb.php/169-6c41b7e5

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。