1. 程式人生 > >PHP呼叫.bat檔案執行codeception測試命令

PHP呼叫.bat檔案執行codeception測試命令

需求:通過介面或url地址請求,使php程式碼呼叫且執行一個編寫得有呼叫codeception測試命令的.bat指令碼。(內心os:都什麼鬼需求,為什麼不能直接在自己的電腦上測試,為什麼還要考慮在伺服器上執行codeception測試?研究codeception都已經殺死我很多腦細胞了……)

程式碼環境:phpStudy整合環境(php-7.0.12-nts+Apache);YII2(basic版)框架;伺服器及本機作業系統:widows

遇到的問題:exec()函式執行編寫呼叫codeception測試命令的檔案時無任何返回值。具體情況為,exec()函式能夠正常執行cmd命令,如“exec('mkdir test1')

”、"exec('dir', $out)",也能夠呼叫絕對路徑下的bat檔案建立資料夾,列印目錄,但呼叫編寫呼叫codeception測試命令的檔案無任何響應。

問題原因:通過url地址(如:local.basic.com/index.php/codeception)請求時,excu()函式執行的目錄時在web目錄下,而在bat檔案中的編寫的呼叫codeception的路徑是一個絕的路徑,到之後命令執行不成功,錯誤的.bat檔案編寫如下

錯誤的bat檔案
錯誤的bat檔案編寫內容

上圖編寫的內容導致函式在執行cmd命令時, 實際上cmd的執行情況是

cmd執行錯誤檔案的結果

因為通過url地址請求時,cmd視窗實際上是在web資料夾中開啟的,所以會報如上錯誤,而正確的bat檔案應該像下圖那樣編寫:

正確的bat檔案編寫
正確的bat檔案編寫內容

程式碼:

@echo off
cd ..\vendor\bin
codecept run api RecommendCest.php --html
cd/

PS:我的codeception名可能因為安裝不正確的原因,只能在bin目錄下執行相關命令,而官方文件顯示是可以在專案更目錄執行codeception相關命令的。後期有時間(主要看心情^_^),會更新一些codeception安裝、運用的相關部落格,歡迎小夥伴留言探討。另外,如果有大牛知道更簡便的方法去呼叫伺服器上的codeception命令(不是直接去服務上執行cmd命令哈),跪求留下執行方法……