跳到正文

PHP调用示例

加载SDK

在程序包名下方引入动态库

$util = FFI::cdef(
"typedef struct { char* p; long n } GoString;
char* QueryIOC(GoString ioc);",
"libsdk.so"
);
 

示例中的libsdk.h该程序在同一路径下。可根据情况自行指定。

调用示例

<?php
try {
    $util = FFI::cdef(
        "typedef struct { char* p; long n } GoString;
        char * OnLineUpgrade(GoString sn, GoString key, GoString salt, int pkgSize);",
        "/opt/tip/bin/sdk/so_path/libsdk.so"
    );
} catch (Exception $e) {
    print $e->getMessage();
    exit();
}
 
$sn = "LUBEI-TIP-SDK-UPGRADE";
$key = "fa6df0f3bc6805dcaa1f6dc61faa33c7";
$salt = "8bd48cf832a0a71d19c651cdf8209d6a";
$pkgSize = 300;
 
$goStrSn = stringToGoString($util->new("GoString"), $sn);
$goStrKey = stringToGoString($util->new("GoString"), $key);
$goStrSalt = stringToGoString($util->new("GoString"), $salt);
echo FFI::string($util->OnLineUpgrade($goStrSn, $goStrKey, $goStrSalt, $pkgSize));
 
 
function stringToGoString($goStr, $name) {
    $strChar = str_split($name);
    $c = FFI::new('char['.count($strChar).']', false);
    foreach($strChar as $i => $char) {
        $c[$i] = $char;
    }
 
    $goStr->p = FFI::cast(FFI::type('char *'), $c);
    $goStr->n = count($strChar);
 
    return $goStr;
}
 
function fromGoStr(FFI\CData $goStr, FFI $ffi = null): string {
    return FFI::string($goStr->p, $goStr->n);
}
?>