Giter VIP home page Giter VIP logo

Comments (31)

crazywhalecc avatar crazywhalecc commented on May 18, 2024 5

@TNT-ma 静态 PHP 最大的作用是可以让开发项目的人把 PHP 嵌入到项目内发行,这样一来,写一些 CLI 工具你可以使用 PHP 进行编写,使用 static-php-cli 中的 php 或 micro,集成到项目内。正因如此,不可能每个项目都一定只会在 Linux 平台运行。

from static-php-cli.

xywf221 avatar xywf221 commented on May 18, 2024 3

@xywf221 这个添加ssh2 扩展(我没有编译验证)基本差不多了 ,你照这个来就行了

多谢按照你这个成功编译了,这里顺便贴下 我修改后的 ssh2 repo
配合swow扩展实现协程,以下是测试代码

<?php

use Swow\Coroutine;
use Swow\Sync\WaitReference;


$wr1 = new WaitReference();
Coroutine::run(static function () use($wr1): void {
    $wr = new WaitReference();
    echo "start connect\r\n";
    $session = ssh2_connect("127.0.0.1", 22);
    echo "connect done!\r\n";

    Coroutine::run(static function () use ($session, $wr): void {
        echo "start auth\r\n";
        $flag = ssh2_auth_password($session, 'root', 'x');
        echo "auth done\r\n";

        Coroutine::run(static function () use ($session,$wr): void {
            // exec command
            echo "Exec Command : sleep 5 && echo 'done 1!' \r\n";
            ssh2_exec($session, "sleep 5 && echo 'done 1!'");
    
            echo "Exec Command : sleep 5 && echo 'done 2!' \r\n";
            ssh2_exec($session, "sleep 5 && echo 'done 2!'");
        });
    });
    echo "auth 挂起\r\n";
    WaitReference::wait($wr);
    var_dump('done');
});

echo "connect 挂起\r\n";

WaitReference::wait($wr1);

echo "整体结束\r\n";

测试输出

root@dmls:/root/static-php-cli# ./buildroot/bin/php run-swow-tests.php 
start connect
connect 挂起
connect done!
start auth
auth 挂起
auth done
Exec Command : sleep 5 && echo 'done 1!' 
Exec Command : sleep 5 && echo 'done 2!' 
string(4) "done"
整体结束

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024 2

event 和 gd 啥时候能尽快搞起来啊。等着用生产环境呢

@TNT-ma 我最近工作太忙了,等周六放假后我抓紧弄好这些个 PR 和 Bug 就弄一下。

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024 2

贡献指南我觉得可以提上日程了,就是写清楚怎么添加扩展。

不过想起来上面还有那么一坨 TODO,再加上还得写一份中文一份英文的就头疼。(我还打算写一个命令做辅助开发的:bin/spc dev:add-ext xxx,写点向导自动生成框架和提示做什么)

但我最近工作忙得不可开交,可能这些事情都要放一段时间了。

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024 1

这是扩展依赖库 关系图图 ;昨天(2023-04-21)我刚做完的
可以按照这个图,来解决依赖问题

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024 1

@TNT-ma 目前 event 扩展和 gd 扩展均已搞定。cac3ffc

gd 库的部分依赖为可选项:libjpeglibaviflibwebpfreetype,强制依赖 libpnggiflib。如果在编译 gd 时想支持可选特性,可以使用 --with-libs=xxx 参数作为编译选项,例如将所有 gd 的特性全部编译进去:

bin/spc build gd --build-all --with-libs=libjpeg,libavif,libwebp,freetype

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024 1

@xywf221 这个添加ssh2 扩展(我没有编译验证)基本差不多了 ,你照这个来就行了

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

libmcrypt 这个先放一放,,这个和PHP 版本有关系。php8 就不要支持了

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

Bugs

* [x]  mbstring support is good, but it cannot be compiled with pcntl. (after adding mbstring, configure shows `pcntl_fork()` not supported by this platform). Fixed via [c93a4e8](https://github.com/crazywhalecc/static-php-cli/commit/c93a4e843f1b1bcf287325f6066f1dac0ff4a5cb)

* [ ]  cannot compile libmcrypt on macOS. Maybe this bug will never be fixed. (source is too old to compile)

* [ ]  swoole extension for macOS has a dynamic library linked: `/usr/lib/libc++.dylib`.

大佬666。我先熟悉一下。

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

目前我知道的问题有:

  1. swoole 版本 内置 nghttp2 和 curl nghttp2 出现的多重定义, 最近刚解决:swoole/swoole-cli#38 (comment)
  2. swoole 和 snow 不能同时安装
  3. libmcrypt 不支持 高版本的 PHP。待验证确定

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024
  1. swoole 的问题主要是我现在还没写完 Linux 环境的 builder,macOS 环境主要是 C++ 库的问题。这个后续遇到了再看看。
  2. swoole 和 swow 不能同时安装属于一个 feature 了,不是问题。
  3. libmcrypt 甚至识别不出来 Apple Silicon 芯片的电脑,所以无法安装。

from static-php-cli.

TNT-ma avatar TNT-ma commented on May 18, 2024

怒我直言就PHP来说支不支持 macOS 根本无关紧要,如果是调试环境 MACOS自身就有PHP环境,如果是生产环境,我不信谁服务器装MACOS,PHP任然得靠LINUX 发挥最大性能 windows 都逐渐淘汰

from static-php-cli.

ikilobyte avatar ikilobyte commented on May 18, 2024

@TNT-ma 这可不是这么说,MacOS的用户群体还是很大的,直接在Mac上使用的话更是方便,而且macOS 12 Monterey已经移除了自带的php版本,我知道可以用docker去代替,有总比没有好

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

今天(2023-04-21)刚收获的经验: cmake 默认链接 动态库,指定静态链接库缺不生效,解决办法

例子: 比如 libssh2 链接openssl 默认就是链接到动态库。我指定了-DOpenSSL_ROOT都不生效

解决思路是: -DCMAKE_POLICY_DEFAULT_CMP0074=NEW 设置这个参数

cmake find_package 默认 找的都是动态库
例子:

find_package(OpenSSL)

find_package(NGHTTP2 REQUIRED)

find_package(LibSSH2)

找静态库,通常设置如下

-DCMAKE_POLICY_DEFAULT_CMP0074=NEW \
-DOpenSSL_ROOT={$openssl_prefix} \

我为什么把这个发到这里:请看这里 swoole-cli衍生分支图 build_native_php

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

symfony 我不太熟, 本项目 预处理是如何设置 PATH PKG-CONFIG 配置

就是类似截图里面设置 PATH
image

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

C++ 链接库,我试着解决 之前 有解决过这个 swoole/swoole-cli#56

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

symfony 我不太熟, 本项目 预处理是如何设置 PATH PKG-CONFIG 配置

就是类似截图里面设置 PATH image

直接命令行加入参数的设置,例如 Unix 通过 export PATH=xxx bin/spc build xxx。理论上来说,这个不应该由使用角度设置 PATH 和 PKG_CONFIG_PATH。如果是指的在本项目内配置 PKG_CONFIG_PATH,可以去 LinuxBuilderMacOSBuilder 中设置 $this->configure_env 中的值。PATH 建议在命令行手动插入,不做内部指定地方。

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

C++ 链接库,我试着解决 之前 有解决过这个 swoole/swoole-cli#56

C++ 链接确实是这样的,目前链接 C++ 库没有什么问题,但我似乎遇到了一些与 C++ 库有关的其他奇怪问题,与 -lc++ 应该无关。

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

我试着把 GD 依赖库 给补全了

依赖: 'libjpeg', 'freetype', 'libwebp', 'libpng', 'libgif'
实际依赖 不仅仅这几个 ,主要是 静态编译不太容易,比如libXpm ,到现在也没有搞定

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

我试着把 GD 依赖库 给补全了

依赖: 'libjpeg', 'freetype', 'libwebp', 'libpng', 'libgif' 实际依赖 不仅仅这几个 ,主要是 静态编译不太容易,比如libXmp ,到现在也没有搞定

这个可以慢慢一个一个来,分好模块和计划。我发现这个工程必须得划分多个不同的阶段来实施,否则每次修改和补充新功能都灾难性地添加一堆文件会增加维护难度和编写难度。

from static-php-cli.

TNT-ma avatar TNT-ma commented on May 18, 2024

event 和 gd 啥时候能尽快搞起来啊。等着用生产环境呢

from static-php-cli.

abinxx avatar abinxx commented on May 18, 2024

可以增加oci、pdo_oci和sqlserver的扩展库吗

from static-php-cli.

xywf221 avatar xywf221 commented on May 18, 2024

建议增加ssh2跟ffi扩展

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

建议增加ssh2跟ffi扩展

@xywf221 ssh2 应该可以,ffi 理论上只能给 macOS 版本加入了,因为 Linux 的纯 static link 的二进制即使编译了 ffi 也没有用处。

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

@xywf221
这不巧了 ,看上面 #32 (comment) ,静态编译 libssh2 遇到的问题

你参照这里 ,https://github.com/jingjingxyk/swoole-cli/blob/f915eb555eae30276d7e415e7d4dc34775cd8946/conf.d/curl.php#L156 把 源码静态编译的代码 搬运到本项目,执行构建就行了。

得益于本项目大佬的静态编译指导,同时借助 jingjingxyk/swoole-cli 项目构建的依赖库,我在 build_native_php 分支下 能编译 包含libssh2 扩展 PHP 运行时。可以先试试能不能用

附件(需要解包两次): 一个是包含swow 的; 一个是包含swoole 的;

php-cli-v8.2.4-linux-x64-ssh2-swow.tar.xz.zip

php-cli-v8.2.4-linux-x64-ssh2-swoole.tar.xz.zip

临时找了个空间: 放这里了: https://github.com/jingjingxyk/swoole-cli/releases/tag/build-native-php-v0.0.5

from static-php-cli.

TNT-ma avatar TNT-ma commented on May 18, 2024

@xywf221 这不巧了 ,看上面 #32 (comment) ,静态编译 libssh2 遇到的问题

你参照这里 ,https://github.com/jingjingxyk/swoole-cli/blob/f915eb555eae30276d7e415e7d4dc34775cd8946/conf.d/curl.php#L156 把 源码静态编译的代码 搬运到本项目,执行构建就行了。

得益于本项目大佬的静态编译指导,同时借助 jingjingxyk/swoole-cli 项目构建的依赖库,我在 build_native_php 分支下 能编译 包含libssh2 扩展 PHP 运行时。可以先试试能不能用

附件(需要解包两次): 一个是包含swow 的; 一个是包含swoole 的;

php-cli-v8.2.4-linux-x64-ssh2-swow.tar.xz.zip

php-cli-v8.2.4-linux-x64-ssh2-swoole.tar.xz.zip

临时找了个空间: 放这里了: https://github.com/jingjingxyk/swoole-cli/releases/tag/build-native-php-v0.0.5

我看你一直搞那个 swoole分支,可有方法让 sfx 加载指定或固定路径的.so文件
我一直想把SwooLoad加密扩展弄来整合在一起

from static-php-cli.

xywf221 avatar xywf221 commented on May 18, 2024

建议增加ssh2跟ffi扩展

@xywf221 ssh2 应该可以,ffi 理论上只能给 macOS 版本加入了,因为 Linux 的纯 static link 的二进制即使编译了 ffi 也没有用处。

我有点看不懂现在重构后的逻辑了,麻烦大佬有空加上ssh2扩展

@jingjingxyk 原版的ssh2扩展不支持协程我fork的版本是支持协程的

from static-php-cli.

jingjingxyk avatar jingjingxyk commented on May 18, 2024

@xywf221
他俩并没有没有啥大区别,无非 依赖库的 静态链接 目录有点区别,关于编译PHP 部分是一样的呀。

最大的区别就是: 库链接 时  指定库所在目录有点区别。 

static-php-cli 把多个静态库放在一个目录,链接时 可以少写很多目录
swoole-cli 把每个静态库单独存放 (我需要用到它构建好的依赖库,静态编译其它软件【 opencv 、ffmpeg 、ovs、ovn、dpdk 、 socat 等 】。

大佬已经加好了依赖库: https://github.com/crazywhalecc/static-php-cli/blob/refactor/src/SPC/builder/unix/library/libssh2.php

照着这里 https://github.com/crazywhalecc/static-php-cli/tree/refactor/src/SPC/builder/extension 加上一个配置文件ssh2.php 就可以了

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

@jingjingxyk @xywf221 @TNT-ma 有关议题建议新开 Issue 或 PR 讨论。

from static-php-cli.

kdkd avatar kdkd commented on May 18, 2024

Would you consider adding FreeBSD support? I can open a new issue for this and possibly assist if it would be welcomed.

from static-php-cli.

crazywhalecc avatar crazywhalecc commented on May 18, 2024

Would you consider adding FreeBSD support? I can open a new issue for this and possibly assist if it would be welcomed.

@kdkd FreeBSD is not difficult to support in theory, because it uses almost the same tool chain as Linux. But there is no guarantee that all dependent libraries will work properly, and it will take time to port it. I can try it out in my spare time if I need to, but I'll probably only be able to try it in a FreeBSD virtual machine. (Better than Windows support)

from static-php-cli.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.