Ubuntu10.10にApache / PHPをインストールした場合のセッションファイルのデフォルトの場所はどこですか?
Ubuntu10.10にApache / PHPをインストールした場合のセッションファイルのデフォルトの場所はどこですか?
回答:
デフォルト値は session.save_path
に設定されている""
システムのtempディレクトリに評価されます。https://bugs.php.net/bug.php?id=26757で次のように述べているこのコメントを参照してください。
今後のリリース(原文のまま)でのsave_pathの新しいデフォルトは空の文字列になります。これにより、一時ディレクトリがプローブされます。
一時ファイルに使用されるディレクトリパスを返すために使用できsys_get_temp_dir
ます
現在のセッション保存パスを見つけるには、次を使用できます
php.ini
ファイルがありphp_info()
、現在の評価中にどちらが使用されているlocate php.ini
かがわかり、それらを見つけるのに役立ちます
まず、またはをsession.save_path
使用する値を確認します。空でない場合は、セッションファイルが保存されている場所が表示されます。多くのシナリオでは、デフォルトで空になっています。その場合は、以下をお読みください。ini_get('session.save_path')
phpinfo()
UbuntuまたはDebianマシンでは、session.save_path
が設定されていない場合、セッションファイルはに保存され/var/lib/php5
ます。
RHELおよびCentOSシステムでは、session.save_path
が設定されていない場合、セッションファイルはに保存されます。/var/lib/php/session
PHPをソースからコンパイルすると、session.save_path
が設定されていない場合、セッションファイルがに保存されると/tmp
思います(私はこれを自分でテストしていません)。
php.ini
ますが、何らかの理由で(何も変更していません)、セッションが終了しています/var/lib/php5/sessions
php -i | grep session.save_path
、CLI(およびおそらくApache)セッションの保存パスに対して次のようにします。また、指定php.ini
されたものは通常、「デフォルト」パスを表示します-コメントアウトされているだけです。
/tmp
)をフォールバック/デフォルト値として使用します。php.net/manual/en/…を
/etc/php/7.0/*/php.ini
-> ;session.save_path = "/var/lib/php/sessions"
-コメントは「設定されていない」という意味ではありません。明らかに「空白」(/ tmp)以外に設定されており、空/ヌルの文字列ではありません
のコンパイル済みデフォルトがわからない場合session.save_path
は、関連するを調べてくださいphp.ini
。
通常、これはコメントアウトされたデフォルト値を表示します。
Ubuntu / Debianの古い/新しいphp.ini
場所:
Apacheを使用した/etc/php5/apache2/php.ini
古いphp5 :NGINX + FPMを使用した古いphp5 :Apacheを使用した/etc/php5/fpm/php.ini
Ubuntu 16 + :/etc/php/*/apache2/php.ini
*
NGINX + FPMを使用したUbuntu16 +- /etc/php/*/fpm/php.ini
*
* /*/
=システムにインストールされている現在のPHPバージョン。
Apacheで使用されているPHPバージョンを表示するには:
$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"
7.3
この例ではPHP7.3が実行されているバージョンであるため、これをphp.ini
:に使用します。
$ grep "session.save_path" /etc/php/7.3/apache2/php.ini
;session.save_path = "/var/lib/php/sessions"
または、組み合わせたワンライナー:
$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini
結果:
;session.save_path = "/var/lib/php/sessions"
または、PHP自体を使用して、「cli」環境を使用して値を取得します(以下の注を参照)。
$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$
これらも機能します:
php -i | grep session.save_path
php -r 'echo phpinfo();' | grep session.save_path
注意:
の「cli」(コマンドライン)バージョンには、php.ini
通常、Apache2 / FPMバージョンと同じデフォルト値があります(少なくともsession.save_path
)。同様のコマンドを使用して、Webサーバーの現在のPHPモジュール設定をWebページにエコーし、wget / curlを使用して情報を取得することもできます。この点での使用に関する多くの投稿がありますphpinfo()
。ただし、PHPインターフェースを使用するか、PHPインターフェースをgrep
正しく使用して、php.ini
デフォルト値を表示する方が高速です。
編集:@aesedeコメントごと->追加php -i
。ありがとう
php -i
までに、CLIで実行してphpinfo()と同等のものを取得できます。
他の一般的なデフォルトの場所/tmp/
は/var/lib/php5/
Macでのセッションの正しいパスを見つけるのにも同じ問題がありました。全体として、CLI PHPにはApacheモジュールとは異なる一時ディレクトリがあることがわかりました。Apacheはを使用しましたが/var/tmp
、CLIはのようなものを使用していました/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T
。しかし、どちらの方法でも、が空のsys_get_temp_dir()
ときに正しいパスを取得しましたsession.save_path
。PHP5.5.4を使用します。
PHP7.2でCentOS7のIUSリポジトリを使用すると、上記のいずれも機能しませんでした。
php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )
php -r 'echo session_save_path(), "\n";
>
php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp
ただし、セッションは/tmp
フォルダーではなく、フォルダーに保存されました/var/lib/php/mod_php/session/
。
ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k sess_ck5dtaerol28fpctj6nutbn6fn sess_i24lgt2v2l58op5kfmj1k6qb3h sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t sess_dvrt9fmfuolr8bqt9efdpcbj0d sess_igdaksn26hm1s5nfvtjfb53pl7 sess_tgf5b7gkgno8kuvl966l9ce7nn
現在のsession.save_path
値を見つけるための唯一の確実なオプションはphpinfo()
、セッションストレージディレクトリを見つけたい環境で常に確認することです。
理由:値をsession.save_path
オーバーライドするかphp.ini
、実行時にini_set('session.save_path','/path/to/folder');
。を使用して設定することにより、さまざまな変更が行われる可能性があります。たとえば、ISPConfig、PleskなどのWebサーバー管理パネルは、多くの場合、これを適応させて、各Webサイトにセッションファイルを含む独自のディレクトリを提供します。
<?php phpinfo() ?>
、を探してくださいsession.save_path
。