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);
}
?>