2012-10-10 49 views
0

我有我使用PHP中使用了shell_exec來執行,當有一個Ajax調用我執行這個文件PowerShell腳本。 (我使用的是codeigniter 2環境)PHP - 殼牌Exec的 - PowerShell和阿賈克斯

我用Ajax調用它,因爲它需要大約45秒來執行ps文件,所以我想我會通過Ajax做到這一點,所以我可以給用戶一個消息說正在加載。

我的Ajax功能如下:

<script> 
    $(document).ready(function() { 
     $.fn.colorbox({href:"#inline_content", inline:true, width:"650px", height:"235px", overlayClose: false, showClose: false}); 
     $('#cboxClose').remove(); 

     var csrf = $('[name="csrf_test_name"]').val(); 

     $.ajax({ 
      type: "POST", 
      url: "/index.php/ajax/addAccount", 
      data: { 
        csrf_test_name: csrf 
        }, 
      cache:false, 
      success: 
       function(data){ 
        if(data == "True"){ 
         window.location = "/index.php/private"; 
        }else{ 
         $(window).colorbox.close(); 
         alert("There was a problem creating your account."); 
        } 
       }, 
      error: function (xhr, ajaxOptions, thrownError) { 
        alert(xhr.status); 
        alert(thrownError); 
        $('#Loading').hide(); 
        } 

     }); 


    }); 
</script> 

的CI Ajax控制器只是抓住數據,然後向模型。

殼exec函數如下:

function createCompany($companyID, $companyName, $domain){ 

    $psCompanyName = "t_".$companyID. "_".str_replace(" ", "", $companyName); 

    $psScriptPath = "c:\\inetpub\\powershellscripts\\createCompany.ps1"; 
    $ps = shell_exec("powershell -command $psScriptPath -companyName '".$psCompanyName."' -domain '".$domain."'"); 
    return $ps; 

} 

的PS1文件執行罰款。 $ PS應該包含值「真」或「假」(PS1的有寫輸出「真」或寫輸出「假」的結尾,我檢查了所有的任務都成功地執行。

當我更換回報$ PS,返回「真」或返回「假」的研製成功:部分正常工作(我還沒有從錯誤得到任何東西:其一),並且還當我運行的Ajax之外的功能,我得到。結果

請問這是因爲阿賈克斯超時

回答

1

固定它正在執行的腳本,但我需要的外殼EXEC代碼改成這樣:?

$ps = shell_exec("powershell -command $psScriptPath -companyName '".$psCompanyName."' -domain '".$domain."' < Nul"); 

不確定Null位<是什麼,但它執行的是PowerShell,但導致錯誤500