Je souhaite créer une application Symfony CRUD. Voici les étapes que j'ai suivies:
htdocs
avec la CLI de Windows.composer create-project symfony/skeleton my_project
localhost/my_project/public/
Ici, j'ai le message d'erreur:
Erreur fatale: composer.lock a été créé pour PHP version 7.4 ou supérieure mais la version PHP actuelle est 7.3.11.
Lorsque je vérifie ma version php dans la CLI avec php -v
j'obtiens le résultat que j'utilise PHP 7.4.0 (cli). Lorsque je vérifie la version php en cliquant sur PHPInfo sur le tableau de bord de XAMPP (localhost / dashboard / phpinfo.php), la page me montre la version 7.3.11 de php.
Dans le dossier symfony créé se trouve un fichier appelé symfony.lock . Il existe une entrée appelée "php": { "version": "7.4" },
La modification de cette entrée n'a pas résolu mon problème.
Des idées pour résoudre ça? Et pourquoi je ne peux pas installer et tester le plus récent symfony avec XAMPP?
Merci beaucoup les gars!
Musa
14 Réponses :
Vous pouvez exécuter la composer update
à composer update
pour réinstaller les versions de la bibliothèque du fournisseur compatibles avec votre version de PHP.
Cela peut vous arriver si vous disposez de 2 conteneurs Docker différents exécutant le même projet. Ils prennent à tour de rôle les demandes entrantes. Pour résoudre ce problème, recherchez un ancien conteneur Docker zombie qui utilise PHP 7.3.11 et simplement docker stop
et docker rm
.
Merci pour l'indice. Mais je n'ai jamais installé de conteneurs Docker. Je considérerai votre approche lorsque j'obtiendrai à nouveau le même message d'erreur.
Dans le dossier de votre application, créez un fichier texte et tapez 7.4
, puis renommez le fichier .php-version
sans nom, juste l'extension. Et ça devrait marcher.
C'est heureusement assez facile à résoudre. Vous pouvez demander à votre composer.json d'installer des bibliothèques de fournisseurs basées sur une version spécifique de PHP.
Par exemple, nous avons un projet en cours de migration de PHP5 vers PHP7. Nous ne pouvons pas installer uniquement les versions PHP7 des bibliothèques, nous ajoutons donc ceci à votre composer.json:
"config": { "platform": { "php": "5.3.29" } },
Vous devriez maintenant pouvoir installer. Supprimez votre composer.lock
, puis lancez l' composer install
!
Voici la documentation pertinente:
Merci beaucoup. Cela m'a aidé. J'ai continué à recevoir ce message d'erreur même après avoir exécuté composer dump-autoload
. J'ai deux versions différentes de php7.x en cours d'exécution. php7.3 et php7.4. J'ai dû laisser php7.3 par défaut car de nombreuses applications sur notre serveur l'utilisaient. L'application de ce correctif à mon composer.json a résolu le problème et maintenant l'application fonctionne correctement.
J'ai résolu ça en courant
$ symfony local:php:refresh
du dossier du projet, car la sortie de l'exécution de $ php --version
m'a donné PHP 7.4.1 (cli)
tandis que $ symfony php --version
m'a donné PHP 7.3.13-1+ubuntu16.04.1+deb.sury.org+1
.
Après l'actualisation, ils ont montré les mêmes versions.
Edit: Cela nécessitait l'utilisation du symfony-binary
Il semble que vous deviez supprimer composer.lock ( rm composer.lock
), puis faire une composer update
également
Vous devez exécuter composer dump-autoload
Cela corrigera le chargeur automatique, mais des packages seront toujours installés, ce qui pourrait ne pas être compatible avec PHP 7.3. Il est préférable de définir l'option de plate-forme comme indiqué dans cette réponse afin que Composer sache que tout fonctionne dans la version PHP sélectionnée.
J'avais la même chose et pouvais le réparer en supprimant un chemin d'exportation avec php 7.2 dans mon zshrc.
le dossier php dans lequel le compositeur a installé et le serveur apache tel que xampp, wampp, la version lampp doivent être similaires.
par exemple, si la version de php avec laquelle composer est installé est 7.4 ou supérieure, la version du serveur Apache telle que xampp, wampp, lampp doit également être 7.4 ou supérieure
cela peut facilement arriver si vous avez deux versions différentes de php sur votre machine locale. Pour contourner cela, recherchez la version de php dans la console qui correspond à ce que votre serveur local exécute.
rm composer.lock /usr/bin/php /usr/local/bin/composer install
Composer recréera ensuite le fichier de verrouillage avec la version appropriée de php.
Cela peut être dû au fait que vous avez téléchargé le fichier vendor/autoload.php
généré sur une autre version de php. C'est souvent le cas lorsque vous utilisez CI / CD pour créer votre application PHP.
La meilleure approche serait donc d'exclure ce fichier de vos artefacts au lieu d'exécuter composer dump-autoload
(ce qui pourrait être la dernière solution).
J'ai eu ce problème dans Azure WebApp que j'ai résolu en définissant le CGI sur la version correcte
<handlers> <remove name="PHP74_via_FastCGI"/> <add name="PHP74_via_FastCGI" path="*.php" verb="GET, PUT, POST, DELETE, HEAD, OPTIONS" modules="FastCgiModule" scriptProcessor="D:\Program Files\PHP\v7.4\php-cgi.exe" resourceType="Either" requireAccess="Script"/> </handlers>
Avec 2 versions de PHP installées, vous avez probablement oublié de modifier le fichier etc / hosts
pour le domaine de test. Ou vous devez modifier le DNS.
# etc/hosts 127.0.0.1 localhost
Je ne sais pas comment fonctionne le programme d'installation de XAMPP (puisque j'installe et configure généralement manuellement), mais je peux supposer que très probablement lors de l'installation d'un nouveau XAMPP, il a changé les chemins dans la variable PATH (pourquoi la console fonctionne avec la version 7.4 ) et ajouté des hôtes au fichier etc / hosts
mais n'a pas supprimé les anciens hôtes (le site fonctionne donc avec l'ancienne version).
Dans mon cas, les versions PHP sont séparées par IP. Si vous avez 2 versions de PHP sur une IP, vous devrez alors en arrêter une pour en démarrer une autre ou séparer les versions par ports. Sinon, conflit d'intérêts.
exemple
#httpd.conf -Apache settings (Apache folder for PHP 7.4) Listen 127.0.0.1:80
#httpd.conf -Apache settings (Apache folder for PHP 7.3) Listen 127.0.0.1:80
//file etc/hosts #old host -forgot to delete 127.0.0.71 demo.symfony.local #new host 127.0.0.74 demo.symfony.local
Résultat: localhost contactera celui qui a occupé le premier port 127.0.0.1:80 dans la file d'attente d'écoute.
Un peu tard à la fête mais dans mon cas (serveur Apache sur Ubuntu 18.04), mis à part la désinstallation des versions précédentes de PHP et l'installation de PHP v.7.4, j'ai dû supprimer php7.2.conf
et php7.2.load
de /etc/apache2/mods-available/
pour mon projet Symfony pour enregistrer que je suis bien sur la version 7.4. Apparemment, ces fichiers ont persisté après avoir purgé toutes les versions précédentes de PHP de mon système et installé PHP v.7.4.
Mon problème était de mettre à jour la version php avec sudo update-alternatives --config php
n'a pas mis à jour php-cgi.
Symfony CLI utilisait toujours l'ancienne version de php-cgi:
sudo apt-get install -y php-cgi
Je l'ai résolu en mettant à jour php-cgi:
symfony local:php:list âââââââââââ¬ââââââââââââ¬âââââââââââââ¬ââââââââââ¬âââââââââââââââââ¬ââââââââââ¬ââââââââââ â Version â Directory â PHP CLI â PHP FPM â PHP CGI â Server â System? â âââââââââââ¼ââââââââââââ¼âââââââââââââ¼ââââââââââ¼âââââââââââââââââ¼ââââââââââ¼âââââââââ⤠â 7.2.34 â /usr â bin/php7.2 â â â PHP CLI â â â 7.3.23 â /usr â bin/php7.3 â â bin/php-cgi7.3 â PHP CGI â â â 7.4.11 â /usr â bin/php7.4 â â bin/php-cgi7.3 â PHP CGI â * â âââââââââââ´ââââââââââââ´âââââââââââââ´ââââââââââ´âââââââââââââââââ´ââââââââââ´ââââââââââ
Vous avez installé deux versions de php. Le serveur xampp utilise l'un et la ligne de commande utilise l'autre. La chose la plus simple à faire est d'utiliser le serveur Symfony intégré au lieu du serveur apache xampp. Si vous pensez que vous devez utiliser le serveur Apache, configurez-le pour utiliser php 7.4. Ce qui signifie probablement attendre que xampp publie une nouvelle version. Ou vous pouvez ajuster votre PATH pour utiliser php 7.3 et recommencer.
@Cerad: Merci pour votre réponse. :) Je décide d'installer le PHP 7.3, de changer les variables globales, et ainsi de suite. Maintenant, cela fonctionnait avec ma version XAMPP.