2016-11-30 143 views
-1

我試圖去加載頁面,然後執行powershell腳本。但不幸的是,我無法得到這個工作。當我進入頁面時,它會自動轉到腳本並將我重定向到失敗頁面的成功。 我試圖在重定向後進行睡眠,但它只是等待幾秒鐘,然後運行腳本並將我重定向到html頁面。重定向然後執行

 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

你錯過了'出口();'。你的腳本在你的第一個'header()函數中死掉了,因爲它感覺需要重定向,但由於未知的結束而無法繼續。你包含()'或'require_once()'你的加載頁面,然後在每個'header()'方法之後添加一個'exit();'。 [看看它應該在這裏](https://3v4l.org/sh7J3) – KDOT

+0

爲什麼你首先使用重定向,並且只有在呼叫shell腳本的重定向之後? 據我所知,這裏發生的是: 1.服務器發送重定向頭到瀏覽器。 (代碼中的第一行) 2.瀏覽器要求加載.html 3.服務器將loading.html發送給瀏覽器 該腳本的其餘部分將保持未執行狀態。 – Dragos

回答

1

加載頁面在這種結構中是不可能的,因爲您的頁面只在您的文件加載完成時顯示。如果你想通過AJAX請求運行include/shell,它會。下面的解決方案是索引頁(loading.html),它向文件request.php運行AJAX請求,並將其內容複製到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

謝謝,它工作完美。唯一的問題是我的服務器無法訪問互聯網,所以我只是把jquery腳本放在本地。 –