2010-06-23 12 views
0

j'ai programmé un système de sauvegarde de MySQL pour mon CMS qui décharge toutes les données DB et de la structure dans un fichier sql gzip:la sauvegarde de base de données MySQL à la volée

$filename = DB_NAME.'_'.date('Y.m.d_H\hi_(s.'.round(microtime()*100,0).')').'.sql.gz'; 
exec('mysqldump --default-character-set=UTF8 --opt --compress --host='.DB_HOST.' --user='.DB_USER.' --password='.DB_PASS.' '.DB_NAME.' | gzip > '.DIR_BACKUP.$filename); 

Il fonctionne très bien sur mon serveur de développement , mais lorsque j'essaie d'exécuter le même code sur mon serveur de production, le fichier n'est jamais créé. Est-ce un problème d'autorisation? Que dois-je configurer pour que cela fonctionne? Merci!

--- Il semble que le problème repose sur la fonction exec(). Où puis-je autoriser la permission de PHP pour exécuter cette fonction?

+0

Essayez de lire le journal des erreurs du serveur Web. Vous pouvez voir une idée de pourquoi il a échoué. –

+0

Etes-vous sûr d'avoir accès à mysqldump et gzip sur le serveur de production? – Anax

+0

J'ai accès à mysqldump et à gzip. Ce à quoi je n'ai pas accès, c'est exec(). Comment puis-je activer cela? – andufo

Répondre

0

Cela peut être un problème d'autorisation, soit vous ne pouvez pas écrire sur le système de fichiers, soit plus probablement (certainement si vous êtes sur un service d'hébergement partagé) l'utilisation de la commande exec n'est pas autorisée. Je crois que vous pouvez vérifier cela avec php_info();

Vous ne recevez pas de message d'erreur? Si ce n'est pas le cas, activer l'affichage des erreurs/avertissements etc dans php

+0

en fait, je possède un serveur VP et avoir un accès shell. Où puis-je donner à php les autorisations appropriées pour exécuter exec()? – andufo

+0

Je suppose dans php.ini. Mais si vous exécutez php en mode sans échec (également dans php.ini), vous pouvez désactiver safe_mode et cela devrait fonctionner aussi. Si c'est la cause du problème bien sûr. (safe_mode sera supprimé dans PHP6 de toute façon) Mais avant de commencer à gâcher php ini peut-être jeter un oeil à http://www.php.net/manual/en/ini.php – Redlab

+0

et http://www.php.net /manual/en/configuration.php – Redlab

0

ressemble à un problème d'autorisations. Avez-vous essayé de définir DIR_BACKUP sur/tmp ou similaire?

+0

Il semble que le problème repose sur la fonction exec(). Où puis-je autoriser la permission de PHP pour exécuter cette fonction? – andufo

+0

Vous pouvez d'abord vérifier si la fonction est effectivement activée en renvoyant ini_get ('disable_functions') (renvoie une liste de fonctions désactivées séparées par des virgules). Assurez-vous ensuite que votre safe_mod est désactivé, sinon exec() peut exécuter des fichiers uniquement dans safe_mode_exec_dir. – cypher

+0

Le mode sans échec est désactivé. et disable_functions est également vide. Quoi d'autre cela pourrait-il être? – andufo

Questions connexes