サーバーの最近のブログ記事

突然、セッションエラー

| コメント(0)
作業中に突然セッションエラーが発生するようになった・・・なぜ?
エラーの行を見てみると、最初のsession_start();の部分。
思い当たる節もなく、レンタルサーバー会社に即連絡。
サーバーの再起動で直ったもののしばらくするとまた発生。何なの?

エラーの内容は下記の通り。
**********************************************
Warning: session_start() [function.session-start]: open(/tmp/sess_e102d79a5e5f8a2accd0e3bc1dfbc1f8, O_RDWR) failed: Permission denied (13) in /public_html/index.php on line 7

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
**********************************************

またサーバーの再起動をしてもらったところで根本的な解決にはならないので
セッションパスを変えてみることにした。

新たにsessionというフォルダを作り、パスを変更。
session_save_path('/home/*****/session');

そして、エラーの内容からパーミッションに問題がありそうなので
777に設定変更し、再度実行してみると・・・なんと解決!

777でセキュリティ的にどうなのかという問題もあるが、public_htmlより
上の階層に作ってあるからまぁいいかということで・・・。

ちなみにsession_save_pathは、session_start()よりも先に書かなければならない。
ついでにタイムアウトの時間も変更。
デフォルトは180分らしい。そんなにはいらないので、30分くらいに・・・。

<?php
session_save_path('/home/*****/session');
session_cache_expire(30);
session_start();


?>

PEAR DBからMDB2へ

| コメント(4)
Smartyの問題が解消できたかと思ったら今度はPEAR DBも認識しなくなっていた。
ほんとに突然ナンなの?と思いつつ・・・PEARも自前でインストールすることに。

しかし、Smartyのようにうまくいかない・・・。
go-pear.phpを使ったインストールを試すもなぜか60%でストップ。
リロードしても60%・・・そこに何がいるんだよ!と
コードを見ても原因は分からず、違う方法を試すことにした。

ローカルでダウンロードファイルを解凍しアップすることに。
今回は緊急措置としてとりあえずPEAR DBだけ使えればいいので
個別にダウンロードして解凍・・・ここで注意!
なぜかLhacaやLhaplusなどの解凍ツールではうまく解凍してくれません。
そこで使ったのは、「解凍レンジ
これで解凍すると必要なすべてのファイルが出てきました。

これをSmartyと同じくlibsフォルダの中にpearフォルダを作ってその中にアップロード。
そしてすべてのDB.phpパスを変更し画面を確認。
動いているようだが、DBにコネクトしてくれない・・・なぜ(^^;)

それから1時間・・・。
PEAR DBをあきらめ、PEARのウェブサイトでも推奨されているMDB2を使ってみることにした。

MDB2をダウンロードし、同じく解凍レンジで解凍。

MDB2.phpとMDB2フォルダをlibs/pearフォルダにアップロード。
そして、コードを一部書き直して画面をリロード・・・。
おぉっと復旧しました! ハフゥ?(汗)


使用例は下記の通り。

//PEAR::MDB2 require_once('パス/libs/pear/MDB2.php'); $dsn="$dbtype://$user:$pass@$sv/$dbname"; $mdb2 = MDB2::factory($dsn); if(MDB2::isError($mdb2)){ echo "データーベース接続失敗"; }else{
echo "データーベース接続成功";
}//end if

while($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)){
$db_data[] = $row;
}//end while


基本的にはPEAR::DBとさほど変わらないが、コネクトと展開の書き方が違う。
$db = DB::connect($dsn);
       ↓
$mdb2 = MDB2::factory($dsn);

展開するときもDB_FETCHMODE_ASSOCから
MDB2_FETCHMODE_ASSOCに変わる。

PEAR::DBのマニュアルにも下記のようなメッセージがあるので今後のことを
考えるとその方がいいのかも・・・。

「This package been superseded by MDB2 but is still maintained for bugs and security fixes」(このパッケージの代わりにMDB2の使用が推奨されますが、バグの修正、セキュリティフィックスは引き続き行われます。)


今回は、ロリポサーバーには散々振り回された・・・。


やっとロリポップがPHP4からPHP5になりました。
来年春ごろにはPHP4のサポートが終了するので
切り替えるなら早目がいいだろうと本日切り替えました。

・・・が、ホームページがまったく表示されなくなってしまい
超あたふた(^^;) 仕事で依頼されているお客様のサイト
だっただけにかなりあせりました。
しかも明日から新キャンペーンの告知予定だったし・・・。

PHP5に対応して作っていたはずなのですが、どうやら
Smartyがひっかかってしまったようです・・・でもなんで?

ロリポップだとSmartyへのパスは通常下記のように
記述するだけでよかったのですが

require_once('Smarty.class.php');

このままPHP5に切り替えるとSmartyが認識されず
エラーになってしまいます。

エラーメッセージ内のパスがちょっとおかしい気がしたので、
下記のようにパスをしっかりと記述してみました。

require_once('/usr/local/lib/php/Smarty/Smarty.class.php');

これで何とか対処できました。
ふぅ。

ページが多い場合は、.htaccessにinclude_pathを書いた方がいいでしょうね。

php_value include_path ".:/usr/local/lib/php/Smarty/"

サーバーを引っ越しました

| コメント(0)
今まで「ロリポップサーバー」をずっと使ってきましたが
今月より「さくらレンタルサーバー」に切り替えました。

ロリポップに不満があったわけでもなく
どちらかといえばコストパフォーマンスはすばらしく
かなり気に入っていました。
一番お手軽なレンサバはどこと聞かれれば
やっぱりココをおススメすると思います。

ただちょうど来月契約更新のタイミングだったので
少しパワーアップしてみようかと・・・
具体的には、PHP5、SSH、PostgreSQLが使えて
コストパフォーマンスのよさと絞っていくと「さくら」かな・・・と。

とくにSSHは、今度学校で特別講座を受講する予定なので
ぜひ使ってみたいなと思っています。

ロリポップ!レンタルサーバー
さくらのレンタルサーバ