သင်၏ PHP တပ်ဆင်မှုသည် FFI extension ကိုသေချာအောင်လုပ်ပါ။ PHPP.INI ဖိုင်ကိုပြုပြင်ပြီးအောက်ပါ configuration ကိုထည့်နိုင်သည်။
ffi.enable=1
နောက်တစ်ခုက C တည်ဆောက်ပုံဆိုင်ရာအဓိပ္ပါယ်ဖွင့်ဆိုချက်တစ်ခုလိုအပ်ပါတယ်။
typedef struct {
int id;
float value;
} Item;
ကျွန်ုပ်တို့သည်ဤဖွဲ့စည်းပုံကို PHP တွင် C ကြေငြာစာတမ်းမှတစ်ဆင့်သတ်မှတ်ပြီးအဆောက်အအုံများကိုတပ်ဆင်ထားသည်။
$ffi = FFI::cdef("
typedef struct {
int id;
float value;
} Item;
void *memcpy(void *dest, const void *src, size_t n);
", "libc.so.6"); // Linux ဆင်းလျက် libc လမ်းကြောင်း,Windows ဆင်းလျက်可能需要改为 "msvcrt.dll"
ကျွန်ုပ်တို့သည်အဆောက်အအုံများကိုဖန်တီးပြီးဒြပ်စင်များစွာကိုအစပြုပေးသည်။
$length = 3;
$items1 = $ffi->new("Item[$length]");
$items1[0]->id = 1;
$items1[0]->value = 3.14;
$items1[1]->id = 2;
$items1[1]->value = 2.71;
$items1[2]->id = 3;
$items1[2]->value = 1.62;
ပထမ ဦး ဆုံးပစ်မှတ်ခင်းကျင်းမှုအတွက်မှတ်ဥာဏ်ကို ဦး စွာခွဲဝေချထားပေးရန်လိုအပ်ပြီးမှတ်ဉာဏ်ကူးရေးရန် Memcpy ကို သုံးပါ။
$items2 = $ffi->new("Item[$length]");
// bytes ၏စုစုပေါင်းအရေအတွက်ကိုတွက်ချက်ပါ:တစ်ခုချင်းစီကိုဖွဲ့စည်းပုံ၏အရွယ်အစားအရေအတွက်ကမြှောက်သည်
$size = FFI::sizeof($items1);
// အသုံးပြု memcpy မှတ်ဉာဏ်ကူးယူပါ
$ffi->memcpy(FFI::addr($items2[0]), FFI::addr($items1[0]), $size);
for ($i = 0; $i < $length; $i++) {
echo "Item {$i}:\n";
echo " ID: " . $items2[$i]->id . "\n";
echo " Value: " . $items2[$i]->value . "\n";
}
output ကိုအောက်ပါအတိုင်းဖြစ်သင့်သည် -
Item 0:
ID: 1
Value: 3.14
Item 1:
ID: 2
Value: 2.71
Item 2:
ID: 3
Value: 1.62
Memcpy ကို ပစ်မှတ်ထားသောမှတ်ဉာဏ် area ရိယာကိုလုံလောက်သောနေရာချထားရန်သေချာစေရန် bytes ဖြင့်ကူးယူထားသည်။
FFI :: SPASSOFF သည် byte အရွယ်အစားကိုခင်းကျင်းခြင်းဖြင့်သိမ်းပိုက်ရန်လုံခြုံစွာအသုံးပြုနိုင်သည်။
PHP FFI ကုဒ်ကို script ခေါ်ဆိုမှုများမှတဆင့် PHP FFI ကုဒ်ကိုအသုံးပြုလိုပါက PHPFI.ENCASE ကို အသုံးပြုရန်သတိရပါ။
အချို့သောပလက်ဖောင်းများတွင် (MACOS သို့မဟုတ် Windows ကဲ့သို့သော) တွင် CDEF တွင် CDEF ရှိစာကြည့်တိုက်အမည်ကိုအမှန်တကယ်လမ်းကြောင်းအတိုင်းပြုပြင်ရန်လိုအပ်သည်။