2016-11-30 1 views
-1

J'essaie d'accéder à la page de chargement, puis d'exécuter le script powershell. Mais malheureusement, je ne peux pas faire fonctionner ça. Quand je vais à la page, il va automatiquement au script et me redirige vers le succès de la page d'échec. J'ai essayé de faire un sommeil après la redirection mais il attend juste quelques secondes, puis exécute le script et me redirige vers la page html.Rediriger puis exécuter

 header('Location: /loading.html'); 
     include ("file\where\the\variable\comes\from.php"); 
     $s = shell_exec("powershell path\\to\\script.ps1 '$variable'< NUL"); 

     if (strpos($s, 'True') === false) { 
     header('Location: /succes.html'); 
     } 
     else{ 
     header('Location: /failed.html'); 
     } 
+0

Vous êtes absent 'exit();'. Votre script est en train de mourir à votre premier 'header()' car il sent le besoin de rediriger mais ne peut pas continuer à cause d'une fin inconnue. Vous 'include()' ou 'require_once()' votre page de chargement, puis ajoutez 'exit();' après chaque méthode 'header()'. [Voir comment cela devrait être ici] (https://3v4l.org/sh7J3) – KDOT

+0

Pourquoi utilisez-vous une redirection d'abord et seulement après la redirection vous êtes appelé dans le script shell? Pour autant que je sache, ce qui se passe ici est: 1. Le serveur envoie l'en-tête de redirection au navigateur. (première ligne dans votre code) 2. Le navigateur demande le chargement.html 3. Le serveur envoie le fichier loading.html au navigateur Le reste du script ne sera pas exécuté. – Dragos

Répondre

1

Une page de chargement n'est pas possible dans cette construction car votre page ne s'affiche que lorsque le chargement du fichier est terminé. Si vous exécutez le include/shell via une requête AJAX, il le ferait. La solution ci-dessous est la page d'index (loading.html) qui exécute une requête AJAX dans le fichier request.php et copie son contenu dans le contenu de loading.html.

loading.html

<!-- Your loading.html content ---> 

<script type="text/javascript" src="https://code.jquery.com/jquery-3.1.1.min.js"></script> 
<script type="text/javascript"> 
$.post("request.php", function(data) { 
    $("body").html(data); 
}); 
</script> 

request.php

include ("file\where\the\variable\comes\from.php"); 
$s = shell_exec("powershell path\\to\\script.ps1 '$variable'< NUL"); 

if (strpos($s, 'True') === false) { 
    echo file_get_contents('succes.html'); 
} 
else { 
    echo file_get_contents('failed.html'); 
} 
+0

Merci, cela a fonctionné parfaitement. le seul problème était que mes serveurs ne peuvent pas encore accéder à Internet, donc je viens de mettre le script jquery local. –