Archives pour la catégorie PHP/MySQL

Donner l’accès distant à une base de données MySQL

Voilà, dans le cadre d’une migration, j’ai dû autoriser sur mon serveur l’accès à ma base de données MySQL dont voici la marche à suivre :

Etape n ° 1: Se connecter via ssh

Se connecter via ssh sur son serveur en root (via Kitty) et saisir la ligne de commande suivante pour donner l’autorisation de l’écoute du port au niveau du firewall :

/sbin/iptables -A INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT

 

Etape n ° 2: Permettre la mise en réseau

Toujours sur le serveur, il s’agit de modifier le fichier de configuration my.inf avec l’éditeur de texte vi

vi /etc/my.cnf

Repérer la ligne avec la balise [mysqld], assurez-vous que la ligne skip-networking est commentée par « # » (ou supprimez la ligne) et ajouter la ligne suivante :

Bind-address = xxx.xxx.xxx.xxx # l'adresse ip du serveur hébergeant votre bdd

Pour connaître l’adresse IP de son serveur, un petit ifconfig avec lecture du résultat : eth0 … inet adr:xxx.xxx.xxx.xxx

Par exemple, si l’adresse de votre serveur est 88.45.121.23 :

[mysqld]
set-variable=local-infile=0
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
bind-address=88.45.121.23

Enregistrer et quitter le fichier (:wq!, cf. Vi, les raccourcis de l’éditeur de texte), puis redémarrer le service mysqld :

/etc/init.d/mysqld restart

 

Etape n ° 3: Accorder l’accès à l’adresse IP distante

Tout d’abord, connecter vous à mysql en ligne de commande :

mysql -u root -p mysql

Puis saisissez votre mot de passe (l’utilisateur ayant tous les privilèges peut également être admin, tout dépend de votre configuration mysql).

Il s’agit ensuite de donner les droits à un utilisateur de se connecter à distance via la commande suivante :

mysql> GRANT ALL ON base_test.* TO user_test@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'pwd_test';

  • base_test : la base de données nécessitant un accès à distance
  • user_test : l’utilisateur qui doit y accéder
  • xxx.xxx.xxx.xxx : l’adresse IP du serveur contenant la bdd (88.45.121.23 dans notre exemple)
  • pwd_test : le mot de passe de l’utilisateur

Se déconnecter de mysql.

mysql> exit

 

Etape n ° 4: Tester le résultat

Il est possible de tester les différentes actions réalisées via une commande mysql ou telnet :

mysql -u user_test –h 88.45.121.23 –p
telnet 88.45.121.23 3306

Enjoy !

[PHP] Gestion du timezone pour la fonction date();

Hop, lorsqu’on monte en version de PHP, on a son lot de nouveautés et de surprises dont ce joli petit message :

[code][phpBB Debug] PHP Notice: in file /index.php on line 107: date() [function.date (http://megane3.fr/function.date)]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘Europe/Berlin’ for ‘CET/1.0/no DST’ instead[/code]

Une petite recherche et je tombe sur le manuel PHP de la fonction date_default_timezone_set(); (cf. http://www.php.net/manual/fr/function.date-default-timezone-set.php) qui m’explique que depuis la version 5.3.0 de PHP, cette fonction émet une alerte de type E_WARNING.

Je cite:

Depuis PHP 5.1.0 (lorsque les fonctions date/heure ont été écrites), chaque appel à une fonction date/heure génère une E_NOTICE si le décalage horaire n’est pas valide et/ou un message E_WARNING si vous utilisez des configurations système ou la variable d’environnement TZ.

Pour corriger tout ça, j’ai juste ajouter la fonction suivante trouver dans les commentaires du lien ci-dessus.

<?php
function getLocalTimezone()
{
    $iTime = time();
    $arr = localtime($iTime);
    $arr[5] += 1900; 
    $arr[4]++;
    $iTztime = gmmktime($arr[2], $arr[1], $arr[0], $arr[4], $arr[3], $arr[5], $arr[8]);
    $offset = doubleval(($iTztime-$iTime)/(60*60));
    $zonelist = 
    array
    (
        ‘Kwajalein’ => -12.00,
        ‘Pacific/Midway’ => -11.00,
        ‘Pacific/Honolulu’ => -10.00,
        ‘America/Anchorage’ => -9.00,
        ‘America/Los_Angeles’ => -8.00,
        ‘America/Denver’ => -7.00,
        ‘America/Tegucigalpa’ => -6.00,
        ‘America/New_York’ => -5.00,
        ‘America/Caracas’ => -4.30,
        ‘America/Halifax’ => -4.00,
        ‘America/St_Johns’ => -3.30,
        ‘America/Argentina/Buenos_Aires’ => -3.00,
        ‘America/Sao_Paulo’ => -3.00,
        ‘Atlantic/South_Georgia’ => -2.00,
        ‘Atlantic/Azores’ => -1.00,
        ‘Europe/Dublin’ => 0,
        ‘Europe/Belgrade’ => 1.00,
        ‘Europe/Minsk’ => 2.00,
        ‘Asia/Kuwait’ => 3.00,
        ‘Asia/Tehran’ => 3.30,
        ‘Asia/Muscat’ => 4.00,
        ‘Asia/Yekaterinburg’ => 5.00,
        ‘Asia/Kolkata’ => 5.30,
        ‘Asia/Katmandu’ => 5.45,
        ‘Asia/Dhaka’ => 6.00,
        ‘Asia/Rangoon’ => 6.30,
        ‘Asia/Krasnoyarsk’ => 7.00,
        ‘Asia/Brunei’ => 8.00,
        ‘Asia/Seoul’ => 9.00,
        ‘Australia/Darwin’ => 9.30,
        ‘Australia/Canberra’ => 10.00,
        ‘Asia/Magadan’ => 11.00,
        ‘Pacific/Fiji’ => 12.00,
        ‘Pacific/Tongatapu’ => 13.00
    );
    $index = array_keys($zonelist, $offset);
    if(sizeof($index)!=1)
        return false;
    return $index[0];
}
date_default_timezone_set(getLocalTimezone());
?>

Et le tour est joué !

Enjoy !

Différences de version de la bibliothèque MySQL ?

Hello,

Si vous rencontrez ce message d’erreur dans PhpMyAdmin, notamment suite à une mise à jour de LAMP, voilà ce qu’il signifie exactement.

Message d’erreur:

La version de votre bibliothèque MySQL (5.0.77) diffère de la version de votre serveur MySQL (5.1.54). Ceci peut occasionner un comportement imprévisible.

En fait, la version du client, à savoir PHP est configurée pour fonctionner avec la version 5.0.77 de MySQL. Or, en mettant à jour MySQL sur le serveur, celle-ci est montée pour devenir 5.1.54 d’où l’incohérence !

Pour cela, il faut recompiler PHP et Apache !

Petite astuce pour trouver une chaine de caractères dans un fichier.

find . -name "*" -exec grep -Hn "5.1.54" {} \;

Enjoy !

MàJ PHP sous Plesk

On continue pour les petites astuces techniques qui peut-être serviront à d’autres. Dans notre configuration actuelle, un serveur dédié sous CentOS 5.5 avec une interface plesk, pour mettre à jour PHP (qui est une très vieille version dans la configuration de base), il suffit en s’étant connecté en SSH sur son serveur avec le login root d’exécuter les commandes suivantes :

Récupération de repository corrects

wget -q -O - http://www.atomicorp.com/installers/atomic.sh | sh

Lancement de la demande de mise à jour

yum update php mysql php-mysql

Plus d’infos disponibles sur ce post, notamment en cas de problème: http://forum.ovh.com/showthread.php?t=43174

Et voilà, passage de PHP 5.1.6 à 5.2.16 😀

Pour connaitre votre version de PHP, au choix, dans un fichier php:

phpinfo();

Ou en ligne de commande:

php -v

Enjoy !

Problème avec la fonction open_basedir

J’ai rencontré cette erreur à deux reprises en installant mes deux forums sur mon serveur à savoir ce joli message d’erreur:

[phpBB Debug] PHP Notice: in file /includes/functions.php on line 2387: file_exists() [function.file-exists]: open_basedir restriction in effect. File(.) is not within the allowed path(s): (/:/tmp/)

Comme je me suis fait avoir la première, j’ai galéré déjà plusieurs heures pour trouver la solution et malin que je suis, je ne me la suis pas noté et voilà que je galère à nouveau pour ce forum.

J’ai donc décidé par ce message de m’en faire un post-it qui pourrait servir à d’autres éventuellement.

Lire la suite…

[phpMyAdmin] Ajout du Concepteur (pma_)

Hop, on continue dans les messages d’erreurs rencontrés pendant la mise à jour. Cette fois, c’est dans phpMyAdmin, j’ai le message suivant:

Certaines fonctionnalités ayant trait aux tables reliées sont désactivées. Pour une analyse du problème, cliquez ici.

Et en cliquant sur le lien fourni, on obtient les informations suivantes:

$cfg['Servers'][$i]['pmadb'] ... OK
$cfg['Servers'][$i]['relation'] ... en erreur [ Documentation ]
Fonctions relationnelles: désactivé

$cfg['Servers'][$i]['table_info'] ... en erreur [ Documentation ]
Affichage infobulle: désactivé

$cfg['Servers'][$i]['table_coords'] ... en erreur [ Documentation ]
$cfg['Servers'][$i]['pdf_pages'] ... en erreur [ Documentation ]
Génération de schémas en PDF: désactivé

$cfg['Servers'][$i]['column_info'] ... en erreur [ Documentation ]
Commentaires de colonnes: désactivé
Requêtes en signets: désactivé
Transformation: désactivé

$cfg['Servers'][$i]['history'] ... en erreur [ Documentation ]
Historique SQL: désactivé

$cfg['Servers'][$i]['designer_coords'] ... en erreur [ Documentation ]
Concepteur: désactivé

Cela signifique qu’il manque soit une table spécifique, soit une information dans une relation entre une table existante et le fichier configuration (souvent au niveau de $cfg[‘Servers’][$i][‘designer_coords’])

Dans un premier temps, il s’agit de récupérer les requêtes qui vont bien dans phpmyadmin/scripts/create_tables.sql et de l’exécuter au niveau root de mysql (je l’ai fait en ligne de commande).

Puis j’édite mon config.inc.php (après l’avoir copié de libraries/config.default.php s’il n’existe pas) pour avoir les infos suivantes :

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['controluser'] = 'user';
$cfg['Servers'][$i]['controlpass'] = 'mdp';

Et voilà, l’onglet « Concepteur » qui apparait et qui me donne un joli MCD avec tout plein de clés étrangères à gérer..

Et le tour est joué !

Enjoy !

[phpbb] Crash d’une table MySQL – Comment la réparer ?

Hello,

Voilà un joli message d’erreur qui est apparu sur mon forum phpbb, il ne faut pas s’affoler pour le résoudre, rien de plus simple.

[code]SQL ERROR [ mysqli ]

Table ‘./megane3/fm3_posts’ is marked as crashed and should be repaired [145][/code]

Connectez-vous à votre phpMyAdmin, sélectionnez les tables en cause et faites ‘Réparer’, MySQL s’occupe du reste !

Enjoy !