アプリ版:「スタンプのみでお礼する」機能のリリースについて

無料でPHPを使えるレンタルサーバーでのセッション変数の使い方について教えていただきたく投稿いたしました。PHPインフォで調べてみますと、セッション変数は使える模様でした。セッション変数の保存先をsession_save_pathを使って自分のフォルダに変更しようとしているのですが、上手く行きませんでした。セッションに関する情報は下記の通りです。この中で/var/lib/php/sessionというパスがありますが、デフォルトの状態ではこのsessionというフォルダに保存されると思うのですが、レンタルサーバーですので多数の人が使っていますので、これを自分が作成した自分だけのフォルダに保存したいのですが、どうすればよいのでしょう。色々と試してみましたが上手く保存できませんでした。ちなみにセッションの保存先のパスのしていを、w7.oroti.com/~****/*****/sessionと言うようにしてみたり、指定されたファイルの置き場所がpublic_htmlというフォルダなので、
public_html/sessionとしてsessionフォルダを作ってみたり、したのですが保存できませんでした。詳しい方がおりましたら宜しくお願いいたします。セッションでの管理ができないので、クッキーで対応しております。でも、勉強のためになんとかこの課題を克服したいと思っています。宜しくお願いします。
<?php
session_save_path("w7.oroti.com/~****/session");

session_start();
if(isset($_SESSION["cout"])){
$_SESSION{"count"]++;
}
else{
$_SESSION{"count"]=!;
}

?>


-------------------------------------------------------
session
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 Off Off
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /var/lib/php/session /var/lib/php/session
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid 0 0

A 回答 (5件)

session_save_pathの指定は、サーバ内の絶対パスか


相対パスを指定をしてください。

例えば、
session_save_path("./session");
とすれば、実行されるphpスクリプトと同階層にある
sessionディレクトリの中に、セッションファイルが
作成されると思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。試してみました。実行するPHPファイルと
同階層にsessionフォルダを作成して下記の様に書き換えたのですが、やはりセッション変数が保存されたファイルはありませんでした・・・・。自分のPCのローカル上でテストではきちんと保存されるのですが。レンタルサーバーではそれが上手くいきません。でも、PHPinfoではsession enableとなっていますし・・・。
どうしても、これがクリアーできないです^^。
<?php
session_save_path("./session");

session_start();
if(isset($_SESSION["cout"])){
$_SESSION{"count"]++;
}
else{
$_SESSION{"count"]=!;
}

?>

お礼日時:2008/09/28 15:37

単純にパスの指定の仕方に誤りがあるのではないかと思います。


もしくはディレクトリのパーミッションに問題があるとかかもしれませんね。
何かエラーメッセ-ジは出ていませんか?
エラーメッセージを出力しない設定になっているのならば出力するように設定して再度確認してみるのが良いと思います。

あとはパスの指定は絶対パスで、可能ならば.htaccessなどで設定しておくのがよいかと思います。セッションの保存先が複数あっても管理が煩雑になるだけでしょう。特別な理由があるのならばこの通りではありませんが。
    • good
    • 0
この回答へのお礼

ありがとうございます。エラーが表示されると良いのですが、無料のレンタルサーバーでエラーの表示設定がoffになっているので、エラーが表示されないんです。このエラーが表示されないことにより、かなり苦戦していました。単純なスペルミスを見つけるだけでも、いつも一苦労しています。

お礼日時:2008/09/28 16:50

print "session_save_path = " . session_save_path() . "<br>";



を、スクリプトに組み込んで、session_save_pathが変更されているか確認をしてみてはいかがでしょう。

あと、No.2の方が回答されているように、セッション格納用のフォルダのパーミッションを確認してください。
    • good
    • 0
この回答へのお礼

ありがとうございます。
以下の様に実行してみました。

実行(1)session.php
<?php


session_start();
session_save_path("./session");
session_register("sesdata1");
$_SESSION[sesdata1]=10;

print "session_save_path = " . session_save_path() . "<br>";

print $_SESSION[sesdata1];

?>

実行(1)の表示結果

session_save_path = ./session
10


実行(2)test.php
<?php
session_start();
print $_SESSION[sesdata1];
?>

実行(2)の表示結果
10

ということは、セッション変数は保存されて読み込まれている
と言うことになると思うのですが・・・。

でも、FFFTPソフトで保存先のsessionフォルダを覗いてみても
何もファイルがありませんでした。
sessionフォルダのパーミッションは755で、書き込み、読み込み、実行とも全てOKになっています。
レンタルサーバーということでセキュリティー上表示されないのでしょうか?やはり、分かりません・・・。なぜ、見えないのかな^^。

お礼日時:2008/09/28 16:15

session_save_path()の場所は、


session_start()の前にしてください。

#ただ、最初の例示では、この順番になっているので
#そこが原因ではないような気がしますが。

この回答への補足

皆様ありがとうございました。解決しました。
保存ファルダをtempに変えて実行してみたら、きちんと保存されていました。FFFTPでもファイルが確認できました。理由は分かりませんが、すっきりしました。ご教授してくださった皆様に感謝いたします。ありがとうございました。
<?php
session_save_path("./temp");
session_start();
session_register("sesdata1");
$_SESSION[sesdata1]=10;
print "session_save_path = " . session_save_path() . "<br>";
print $_SESSION[sesdata1];
if(isset($_SESSION[sesdata1])){
echo "格納済み";
}
echo nl2br(shell_exec("ls -la ./session"));
?>

補足日時:2008/09/28 20:01
    • good
    • 0
この回答へのお礼

ありがとうございます。session_save_path()を、session_start()の前に持ってきました。でも、やはり^^・・・。見えません。
なんとなく、サーバー管理者がセキュリティー上間違って第3者に見られたりしないように、何か設定しているのかなという気がしてきているんですが・・・。サーバーさんはorotiさんです。

お礼日時:2008/09/28 16:56

パーミッションは755とのことですが、これだと所有者しか書き込みできないですよね。

実行ユーザが誰かによってはこれでは書き込めないです。
あと、FTPクライアントが最新の情報を取得できていない可能性もあるので、

echo nl2br(shell_exec("ls -la ./session"));

とでもして、sessionディレクトリの内容を出力してみた方が良いかもしれません。

それから本題からはそれますが、エラーを出力するかどうかは自分で設定できます。
.htaccessでPHPの設定ができるならそこでdisplay_errors、error_reportingなどの値を設定してみてください。
.htaccessでの設定が無理ならばini_set()でも設定できることになっています。
http://jp.php.net/manual/ja/errorfunc.configurat …
http://jp.php.net/manual/ja/ini.php#ini.list

この回答への補足

ありがとうございました。下の様に実行してみました。
<?php
session_save_path("./session");

session_start();

session_register("sesdata1");
$_SESSION[sesdata1]=10;

print "session_save_path = " . session_save_path() . "<br>";

print $_SESSION[sesdata1];

if(isset($_SESSION[sesdata1])){
echo "格納済み";
}
echo nl2br(shell_exec("ls -la ./session"));
?>


実行結果の出力は
session_save_path = ./session
10格納済みtotal 8
drwxrwxrwx 2 **** custom 4096 Sep 28 19:11 .
drwxr-xr-x 3 **** custom 4096 Sep 28 15:56 ..
-rw------- 1 apache apache 0 Sep 28 19:11 sess_t9gvcli1m0hdt7pkbf1u1pu8e5

となって、セッション変数は保存されていました。
デフォルトでは、session.save_path →/var/lib/php/session というパスになっています。もしかして、ここに保存されているような気がしています・・・。

フォルダのパーミッションは777にしました。

でも、FFFTPソフトでは見えないんです^^。
なんか、悔しいです。

補足日時:2008/09/28 19:44
    • good
    • 0
この回答へのお礼

貴重がアドバイスありがとうございます!早々に手を入れてがんばって見ます。ありがとうございました。

お礼日時:2008/09/28 18:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!