build.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/bash
  2. set -e
  3. # --- News FFI 模块编译脚本 ---
  4. # 本脚本仅用于在本地开发环境中编译 Go 源代码为 .so 共享库。
  5. echo "[BUILD] 进入 ffi 目录..."
  6. cd ffi
  7. echo "[BUILD] 开始编译 Go 源码..."
  8. # 运行 make 命令,它会处理清理和编译的全部工作
  9. make
  10. echo "[BUILD] 编译成功! lib_news.so 已更新。"
  11. echo ""
  12. echo "==================== 重要提醒 ===================="
  13. echo "下一步,你必须手动重启 PHP-FPM 服务来清除缓存,"
  14. echo "否则你的代码改动将不会生效!"
  15. echo ""
  16. echo "请运行以下命令:"
  17. echo "docker-compose restart php"
  18. echo "================================================"
  19. # 返回原始目录
  20. cd ..
  21. # 2. 生成 PHP FFI 适配层
  22. cat > $BUILD_DIR/NewsServiceFFI.php <<EOF
  23. <?php
  24. class NewsService
  25. {
  26. protected $ffi;
  27. public function __construct()
  28. {
  29. $this->ffi = FFI::cdef(
  30. file_get_contents(__DIR__ . '/lib_news.h'),
  31. __DIR__ . '/lib_news.so'
  32. );
  33. }
  34. public function getList()
  35. {
  36. return json_decode(FFI::string($this->ffi->GetList()), true);
  37. }
  38. public function getById($id)
  39. {
  40. return json_decode(FFI::string($this->ffi->GetById($id)), true);
  41. }
  42. public function create($data)
  43. {
  44. return $this->ffi->Create(json_encode($data));
  45. }
  46. public function update($id, $data)
  47. {
  48. return $this->ffi->Update($id, json_encode($data));
  49. }
  50. public function delete($id)
  51. {
  52. return $this->ffi->Delete($id);
  53. }
  54. public function generateSummary($content)
  55. {
  56. return FFI::string($this->ffi->GenerateSummary($content));
  57. }
  58. public function checkContent($content)
  59. {
  60. return $this->ffi->CheckContent($content);
  61. }
  62. public function extractKeywords($content)
  63. {
  64. return explode(',', FFI::string($this->ffi->ExtractKeywords($content)));
  65. }
  66. }
  67. EOF
  68. echo "[build] PHP FFI 适配层已生成。" | tee -a $LOG_FILE
  69. # 3. 自动打包 build 目录
  70. cd $BUILD_DIR
  71. zip -r package.zip ./* > /dev/null
  72. cd ..
  73. echo "[build] 已自动打包为 $PACKAGE" | tee -a $LOG_FILE
  74. echo "[build] FFI 动态库和 PHP 适配层已生成到 build/ 目录。详见 $LOG_FILE"