8

Amazon Linux を使用して、AWS で php 5.4 を使用してアプリケーションを実行します。

PHP のバージョンは PHP 5.4.28 です。AWS リポジトリからインストールされた memcache lib は、php54-pecl-memcache-3.0.8-1.11.amzn1.x86_64 です。

PHP が /etc/php.ini を使用していることを確認しました。

[root@ip-xx.xx.xx.xx]# php -i | grep Config
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini

設定は、memcache を使用する必要があることを示しています。

[root@ip-10-40-17-119 etc]# grep "^session.save" php.ini
session.save_handler="memcache"
session.save_path="tcp://<elasticache-endpoint>:11211"

[root@ip-10-40-17-119 php.d]# php -i | grep session.save
session.save_handler => memcache => memcache
session.save_path => tcp://<elasicache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15 => tcp://<elasticache-endpoint>:11211?persistent=1&weight=1&timeout=1&retry_interval=15

ボックスからエンドポイントとポートに telnet で接続して適切に接続できるため、インスタンスは memcached サーバーに接続できます。

私たちが試したこと:

  • tcp:// を php.ini ファイルから削除しましたが、違いはありませんでした。セッションはまだファイルに保存されています。
  • session.save_handler="memcache" から session.save_handler="memcached" に変更しました
  • 変更を加えるたびに、httpd サーバーを停止し、再度開始します。
  • サーバーの再起動も試みました

何を試しても、セッションはディスク上の /var/lib/php/sessions に保存されます。不足しているものはありますか、それとも 5.4 または AWS の既知の問題ですか?

4

2 に答える 2

17

OK、問題を解決することができました。

まず、phpinfo() を吐き出す簡単なページを作成しました。Web サーバーを介してこれを実行することが重要であることに注意してください - php -i の実行には、Apache が追加する可能性のあるオーバーライドは含まれません。

セッション セクションの下に、すべてのディレクティブ、および「ローカル値」と「マスター値」が出力に一覧表示されます。

ローカル値は次のとおりです。

session.save_handler    files
session.save_path   /var/lib/php/session

マスター値には次のものがありました:

session.save_handler    memcache
session.save_path   tcp://<endpoint>:11211

/etc/httpd/conf.d/php.conf ファイルを指定するオーバーライドがデフォルトでインストールされていることがわかりました。これは、Redhat/CentOS/Fedora のもののようです。

これらの値を php.conf から削除すると、問題が解決しました。

于 2014-06-12T15:13:41.510 に答える