Subversion Repositories php-qbpwcf

Rev

Rev 1 | Rev 223 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<?php

/*

        QBPWCF, Quick Build PHP website Component base on Fedora Linux.
    Copyright (C) 2014~2025 Min-Jhin,Chen

    This file is part of QBPWCF.

    QBPWCF is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    QBPWCF is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with QBPWCF.  If not, see <http://www.gnu.org/licenses/>.

*/

/*

說明:
請先於 sample 資料夾運行 sock::unixDomainSockServer.php 20250228 再運行 threads::socket.php 20250228

*/

#使用命名空間qbpwcf
namespace qbpwcf;

#assets dir
$assetsDir="assets of threads::socket_20250228";

#函式說明:
#透過 unix socket 來多執行序運作.
#回傳結果:
#$result["status"],執行是否正常,"true"代表正常,"false"代表不正常.
#$reuslt["error"],執行不正常結束的錯訊息陣列.
#$result["function"],當前執行的函式名稱.
#$result["argu"],使用的參數.
#$result["content"],陣列,每個元素為cmds參數中個別元素其指令執行後得到的輸出.
#必填參數:
#$conf["cmds"],字串陣列,每個元素代表要執行的指令與參數.
$conf["cmds"]=array("ps auxwf '|' cat");
#可省略參數:
#可省略參數:
#$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
$conf["sock"]=$assetsDir."/unixDomainSockServer.sock";
#參考資料:
#無
#備註:
#需要透過sock::unixDomainSockServer來運行.
$socket=threads::socket($conf);
unset($conf);

#debug
if($socket["status"]==="false"){

        #debug
        var_dump($socket);

        #結束執行回傳 1 給 shell
        exit(1);

        }#if end

#如果沒有要的結果
if(!isset($socket["content"])){

        #debug
        var_dump($socket);

        #結束執行回傳 1 給 shell
        exit(1);

        }#if end

#如果執行指令失敗
if($socket["content"][0]["status"]==="false"){

        #debug
        var_dump($socket);

        #結束執行回傳 1 給 shell
        exit(1);

        }#if end

#取得程序的 uuid
$procUuid=$socket["content"][0]["content"];

#無窮迴圈
while(true){

        #函式說明:
        #詢問透過 sock::unixDomainSockServer 執行的程序狀況
        #回傳結果:
        #$result["status"],"true"代表執行正常;"false"代表執行不正常.
        #$result["error"],錯誤訊息陣列.
        #$result["function"],當前執行的函式名稱.
        #$result["argu"],使用的參數.
        #$result["content"],陣列,程序的資訊.
        #$result["content"]["pid"],字串,程序的pid.
        #$result["content"]["running"],字串,是否正常執行中.
        #$result["content"]["statusCode"],字串,回傳給 shell 的代碼.
        #$result["content"]["input"],字串,輸入的內容.
        #$result["content"]["output"],字串,標準輸出的內容.
        #$result["content"]["error"],字串,錯誤輸出的內容.
        #必填參數:
        #$conf["uuid"],字串,proc的uuid.
        $conf["uuid"]=$procUuid;
        #可省略參數:
        #$conf["sock"],字串,要連線的 usr/bin/qbpwcf-sock.php(sock::unixDomainSockServer) 所產生的 unix domain socket 路徑與名稱,預設為 qbpwcf_usock_path.
        $conf["sock"]=$assetsDir."/unixDomainSockServer.sock";
        #參考資料:
        #無.
        #備註:
        #無.
        $getProcInfo=sock::getProcInfo($conf);
        unset($conf);

        #debug
        if($getProcInfo["status"]==="false"){

                #debug
                var_dump($getProcInfo);

                #結束執行回傳 1 給 shell
                exit(1);

                }#if end
        
        #如果已經停止運行
        if($getProcInfo["content"]["running"]==="false"){
        
                #debug
                var_dump($getProcInfo);
        
                #結束執行
                break;
        
                }#if end
                
        #休息1秒
        sleep(1);

        }#whlie end