local-nm
@local-nm

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

MemcachedをWindowsで利用したい

解決したいこと

https://devcenter.heroku.com/ja/articles/php-sessions
上記を参考にPHPでのセッションを利用したいのですがcomposer updateの際にエラーが発生してしまいます。
環境としてはWindows10でXAMPPを使いプログラミングしています。
PHPのバージョンは8.1.6を利用しています。
C:\xampp\php\ext配下にphp_memcached.dllをおいているのですが正しく読み込まれていないようです。
解決策を知っている方がいらっしゃいましたらご教授願いたいです。

発生している問題・エラー

PHP Warning:  PHP Startup: Unable to load dynamic library 'php_memcached.dll' (tried: \xampp\php\ext\php_memcached.dll (指定されたモジュールが見つかりません。), \xampp\php\ext\php_php_memcached.dll.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'php_memcached.dll' (tried: \xampp\php\ext\php_memcached.dll (指定されたモジュールが見つかりません。), \xampp\php\ext\php_php_memcached.dll.dll (指定されたモジュールが見つかりません。)) in Unknown on line 0
Loading composer repositories with package information
Info from https://repo.packagist.org: #StandWithUkraine
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires PHP extension ext-memcached * but it is missing 
from your system. Install or enable PHP's memcached extension.

To enable extensions, verify that they are enabled in your .ini files:
    - C:\xampp\php\php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-memcached` to 
temporarily ignore these required extensions.

A1241254-A603-4FDB-BEC8-0E44A59E357D.png

0

2Answer

php.iniの設定をしましたか?

To enable extensions, verify that they are enabled in your .ini files
拡張機能を有効にするには、.ini ファイルで拡張機能が有効になっていることを確認します。

拡張機能はextension=php_extname.dllのような形で読み込み設定をする必要があります。

php.iniを変更したあと、apacheの再起動をしましたか?

phpinfoメソッドでMemcachedが有効になっているか確認してみましたか?

0Like

Comments

  1. @local-nm

    Questioner

    Apacheの再起動を行い、phpinfoを確認しましたが有効になっていませんでした。

先にphpinfo();でmemcachedが有効になってるか、あるいはログにモジュールが見つからない旨のメッセージがでているかを確認なさって下さい。

php_memcached.dllをおいてるとのことですが、php.iniの変更が済んでいる前提でしょうか?
またマニュアルやノートにもありますが、php.iniではextensionをファイル名での記載が非推奨ですから正しくはextension=memcachedです。
念のためにextension_dir=<パス)>も追記する方が良いでしょう。

それでもログにモジュールが見つからないと出続けるならlibmemcached、igbinary、またはmsgpackの各ライブラリ不足(付属されていたはずです)。

構成がどうなってるか分かりませんが、FastCGIとかを利用されてるならそれらも再起動は必要です。

0Like

Comments

  1. @local-nm

    Questioner

    phpinfo();を確認しましたが有効になっていませんでした。
    php.iniにextension=memcachedとして定義済みになります。
    libmemcached.dllとlibhashkit.dllをext配下におけば良いのでしょうか?
  2. この場において、モジュールとライブラリは別物ですからライブラリをextにおいても意味はありません。
    php.exeと同じディレクトリに配置する必要があります。
  3. @local-nm

    Questioner

    php.exeのあるphpディレクトリに置いたら以下エラーが発生しました。 プロシージャが見つからないと表示されているようです。
    PHP Warning: PHP Startup: Unable to load dynamic library 'memcached' (tried: C:\xampp\php\ext\memcached (指定されたモジュールが見つかりません。), C:\xampp\php\ext\php_memcached.dll (指定されたプロシージャが見つかりません。
    )) in Unknown on line 0
  4. php_memcached.dllがextに配置されていてもライブラリ不足などで同じエラーメッセージを吐きます。

    残された可能性としては

    * ライブラリ不足
    * Win版memcachedのスレッドセーフかノンスレッドセーフあるいはビットを間違えているか(phpinfoで確認してPHP for Winと同じ物にする)
    * extまでのパスをPHPが解釈できてない(extまでのフルパスをextension_dirで指定する)

    Xamppは使っていませんが当方のPHP for Win(ノンスレッドセーフ、x64版)ではphp_memcached.dllを呼びさせているので、全く動かない自体では無いようです。
  5. @local-nm

    Questioner

    php.exeをクリックしてみたら質問内容に追加しました画像のエラーが表示されました。
    phpの8.1系では動かないのでしょうか。
    参考までに利用しているphpのバージョンを教えて頂けると幸いです。
  6. 当方の環境はPHP 8.1.12 / memcached 3.2.0 になります。コンソール版phpinfoの一部内容も載せておきます。 https://pastebin.com/5YH2uzxC

    そのようなエラーには遭遇してませんのでmemcachedのインストールを間違えている可能性が含まれます。もう一度良く確認なさって下さい。

    https://pecl.php.net/package/memcached

    元も子もないのですがXamppよりDockerで環境構築した方が良いでしょう。

    ビルド済みWindows版memcachedはいくつかの制限があり、恐らく自前ビルドしないと全てのサポートが有効にならないはすです。

    https://www.php.net/manual/ja/memcached.installation.php
  7. @local-nm

    Questioner

    dllファイルを再度入れ直したことで正しく読み込む事が出来ました。

Your answer might help someone💌