2010-12-15 30 views
0

J'ai échoué avec la méthode mysqldump plus tôt. Maintenant j'essaye juste d'appeler le fichier séquentiel qui appellera le mysqldump. Le fichier php qui appelle le fichier de commandes, ressemble à ceci:sauvegarde base de données mysql en appelant un fichier batch par php

<?php 
shell_exec('c:\\abc.bat'); 

?> 

Et le fichier batch qui quand j'exécute donne directement le fichier sql 7kb que je me attends:

mysqldump --opt -u root -ppassword onstor > c:\onstordb.sql 

Mais quand j'utilise php pour l'exécuter, j'obtiens un fichier de 0 Ko, je me demande pourquoi. J'ai essayé à la fois shell_exec et exec. Y a-t-il un problème avec les paramètres?

Répondre

1

http://www.php.net/manual/en/function.exec.php#85930

Il se lit comme suit:

j'avais des problèmes en utilisant la commande PHP exec pour exécuter un fichier batch . L'exécution d'autres commandes (c'est-à-dire "dir") fonctionne bien). Mais si je exécuté un fichier de commandes, je n'ai reçu aucune sortie de la commande exec.

La configuration du serveur que j'ai consiste en serveur Windows Server 2003 exécutant IIS6 et PHP 5.2.3. Sur ce serveur, j'ai :

  1. Accordée exécution sur l'Internet utilisateur sur c:\windows\system32\cmd.exe.
  2. Accordé à tous-> Contrôle total au répertoire dans lequel le fichier de traitement par lots est écrit.
  3. Accordé à tous-> Contrôle total sur l'ensemble du répertoire c:\cygwin\bin et son contenu.
  4. Autorisé l'utilisateur Internet à se connecter en tant que groupe.
  5. Indique le chemin d'accès complet à chaque fichier en cours d'exécution.
  6. Testé ces scripts s'exécutant à partir de la ligne de commande sur le serveur et ils fonctionnent très bien.
  7. Garantit que %systemroot%\system32 se trouve dans le chemin système .

Il se trouve que même avec tous les ci-dessus en place sur le serveur, je devais spécifier le chemin complet cmd.exe dans l'appel exec.

Quand je l'appel:

$output = exec("c:\\windows\\system32\\cmd.exe /c $batchFileToRun"); 

alors tout a bien fonctionné. Dans ma situation , $batchFileToRun était le chemin système réel vers le fichier de traitement par lots (c'est-à-dire, le résultat d'un appel à realpath()).

+0

ne pas simplement coller des liens pour les réponses. Si vous voulez faire cela, pensez à en faire des commentaires.Rendez la réponse plus utile en y ajoutant quelques mots et en résumant ou en citant le lien fourni au cas où le site distant disparaîtrait ou serait temporairement indisponible. – Gordon

+0

Si php.net s'en va, que Dieu ait pitié de nos âmes. – DampeS8N

+0

@Dampe Je l'ai eu au moins une fois. php.net était en panne et le lien fourni ne fonctionnait pas depuis un certain temps, ce qui a laissé l'OP se demander. Bien sûr, fournir un lien vers le miroir a corrigé cela, mais néanmoins. – Gordon