Imprimer Agrandir le texte Réduire le texte

PHP

Erreurs PHP

Voici une liste non exhaustive des messages d'erreur qui peuvent apparaître ainsi que les solutions et/ou opérations à effectuer.
- Erreur 500 :
Message d'erreur : Erreur 500 Internal Server Error
Solution
Vérifiez dans le répertoire dans lequel se trouve le script et/ou dans les répertoires de niveau supérieur la présence d'un (ou plusieurs) fichier(s) .htaccess. Si tel est le cas, renommez-le (les) temporairement en temp.htaccess. Si vos scripts PHP fonctionnent ensuite correctement, c'est qu'une (ou plusieurs) fonctionnalité(s) utilisée(s) dans l'un des fichiers .htaccess n'est (ne sont) plus supportée(s) sur la nouvelle architecture des pages Web. Dans le cas contraire, il s'agit d'un problème temporaire lié aux serveurs PHP assurant le load balancing ou à la configuration du serveur Web. Réactualisez la page. Si le problème persiste, signalez-le dans le newsgroup proxad.free.services.pagesperso.

- Erreur de connexion à la base de données :
Message d'erreur : Warning: mysql_connect(): Can't create a new thread (err no 12); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug in [?]
Solution
Il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur de connexion à la base de données :
Message d'erreur : Lost connection to MySQL server during query
Solution
Il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur de connexion à la base de données :
Message d'erreur : too many connections
Solution
Il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur de connexion à la base de données :
Message d'erreur : Impossible de se connecter à la base de données ou Could not connect to the database ou Warning: mysql_connect(): Access denied for user 'login'@123.456.789.012 (using password: YES)
Solution
Vérifiez que le bon mot de passe a été indiqué dans la configuration du script PHP que vous utilisez ou dans la fonction d'accès à la base de données. Si le problème n'est pas lié au mot de passe, il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur de connexion à la base de données :
Message d'erreur : Warning: mysql_connect(): Unknown MySQL server host 'login.sql.free.fr'
Solution
Il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur d'accès à un fichier ou à un dossier :
Message d'erreur : Warning: opendir() [function.opendir]: open_basedir restriction in effect. File(/var/www/free.fr/X/Y/login/) is not within the allowed path(s): (/mnt/ABC/sdc/X/Y/login) in /mnt/ABC/sdc/X/Y/login/script.hp on line X
Solution
Le chemin d'accès absolu à votre compte a été modifié. Vous devez le modifier de nouveau à la main. Pour éviter ce genre de problème, nous vous conseillons d'utiliser la variable $_SERVER["DOCUMENT_ROOT"] dans la mesure du possible. Ainsi, lorsque votre site sera déplacé ou que vous l'utiliserez en local pour faire des tests, vous n'aurez pas à modifier les chemins absolus. De nombreux scripts PHP utilisent encore trop souvent la variable en dur. Il est difficile de dresser une liste exhaustive des modifications à effectuer pour chacun de ces scripts. Dans un premier temps, renseignez-vous sur le site du (ou des) créateur(s) du script concerné. Vous avez aussi la possibilité de poser la question sur le newsgroup proxad.free.services.pagesperso. Pensez à utiliser la fonction Recherche.

- Erreur d'accès à un fichier :
Message d'erreur :Warning: file_exists() [function.file-exists]: Unable to access /mnt/ABC/free.fr/X/Y/fichier in /mnt/ABC/free.fr/X/Y/script.php on line X
Solution
Une nouvelle restriction empêche momentanément d'accéder aux gros fichiers avec les fonctions d'accès/lecture/écriture des fichiers de PHP. Pour le moment, n'accédez pas à ces fichiers avec les fonctions PHP.

- Erreur liée à la fonction eMail :
Message d'erreur : mail(): Quota mail atteint
Solution
La fonction eMail est limitée. Attendez la semaine suivante pour envoyer des eMails à partir de ce compte Pages Perso.

- Erreur liée à la fonction eMail
Message d'erreur : Warning: mail() [function.mail]: ligne incorrect dans process_login! in /mnt/ABC/free.fr/A/B/login/script.php on line C
Solution
Il s'agit d'un problème temporaire que vous pouvez signaler dans le newsgroup proxad.free.services.pagesperso s'il persiste.

- Erreur liée à l'espace disque
Message d'erreur : Warning: Unknown(): write failed: No space left on device (28)
Solution
Il s'agit d'un problème temporaire. Le responsable est avisé de ce genre de problème.

- Erreur liée à une table endommagée de la base de données :
Message d'erreur : Query failed: [?] (Table './login/table' is marked as crashed and should be repaired)
Solution
Réparez la table en vous rendant sur http://sql.free.fr.

- Erreur d'accès à certains sites Web avec les fonctions fopen et fsockopen
Message d'erreur : Warning: main(http://login.free.fr/script.php) [function.main]: failed to open stream: Connection timed out in /mnt/ABC/sdc/X/Y/login/script.php on line X
Solution
Vous ne pouvez pas accéder au fichier de votre espace Pages Perso par cette méthode. Utilisez l'include normal.

Dans tous les autres cas, merci de vous connecter au newsgroup proxad.free.services.pagesperso afin de décrire clairement le problème (script, message d'erreur, URL sur laquelle le problème est reproductible). Vous pouvez également, durant cette période, rencontrer des problèmes de lenteur d'affichage de vos pages dynamiques et/ou statiques et/ou l'affichage de pages blanches et/ou des erreurs 403 (serveur introuvable). Ces dysfonctionnements sont liés à des bugs dans les applications libres utilisées par Free. Nous nous efforçons de corriger ce type de problème.

Chemins absolus

Voici les modifications à effectuer pour que les scripts indiqués ci-dessous fonctionnent, quel que soit le chemin absolu du serveur sur lequel ils sont hébergés (celui de Free ou en local).

Le terme répertoire d'installation désigne le répertoire dans lequel est installé le script PHP (exemple script/joolma si vous y accédez par http://login.free.fr/script/joolma).

- Galette
Localisez le fichier config.inc.php dans /répertoire d'installation/includes. Cherchez dans ce fichier la ligne qui contient l'expression define("WEB_ROOT",.
Remplacez alors cette ligne par la suivante :
define("WEB_ROOT", $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/');
- Joomla
Localisez le fichier configuration.php dans /répertoire d'installation. Cherchez dans ce fichier la ligne qui contient l'expression $mosConfig_absolute_path.
Remplacez alors cette ligne par la suivante :
$mosConfig_absolute_path = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation';
Cherchez dans ce fichier la ligne qui contient l'expression $mosConfig_cachepath.
Remplacez alors cette ligne par la suivante :
$mosConfig_cachepath = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/cache';
- Mambo
Localisez le fichier configuration.php dans /répertoire d'installation. Cherchez dans ce fichier la ligne qui contient l'expression $mosConfig_absolute_path.
Remplacez alors cette ligne par la suivante :
$mosConfig_absolute_path = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation';
Cherchez dans ce fichier la ligne qui contient l'expression $mosConfig_cachepath.
Remplacez alors cette ligne par la suivante :
$mosConfig_cachepath = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/cache';
- MediaWiki
Localisez le fichier LocalSettings.php dans /répertoire d'installation. Cherchez dans ce fichier la ligne qui contient l'expression if( defined( 'MW_INSTALL_PATH' ) ) {.
Insérez la ligne suivante avant cette ligne :
define( 'MW_INSTALL_PATH', $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation' );
- Npds
Localisez le fichier upload.conf.php dans /répertoire d'installation/modules/upload. Cherchez dans ce fichier la ligne qui contient l'expression $DOCUMENTROOT.
Remplacez alors cette ligne par la suivante :
$DOCUMENTROOT = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation';
- NUCLEUS CMS
Localisez le fichier config.php dans /répertoire d'installation. Cherchez dans ce fichier la ligne qui contient l'expression $DIR_NUCLEUS.
Remplacez alors cette ligne par la suivante :
$DIR_NUCLEUS = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/nucleus/';
Cherchez dans ce fichier la ligne qui contient l'expression $DIR_NUCLEUS.
Remplacez alors cette ligne par la suivante :
$DIR_MEDIA = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/media/';
Cherchez dans ce fichier la ligne qui contient l'expression $DIR_NUCLEUS.
Remplacez alors cette ligne par la suivante :
$DIR_SKINS = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/skins/';
- Serendipity
Localisez le fichier functions_config.inc.php dans /répertoire d'installation/include. Cherchez dans ce fichier la ligne qui contient l'expression $serendipity[$row['name']] = serendipity_get_bool($row['value']);.
Insérez la ligne suivante 2 lignes après après cette ligne :
$serendipity['serendipityPath'] = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/';
Cela devrait donner :
if (is_array($rows)) {
foreach ($rows as $row) {
// Convert 'true' and 'false' into booleans $serendipity[$row['name']] = serendipity_get_bool($row['value']); } $serendipity['serendipityPath'] = $_SERVER['DOCUMENT_ROOT'].'/répertoire d'installation/'; }
- Xoops
Localisez le fichier mainfile.php dans /répertoire d'installation. Cherchez dans ce fichier la ligne qui contient l'expression define('XOOPS_ROOT_PATH'.
Remplacez alors cette ligne par la suivante :
define('XOOPS_ROOT_PATH', str_replace("\\", "/",dirname ( __FILE__)) );
D'éventuelles modifications pourront être ajoutées en fonction des demandes formulées sur les différents canaux d'aide afin de rendre compatibles d'autres scripts PHP avec la modification du chemin absolu .

Fonction mail()

La fonction mail() est disponible chez Free, mais limitée à 2000 mails/semaine.

- Exemple d'utilisation la plus simple possible :
mail("destinataire@test.com","toto1","toto1");

- Pour plus d'informations consulter l'aide de PHP et plus précisément La fonction mail()

Fonctions PHP interdites

Par souci de performance et de sécurité, nous avons choisi de désactiver les fonctions suivantes de PHP :

  • chown
  • chmod
  • get_current_user
  • php_uname
  • putenv
  • set_time_limit
  • getmyuid
  • getmypid
  • dl
  • ini_alter
  • ini_restore
  • ini_set
  • exec
  • passthru
  • system
  • popen
  • pclose
  • leak
  • mysql_list_dbs
  • listen
  • chgrp
  • disk_total_space
  • disk_free_space
  • rmdir
  • realpath
  • tmpfile
  • link
  • shell_exec
  • proc_open
  • chroot
  • openlog
  • closelog
  • syslog
  • flock
  • socket_create_listen
  • socket_accept
  • socket_listen
  • sleep
  • usleep
  • umask
  • set_include_path
  • restore_include_path
  • symlink
  • setlocale
  • imagerotate

  • La fonction mail() fonctionne avec un quota d'envois (2 000 eMails par semaine).

    Les modules FTP et IMAP ne sont pas installés.

    Gérer des sessions PHP

    Avant toute utilisation des sessions PHP, un répertoire sessions doit être créé à la racine du compte.

    Reportez-vous alors à la documentation en ligne de PHP, accessible à l'adresse suivante : http://fr2.php.net/manual/fr/function.session-start.php.

    Restrictions d'accès via PHP

    Les restrictions d'accès simples de type HTTP Basic (comme celles générées via .htaccess) peuvent être directement implémentées via un script PHP.

    if ( !isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) 
    	|| ($_SERVER['PHP_AUTH_USER'] !== "nom_d_utilisateur" )
    	|| ($_SERVER['PHP_AUTH_PW'] !== "mot_de_passe") ) 
    {
       header('WWW-Authenticate: Basic realm="Authentifiez vous"');
       header('HTTP/1.0 401 Unauthorized');
       echo 'Acces non autorisé';
       exit;
    }
    
    echo 'Utilisateur authentifié';
    
    - Il est possible de modifier ce type d'authentification, pour gérer plusieurs couples login/mot de passe via une base de données MySQL, par exemple.

    - Il est impératif de ne rien saisir (qui soit visible à l'utilisateur en sortie, pas même un caractère espace) avant une commande header() afin de garantir son fonctionnement : si un caractère est saisi avant cette commande, le PHP envoie les en-têtes (headers) HTTP standard à une page Web, sans prendre celles entrées en compte.

    Redirection automatique de la racine vers un rép.

    L'installation automatisée des scripts PHP dispose les modules dans des répertoires et non dans la racine du site. Si on désire qu'une personne qui se connecte sur le site soit automatiquement redirigée, par exemple, vers le module spip, on peut créer un fichier texte contenant la ligne suivante :
    Redirect seeother /index.html http://monsite.free.fr/spip/
    Cette ligne a pour objet de rediriger automatiquement toute connexion à monsite.free.fr vers le répertoire spip de ce site. Remplacez monsite.free.fr et spip pour adapter la saisie à votre cas.
    Ce fichier doit s'appeler .htaccess (aucun caractère avant le point) et doit être placé dans la racine du site.
    Il peut s'avérer difficile de créer un fichier ainsi nommé sous Windows. En cas de problème, le plus simple est de donner un nom quelconque à ce fichier, de le transférer par FTP dans la racine du site et de le renommer ensuite par FTP.

    Consulter l'aide d'Apache (en anglais) pour davantage de détails.

    Aide proposée par un Freenaute sur les newsgroups.

    Fiche n° 943 accessible à l'adresse URL : http://www.free.fr/assistance/943.html