web-dev-qa-db-fra.com

erreur lors de l'installation de pecl memcached

J'ai eu de réelles difficultés à installer le paquet pecl memcached. 

N'a eu aucune joie avec aucune commande d'installation yum ou pear/pecl je me suis référé à cette question Installez PECL Memcached Error et a commencé à essayer de configurer/make manuellement

J'utilise pecl pour télécharger la dernière version (memcached-2.2.0), puis désarchiver, phpize ...

Si je configure avec --disable-memcached-sasl, la configuration est terminée mais la commande échoue. Avec ce qui ressemble à des erreurs de syntaxe

In file included from /root/memcached-2.2.0/php_memcached_private.h:28,
                 from /root/memcached-2.2.0/php_memcached.c:26:
/root/memcached-2.2.0/php_libmemcached_compat.h:56: error: expected ‘=’, ‘,’, ‘;’, ‘asm’     or ‘__attribute__’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:328: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:329: error: expected declaration specifiers or     ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c:330: error: expected declaration specifiers or ‘...’ before ‘php_memcached_instance_st’
/root/memcached-2.2.0/php_memcached.c: In function ‘php_memc_get_impl’:
/root/memcached-2.2.0/php_memcached.c:594: warning: passing argument 4 of     ‘memcached_mget_by_key’ from incompatible pointer type
/usr/include/libmemcached/memcached_get.h:38: note: expected ‘char **’ but argument is of type ‘const char **’
/root/memcached-2.2.0/php_memcached.c: In function ‘php_memc_getMulti_impl’:

Il y a plus de cela, mais j'espère que c'est un indicateur assez utile

Si j'utilise --with-libmemcached-dir =/usr/include/libmemcached, je reçois

checking for libmemcached location... configure: error: Unable to find memcached.h under /usr/include/libmemcached

Mais ce IS où memcached.h est

Si j'utilise --with-libmemcached-dir = no configure donne

configure: error: no, libmemcached sasl support is not enabled. Run configure with --disable-memcached-sasl to disable this check

Si j'ajoute l'option --disable-memcached-sasl, la configuration est terminée mais échoue à nouveau avec les erreurs de syntaxe.

Sentez-vous comme je suis coincé dans une boucle. 

Ce n'est pas la première fois que je configure un serveur à partir de zéro pour utiliser memcached (bien que la première fois depuis longtemps, je suppose), je ne me souviens pas d'avoir eu de problèmes auparavant.

Des idées s'il vous plaît quelqu'un?

Cela ressemblait à une bonne piste

http://blusmurf.net/2012/08/27/pecl-memcache-build-error/

Mais pas encore la joie

J'ai également enquêté sur ce problème à partir de la page github de php-memcached

https://github.com/php-memcached-dev/php-memcached/issues/69

J'ai essayé avec les versions 2.1 et 2.2 maintenant, en piratant les fichiers pour essayer de construire. Toujours pas de chance ...

11
joevallender

Résolu en utilisant cette combinaison:

  1. libmemcached release 1.0.16 - installé à partir du code source
  2. php-memcached release 2.1.0 - installé à partir de la source & Ajouté memcached.so dans php.in

J'espère que cette aide. 

14
flyankur

Si vous n'avez pas besoin de SASL, répondez avec ceci:

répertoire libmemcached [no]: no --disable-memcached-sasl

18
Tom Mettam

Étape 1 - Installez SASL:

yum install cyrus-sasl-devel

Étape 2 - Compilez libmemcached avec SASL installé:

cd ~
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -zxvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make && make install

Étape 3 - Installez PHP Memcached:

pecl install memcached

(Ne pas spécifier libmemcached-dir)

7
Saul Fautley

Si vous n’avez pas besoin de l’assistance sasl, voici un moyen facile d’installer 2.2.X:

pecl_memcached_ver="2.2.0"
pecl download memcached-${pecl_memcached_ver}
tar xzvf memcached-${pecl_memcached_ver}.tgz
cd memcached-${pecl_memcached_ver}/
phpize
./configure --disable-memcached-sasl
make
make install
cd ..
rm -r memcached-${pecl_memcached_ver}
echo "extension=memcached.so" > /etc/php5/fpm/conf.d/20-memcached.ini

Ensuite, lancez php5 -i pour vérifier qu'il a installé 2.2.x correctement

2
rynop

Pas:

  1. Sudo apt-get installez libmemcached libmemcached-dev
  2. Sudo mkdir -p/usr/lib/x86_64-linux-gnu/include/libmemcached && Sudo ln -s /usr/include/libmemcached/memcached.h/usr/lib/x86_64-linux-gnu/include/libmemcached/memcached. h
  3. echo "/ usr/lib/x86_64-linux-gnu --disable-memcached-sasl" | Sudo /opt/phpfarm/inst/php-5.4.40/bin/pecl -C /opt/phpfarm/inst/php-5.4.40/etc/pear.conf install memcached

Configuration: Ubuntu 14.04.x ​​LTS x64 (trusty tahr) Phpfarm (last) avec pecl PHP 5.4.40 Memcached 2.2.0

Remarque: évidemment, vous devez remplacer les chemins d'accès en fonction de votre système

1
Roman NL

Sur CentOS 7.2 avec la version 1.0.16 de libmemcached-devel installée, vous devez répondre à la question avec/usr :

libmemcached directory [no] : /usr

0
alamaby

La procédure @rynop est très bonne et tout est génial!

Maintenant, que diriez-vous que vous souhaitez package pour le déploiement? Le déploiement de ma cible s’exécute sur Ubuntu 14.04 LTS et j’ai envie de remplacer le paquet php5-memcached en amont par un simple fichier .deb.

Pour cela, regardez regardez fpm qui signifie "Freaking Package Manager} _" (sic). Son fait pour créer des paquets de presque n'importe quoi.

Après la procédure @rynop, voici ce que j’ai fait:

// Rest of @rynop procedure, modulo this configure options
./configure --enable-memcached-igbinary --disable-memcached-sasl

Installer jordansissel/fpm

apt-get install -y pkg-config Ruby-dev gcc
gem install fpm

Ensuite, vérifiez le contenu du package que vous souhaitez remplacer et laissez-le répliquer à nos propres fins.

dpkg --list | grep php5-memcached
find /var/cache/apt -type f -name '*php5-memcached*'
dpkg -c /var/cache/apt/archives/php5-memcached_2.1.0-6build1_AMD64.deb

J'ai compris dans la sortie que je n'avais besoin que de quelques dossiers, je les ai donc créés.

mkdir -p etc/php5/mods-available/
// Adjust memcached.ini to suit your tastes, then prepare it for packaging
cp memcached.ini etc/php5/mods-available/
// Make sure the usr/lib/php5/foo path matches in 
// the result of `dpkg -c` you issued
mkdir -p usr/lib/php5/20121212/
cp modules/memcached.so usr/lib/php5/20121212/

La magie va arriver

fpm -s dir -t deb -n php5-memcached -v 2.2.0-wpd -m '<[email protected]>' --description 'PHP 5.5 PECL igbinary + memcached support' -d libmemcached10 etc/ usr/
0
renoirb