Partage
  • Partager sur Facebook
  • Partager sur Twitter

Foire Aux Questions PHP

11 septembre 2013 à 11:23:51

L'icône de WAMP reste bloquée sur l'orange !

Il peut y avoir plusieurs raisons à cela, l'une des plus courantes est que le port HTTP par défaut (port 80) est déjà utilisé par un autre programme.

Pour savoir si c'est bien votre cas ainsi que connaître le programme vous gêne exactement, faites un clic droit sur l'icône de WAMP, puis allez sur Apache > Service > Tester le port 80. La ligne de commande va s'ouvrir et vous dira si le port 80 de votre application est libre, ou vous dira ce qui l'utilise.

Il faudra un port libre pour pouvoir utiliser WAMP.

  • Si vous êtes certain que le port 80 est libre, on est dans un autre cas où un des services de WAMP n'est pas installé correctement. Regardez à la fin du message.
  • Si cela fonctionnait jusqu'à ce que vous créiez un fichier d'hôte virtuel (<VirtualHost>), regardez ce message

Pour libérer le port 80, deux possibilités s'offrent à vous :

Solution rapide : changer le port utilisé par apache

Cliquez sur l'icône de WAMP dans la zone de notifications, et allez cliquer sur Apache > httpd.conf. Le bloc-notes de Windows s'ouvrira et affichera le fichier de configuration d'apache. Dans celui-ci, cherchez une ligne qui contient Listen 80, qui spécifie sur quel port apache attend les connexions. Changez le 80 par n'importe quel nombre (on met souvent 8080), puis redémarrez WAMP.

Avec cette modification, il vous faudra désormais toujours spécifier le port quand vous vous connecterez à une adresse locale
Par exemple, si vous avez mis 8080, pour accéder au localhost, il vous faudra entrer http://localhost:8080. Si vous avez défini un VirtualHost avec ServerName mon.site.local, l'adresse sera désormais http://mon.site.local:8080.

Solution la plus simple à l'usage : libérer le port

Parmi les programmes qui utilisent aussi le port 80, il y a

  • IIS (présent et activé par défaut sous Windows Professionel et Edition Intégrale)
  • Skype
  • SQL Server Reporting Services
  • SQL Server Express (parfois installé avec les dernières versions de Visual Studio, ou avec WebMatrix)
Cette liste ne peut contenir tous les programmes qui poseraient problème

Elle sera probablement mise à jour en cas de nouveautés, mais n'hésitez pas à vous demander si d'autres programmes que vous auriez installés depuis la dernière fois que WAMP fonctionnait ne seraient pas désormais en conflit avec apache. Parfois, des mises à jour changent aussi certains paramètres d'un programme.

Désinstallation d'IIS

IIS est à Windows ce qu'apache est à LINUX, soit un gestionnaire de serveur web. Mais si vous êtes en train de lire ceci, vous utilisez WAMP, vous n'aurez donc probablement pas besoin de ce programme, et pourrez le désinstaller sans autre. Pour ce faire, rendez-vous dans le panneau de configuration, à la rubrique Programmes et fonctionnalités. Dans la partie de gauche de la fenêtre, vous avez un lien Activer ou désactiver des fonctionnalités Windows. Cliquez dessus. Dans la nouvelle fenêtre qui s'affiche, cherchez et décochez Instance principale Web des services Internet (IIS). Validez avec OK. Il vous faudra redémarrer votre ordinateur pour que les changements soient totalement effectifs. Si vous souhaitez garder IIS installé, il faudra désactiver le démarrage automatique du service (voir plus bas).

Skype

Pour faire en sorte que Skype ne gêne pas, il suffit de décocher la case Utiliser les ports 80 et 443 comme alternative dans les options de connexion. Vous n'avez pas besoin de vous connecter à un compte pour y accéder. Si vous êtes déjà connecté, vous trouverez les options de connexion dans la partie Avancées. Dans tous les cas, il vous faudra redémarrer Skype pour que ces changements soient pris en compte.

Désinstaller SQL Server Reporting Services

Si vous le souhaitez, vous pouvez sans autre désinstaller ce composant, qui permet de se connecter au serveur SQL pour récupérer des informations sur l'état du serveur, des bases de données, etc.. Pour désinstaller SQL Server Reporting Services, il vous faudra modifier votre installation (Panneau de configuration > Programmes et fonctionnalités, sélectionner SQL Server dans la liste, puis cliquer sur Modifer ou, selon la version, Désinstaller/Modifier qui apparaît au sommêt de la liste) de MS SQL Server.

Désactiver les services plutôt que désinstaller

Si vous ne voulez ou ne pouvez pas désinstaller les composants qui posent problème, vous pouvez aussi faire en sorte que les services ne démarrent qu'à votre demande. Il vous faudra cependant effectuer les manipulations en mode administrateur. Commencez par ouvrir le panneau de configuration, puis cliquez sur Outils d'administration et choisissez Services. Une fois de plus, vous aurez une nouvelle fenêtre qui s'ouvrira. Dans celle-ci, la liste des services disponibles s'affiche. Cherchez le service que vous souhaitez, puis effectuez un clic droit dessus, et cliquez sur Propriétés. Dans l'onglet Général, vous trouverez une liste de choix Type de démarrage. Sélectionnez donc Manuel. Certains services peuvent être démarrés par la console d'administration du "programme parent" (SQL Server reporting Services), d'autres démarreront en même temps que le programme parent (SQL Server Express avec Visual Studio), et d'autres encore vous forceront à repasser par le gestionnaire de services, comme nous venons de le faire. Seulement, cette fois, vous sélectionnerez Démarrer dans le menu contextuel du service.

Déterminer quel programme occupe le port 80 sans WAMP

Si le testeur de port de WAMP n'est pas assez précis, vous pouvez essayer d'aller chercher l'information vous-même. Lancez l'invite de commande, et tapez netstat -ano | find "0.0.0.0:80". Retenez le dernier nombre de la ligne. Accédez au gestionnaire des tâches Windows, et rendez-vous dans l'onglet Services. Cherchez le nombre que vous avez depuis l'étape précédente dans la colonne PID. Quand vous l'avez trouvé, faites un clic droit sur la ligne correspondante, et choisissez "Arrêter le processus". Il arrive parfois que ce ne soit pas un service, mais un programme, et vous ne le trouverez donc pas dans l'onglet Services. Rendez-vous plutôt dans Processus. Il faut tout d'abord afficher la colonne PID. Tout en restant sur l'onglet, allez dans le menu Affichage > Sélectionner des colonnes…, et cochez PID (premier dans la liste). Validez avec OK. Cherchez le processus avec le PID correspondant au nombre noté plus tôt, et sélectionnez la ligne en cliquant dessus. Il ne vous reste plus qu'à choisir Arrêter le processus dans le menu contextuel.

Le port 80 est libre, j'en suis absolument sûr, mais ça reste orange !

apache et MySQL fonctionnent comme des services sous Windows. Pour que ces services démarrent correctement, il faut qu'ils soient installés correctement. Pour vérifier cela, cliquez sur l'icône de WAMP dans la barre de statut, puis pointez sur Apache > Service. Si les options Arrêter le service et Redémarrer le service sont grisées, cliquez sur Installer le service, juste en dessous. De manière similaire pour MySQL : cliquez sur l'icône de WAMP dans la barre de statut, puis pointez sur MySQL > Service. Si les options Arrêter le service et Redémarrer le service sont grisées, cliquez sur Installer le service, juste en dessous.

Si l'installation ne fonctionne pas parce que le port est utilisé, reprenez au début de ce message.

Après avoir effectué les manipulations, redémarrez WAMP.

-
Edité par Ymox 10 juin 2014 à 8:04:56

  • Partager sur Facebook
  • Partager sur Twitter
11 septembre 2013 à 11:25:11

Mon code n'est pas interprété ! Je le vois dans la page !

Moi je ne le vois pas, rien de ce qu'il devrait faire n'est fait, et je n'ai aucune erreur !

Si vous n'avez pas http:// au début de l'adresse, vous n'accédez pas correctement à vos fichiers.

Le PHP ayant besoin d'être interprété par le serveur (ce qui n'est pas le cas du HTML), il faut qu'il soit quelque part où WAMP sait qu'il doit traiter du PHP, soit dans le dossier www de votre installation de WAMP. Vous devez y accéder avec une adresse commençant par http://.

Mais j'y accède correctement, ça ne change rien !

  1. Utilisez l'extension .php pour vos fichiers de code PHP, même si ceux-ci génèrent du HTML. Du code PHP dans un fichier avec l'extension .html peut soit s'afficher tel quel dans la page, soit ne pas être visible du tout, mais ne sera en aucun cas interprété
  2. Utilisez bien les marques ouvrantes PHP complètes <?php. Si vous souhaitez pouvoir utiliser les versions courtes <? (et <?= sous PHP < 5.4), il vous faut activer l'option short open tags pour PHP. Pour activer cela, cliquez sur l'icône de WAMP dans la zone de notifications, et allez sur PHP > Configuration PHP > short open tags (premier élément de la liste).
    Depuis PHP 5.4, <?= est toujours disponible, indépendamment de <?
    Si vous avez des documents XML sur vos sites, surtout si vous les générez dynamiquement, activer cette option vous force à insérer la déclaration XML avec echo '<?xml version="1.0" encoding="utf-8" ?>'
  3. La balise <?php ne doit pas contenir d'espace. En revanche, elle doit absolument être suivie d'un caractère blanc (espace ou retour à la ligne). Par exemple :
    <?phpecho $truc; // ne fonctionnera pas, echo est "collé" à <?php
    <? php echo $truc; // ne fonctionnera pas, php n'est pas "collé" à <?

-
Edité par Ymox 10 juin 2014 à 8:29:34

  • Partager sur Facebook
  • Partager sur Twitter
12 septembre 2013 à 8:50:23

J'ai une erreur 403 quand j'accède à http://localhost, mais pas si je mets 127.0.0.1

Ce souci a été résolu avec la version 2.5 de WAMP. Les informations suivantes sont pour WAMP 2.4

Là, il est très probable que cela vienne de la configuration d'apache qui n'est pas prévue pour IPv6. L'opération ci-après est parmi celles recommandées par l'un des membres les plus actifs de la communauté francophone de WAMP pour sa version 2.4

Ça me le fait quand je veux accéder à phpMyAdmin, SqlBuddy ou webGrind !

Cela veut dire que les alias qui ont été configurés n'ont pas été pensés pour IPv6.

Dans le dossier qui contient www, il y a aussi un dossier alias, avec trois fichiers qu'il nous faut modifier. Si vous n'utilisez que phpMyAdmin, vous pouvez ne modifier que phpmyadmin.conf. Dans chacun des trois fichiers, vous trouverez ces deux lignes

Allow from 127.0.0.1
Allow from localhost
Tout ce qu'il faut faire est de remplacer ces lignes par Require local :magicien:

J'ai aussi cette erreur avec mes hôtes virtuels !

Vous avez probablement une ligne Allow from 127.0.0.1, et pas d'autre. Il faudrait transformer en Require local

Avant apache 2.4, vous deviez utiliser la directive Allow from 127.0.0.1 ::1 localhost à la place de Require local

-
Edité par Ymox 9 juin 2014 à 18:41:38

  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2014 à 18:29:32

Je viens de créer un fichier VirtualHost, ça marchait très bien avant, mais mantenant, l'icône de WAMP reste orange !

Il y a un problème de syntaxe dans votre fichier. Si vraiment vous n'arrivez pas à le trouver, apache peut vous dire ce qui ne va pas. Pour demander à apache si sa configuration est acceptable et qu'il nous dise ce qui ne va pas, il faut lancer la commande %WAMPDIR%\bin\apache\apache%APACHE_VERSION%\bin\httpd.exe -t, en remplaçant %WAMPDIR% par le dossier d'installation de WAMP, et %APACHE_VERSION% par le numéro complet de version d'apache, avec les points.

-
Edité par Ymox 10 juin 2014 à 8:06:27

  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2014 à 18:31:02

J'ai modifié mon php.ini, mais ça ne change rien !

Cela peut venir de ce que le fichier contient une erreur de syntaxe, ou alors que celui qui a été modifié n'est pas celui pris en compte.

Il y a trois fichiers de configuration de PHP dans WAMP

  • %WAMPDIR%\bin\php\php[version]\php.ini : c'est celui qui sera pris en compte par PHP en ligne de commandes. Vous pouvez vérifier son emplacement avec la commande php --ini
  • %WAMPDIR%\bin\php\php[version]\phpForApache.ini : celui-ci est copié depuis le répertoire de PHP vers le répertoire des binaires d'apache lors du premier lancement ou au changement de version de PHP
  • %WAMPDIR%\bin\apache\apache[version]\bin\php.ini : c'est la copie de celui ci-dessus, effectuée lors du changement de version de PHP ou au premier démarrage. C'est donc la version qui fait foi pour le module apache, celle qui est utilisée le plus souvent quand on accède par HTTP au serveur, et de facto celle qui est mentionnée dans phpinfo
Il est intéressant de vérifier quel fichier est réellement pris en compte dans la ligne de commandes et dans phpinfo, surtout si vous êtes passé d'une autre solution à WAMP, ou que vous l'avez mis à jour

  La copie de phpForApache.ini ne se fait pas à chaque démarrage de WAMP : si %WAMPDIR%\bin\apache\apache[version]\bin\php.ini existe déjà, aucune copie ne sera faite, sauf si on change la version de PHP avec le menu ad hoc de WAMP. Notez aussi que, pour que la ligne de commandes fonctionne correctement, il faut renseigner la variable d'environnement PATH. Cela risque de poser des problèmes si vous avez plusieurs versions de PHP, parce que là, vous ne pouvez pas aisément changer quelle version est utilisée dans la ligne de commandes (et il est facile d'oublier cela). Donc si vous avez deux versions de PHP, que vous utilisez une des deux uniquement pour le serveur apache, et que c'est l'autre qui est utilisée en ligne de commandes, vous n'avez probablement pas modifié les fichiers pour la bonne version.

-
Edité par Ymox 10 juin 2014 à 14:58:16

  • Partager sur Facebook
  • Partager sur Twitter
9 juin 2014 à 18:31:26

Quelle est la différence entre == et === ?

  == effectue une comparaison "paresseuse". Cette comparaison ne tient pas compte du type de ce qui est comparé : PHP va prendre les deux parties et les convertir en deux valeurs du même type pour voir si elles correspondent. Voici un tableau qui permet de voir ce qu'il en résulterait

$a == $b$b = ''$b = 1$b = 0$b = ' '$b = 'a'$b = null$b = false$b = true
$a = ''truefalsetruefalsefalsetruetruefalse
$a = 1falsetruefalsefalsefalsefalsefalsetrue
$a = 0truefalsetruetruetruetruetruefalse
$a = ' 'falsefalsetruetruefalsefalsefalsetrue
$a = 'a'falsefalsetruefalsetruefalsefalsetrue
$a = nulltruefalsetruefalsefalsetruetruefalse
$a = falsetruefalsetruefalsefalsetruetruefalse
$a = truefalsetruefalsetruetruefalsefalsetrue

  Avec ===, PHP va effectuer une comparaison stricte, et ne va faire aucune conversion, ce qui veut dire que le type de valeur est pris en compte. Le même tableau appliqué à === se présente ainsi :

$a === $b$b = ''$b = 1$b = 0$b = ' '$b = 'a'$b = null$b = false$b = true
$a = ''truefalsefalsefalsefalsefalsefalsefalse
$a = 1falsetruefalsefalsefalsefalsefalsefalse
$a = 0falsefalsetruefalsefalsefalsefalsefalse
$a = ' 'falsefalsefalsetruefalsefalsefalsefalse
$a = 'a'falsefalsefalsefalsetruefalsefalsefalse
$a = nullfalsefalsefalsefalsefalsetruefalsefalse
$a = falsefalsefalsefalsefalsefalsefalsetruefalse
$a = truefalsefalsefalsefalsefalsefalsefalsetrue

Donc $a === $b vaut true uniquement si $a et $b sont exactement identiques

-
Edité par Ymox 10 juin 2014 à 8:06:58

  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2015 à 14:38:13

L'envoie de mail en localhost ne fonctionne pas / Comment envoyer un mail en local avec Wamp !

Si vous avez installé WAMP, en laissant les paramètre par défauts, du SMTP et l'adresse, il est normal que vous ne pouviez utiliser la fonction mail. Pour modifier le SMTP, commencer déjà par chercher le SMTP de votre FAI (Fournisseur d'Accès à Internet) sur ce lien Une fois votre SMTP trouvé, il vous faut modifier la ligne correspondante dans le php.ini. Pour se faire : <br/>

  • Clique gauche sur l'icône WAMP
  • Choisissez le dossier PHP
  • Cliquez sur php.ini

Une fois le fichier ouvert, faites un petit CTRL + F, et recherchez soit : mail function ou SMTP

Normalement, vous devriez arriver sur ces quelques lignes :

[mail function]
; For Win32 only.
; http://php.net/smtp
SMTP = localhost
; http://php.net/smtp-port
smtp_port = 25

Remplacez donc localhost par le SMTP que vous avez trouvé précédemment.

Le redémarrage de WAMP est obligatoire pour que WAMP puisse prendre en compte les modifications apportées sur le fichier php.ini !
Attention ! Il vous faut impérativement avoir un serveur qui accepte les connexions non sécurisées ! Par exemple GMAIL accepte uniquement les connexions sécurisées !

-
Edité par Na-Tsu 11 août 2015 à 18:59:50

  • Partager sur Facebook
  • Partager sur Twitter
21 novembre 2017 à 9:36:44

Contribution de sannydorman

========

Afficher la date et l'heure en PHP

<meta charset="utf-8" />
Les formats anglais sont là : <a href="http://php.net/manual/fr/function.date.php">http://php.net/manual/fr/function.date.php</a> <br /><br />

 
Today's date <?php echo date('d F Y').'<br><br>'; ?>
UTC Time <?php echo date('H:i:s').'<br/><br/>'; ?> <br/>

--------------------------------------------------------------------------<br /><br />

La liste des timezones : <a href="http://php.net/manual/fr/timezones.php">http://php.net/manual/fr/timezones.php</a><br /><br />

Heure fraçaise <?php 
date_default_timezone_set('Europe/Paris');
echo date('H: m: s'); ?> <br/><br/><br/>

--------------------------------------------------------------------------<br /><br />

Les autres formats sont là : <a href="http://php.net/manual/fr/function.strftime.php">http://php.net/manual/fr/function.strftime.php</a> <br /><br />

strftime Date française : 
<?php 
setlocale (LC_TIME, 'fr_FR.utf8','fra'); 
echo (strftime("%A %d %B"));
 ?><br /><br />
 
strftime Heure française : 
<?php 
setlocale (LC_TIME, 'fr_FR.utf8','fra'); 
echo (strftime("%H %M %S"));
 ?><br /><br />

 ---------------------------------<br />
 
<?php
setlocale(LC_TIME, "C");
echo strftime("%A");
setlocale (LC_TIME, 'fr_FR.utf8','fra'); 
echo strftime(" in French is %A");

?>

Faire une requête MySQL avec phpMyAdmin

Dans la base de données de cet exemple, le champs attribué pour les dates se nomme : date

infos :

DAY()MONTH()YEAR() : extraire le jour, le mois ou l'année

HOUR()MINUTE()SECOND() : extraire les heures, minutes, secondes

--------------------------------------------------------------------------------------------------------------------

MySQL directement depuis phpMyAdmin :

SELECT * , DAY(date) AS jourMONTH(date) AS moisYEAR(date) AS annee, HOUR(date) AS heuresMINUTE(date) AS minutesSECOND(date) AS secondes FROM `billets`

--------------------------------------------------------------------------------------------------------------------

PHP :

$reponse = $bdd->query(' SELECT * , DAY(date) AS jourMONTH(date) AS moisYEAR(date) AS anneeHOUR(date) AS heuresMINUTE(date) AS minutes, SECOND(date) AS secondes FROM billets');

echo 'Le  ' . $donnees['jour']  .  ' / '  . $donnees['mois'] .  ' / ' . $donnees['annee'] . ' &nbsp; à &nbsp; ' . $donnees['heures'] .  ' h &nbsp;' . $donnees['minutes'] . ' min &nbsp; ' .$donnees['secondes'] .  ' sec<br />';

-
Edité par Benzouye 21 novembre 2017 à 9:37:52

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
27 mars 2020 à 9:28:10

Je n'arrive pas à me connecter à ma base de données, alors que je la vois dans phpMyAdmin ! Que se passe-t'il ?

Certaines solutions serveur paramètrent MySQL pour qu'il écoute sur un autre port que le 3306, qui est celui par défaut.

Une des méthodes les plus simples savoir ce qu'il y a à faire est de se connecter à phpMyAdmin.
Rendez-vous sur une page de phpMyAdmin où vous voyez vos tables. Maintenant, regardez en haut de celle-ci, un peu sur la gauche, là où il y a « ← Serveur : … ». La fin de la chaîne est importante. Si vous avez deux points et un nombre (par exemple « … :3325 ») et que ce nombre n'est pas 3306, le SGBD (Système de Gestion de Base de Données) contenant vos tables n'écoute pas sur le port "par défaut" et il faut spécifier cela à la connexion.

Spécifier le port pour le bon SGBD

Les scripts de connexion utilisent, par exemple :

<?php
$pdo = new PDO('mysql:host=localhost;dbname=database;', 'user', 'password');

$mysqli = new mysqli('localhost', 'user', 'password', 'database');
// Ou en procédural
$mysqli = mysqli_connect('localhost', 'user', 'password', 'database');

Pour se connecter avec un autre port que le 3306, il faut le préciser :

<?php
$pdo = new PDO('mysql:host=localhost;dbname=database'
        . ';port=' . 3325, // Notez bien le point-virgule ;
    'user', 'password');

$mysqli = new mysqli('localhost', 'user', 'password', 'database', 3325);
// Ou en procédural
$mysqli = mysqli_connect('localhost', 'user', 'password', 'database', 3325);

WampServer

Les dernières versions en date de WampServer fournissent deux SGBD : MariaDB et MySQL, et le SGBD fonctionnant sur le port par défaut peut changer. Les deux ne peuvent de toute façon pas écouter sur le même port quand ils fonctionnent en même temps, celui sur le port par défaut n'est donc pas celui où vous avez créé vos bases de données.

Il n'est pas obligatoire d'utiliser MySQL si ce n'est pas le SGBD par défaut de votre WampServer, et il n'y a pas de différence gênante entre les deux.
A savoir qu'à terme, seul MariaDB risque d'être fourni avec WampServer.

Remplacer MySQL par MariaDB et vice-versa

Il est impératif de sauvegarder vos bases de données et utilisateurs dans des fichiers SQL par export avant de désactiver un des SGBD. C'est le seul moyen pérenne de transférer vos bases de données entre MySQL et MariaDB.
Le titre « Sauvegarde des bases de données » de la section « Sauvegarder, sauvegarder, sauvegarder ! » du tutoriel WampServer sur Zeste de Savoir peut vous aider.

Il existe un outil pour inverser d'un seul clic le SGBD par défaut si les deux sont activés (MySQL et MariaDB), accessible au clic droit sur l'icône de WampServer dans la barre de statut > Outils > Inverser SGBD par défaut…. L'étiquette est complétée par MySQL <-> MariaDB ou MariaDB <-> MySQL selon le SGBD par défaut.

Bien sûr, il vous reste à importer vos bases de données et utilisateurs préalablement sauvegardés.

Désactiver le serveur inutile

Vous n'êtes pas obligé de conserver l'utilisation des deux gestionnaires MySQL et MariaDB, vous pouvez ne conserver que celui qui vous convient et vous pouvez même désactiver totalement les deux gestionnaires de bases de données avec un clic droit sur l'icône de WampServer dans la barre de statut > Paramètres Wamp > décocher soit Autoriser MariaDB, soit Autoriser MySQL

-
Edité par Benzouye 28 février 2021 à 11:18:37

  • Partager sur Facebook
  • Partager sur Twitter