#!/bin/bash set -e # --- News FFI 模块编译脚本 --- # 本脚本仅用于在本地开发环境中编译 Go 源代码为 .so 共享库。 echo "[BUILD] 进入 ffi 目录..." cd ffi echo "[BUILD] 开始编译 Go 源码..." # 运行 make 命令,它会处理清理和编译的全部工作 make echo "[BUILD] 编译成功! lib_news.so 已更新。" echo "" echo "==================== 重要提醒 ====================" echo "下一步,你必须手动重启 PHP-FPM 服务来清除缓存," echo "否则你的代码改动将不会生效!" echo "" echo "请运行以下命令:" echo "docker-compose restart php" echo "================================================" # 返回原始目录 cd .. # 2. 生成 PHP FFI 适配层 cat > $BUILD_DIR/NewsServiceFFI.php <ffi = FFI::cdef( file_get_contents(__DIR__ . '/lib_news.h'), __DIR__ . '/lib_news.so' ); } public function getList() { return json_decode(FFI::string($this->ffi->GetList()), true); } public function getById($id) { return json_decode(FFI::string($this->ffi->GetById($id)), true); } public function create($data) { return $this->ffi->Create(json_encode($data)); } public function update($id, $data) { return $this->ffi->Update($id, json_encode($data)); } public function delete($id) { return $this->ffi->Delete($id); } public function generateSummary($content) { return FFI::string($this->ffi->GenerateSummary($content)); } public function checkContent($content) { return $this->ffi->CheckContent($content); } public function extractKeywords($content) { return explode(',', FFI::string($this->ffi->ExtractKeywords($content))); } } EOF echo "[build] PHP FFI 适配层已生成。" | tee -a $LOG_FILE # 3. 自动打包 build 目录 cd $BUILD_DIR zip -r package.zip ./* > /dev/null cd .. echo "[build] 已自动打包为 $PACKAGE" | tee -a $LOG_FILE echo "[build] FFI 动态库和 PHP 适配层已生成到 build/ 目录。详见 $LOG_FILE"