Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

每天都在关注,提一个想法 #8

Closed
etjson opened this issue Nov 17, 2022 · 10 comments
Closed

每天都在关注,提一个想法 #8

etjson opened this issue Nov 17, 2022 · 10 comments

Comments

@etjson
Copy link

etjson commented Nov 17, 2022

一直在关注cli的更新情况,希望可以支持把hyperf框架打包的phar包直接编译进cli,这样分发出去只要给一个文件就够了

@matyhtf
Copy link
Member

matyhtf commented Nov 21, 2022

虽然通过各种奇技淫巧能实现这样的功能,但是这个并不是真正的编译php代码为机器码然后构建成为一个可执行程序。

php 语言只是一个脚本语言,它的运行方式就是使用 VM 加载执行的方式。强行整合为一个可执行文件,具有一定的迷惑性。

就像 java 程序,都是通过先安装 jre 再通过 java your_app.jar 的方式运行的。

分发问题

swoole-cli已经解决了分发的问题,你可以把 swoole-cli 和 你的php 程序一起打包给用户即可。
这里何必纠结于分发一个文件,还是两个文件呢,这并没有什么区别。

授权问题

swoole-cli中使用了很多GPL协议的软件包,这些软件包是有授权污染的问题的,若要将swoole-cli的二进制程序进行发行,相关的源代码必须是开源的。

如果你坚持要将你的 php 代码和 swoole-cli 打包在一起成为一个可执行文件,可能会有法律风险,这可能会被视为发行程序的一部分,你的 php 代码可能也需要开源。

@TNT-ma
Copy link

TNT-ma commented Feb 4, 2023

虽然通过各种奇技淫巧能实现这样的功能,但是这个并不是真正的编译php代码为机器码然后构建成为一个可执行程序。

php 语言只是一个脚本语言,它的运行方式就是使用 VM 加载执行的方式。强行整合为一个可执行文件,具有一定的迷惑性。

就像 java 程序,都是通过先安装 jre 再通过 java your_app.jar 的方式运行的。

分发问题

swoole-cli已经解决了分发的问题,你可以把 swoole-cli 和 你的php 程序一起打包给用户即可。 这里何必纠结于分发一个文件,还是两个文件呢,这并没有什么区别。

授权问题

swoole-cli中使用了很多GPL协议的软件包,这些软件包是有授权污染的问题的,若要将swoole-cli的二进制程序进行发行,相关的源代码必须是开源的。

如果你坚持要将你的 php 代码和 swoole-cli 打包在一起成为一个可执行文件,可能会有法律风险,这可能会被视为发行程序的一部分,你的 php 代码可能也需要开源。

说了一堆也没有说清楚 如何把 phar 和 swoole 整合为一个文件

@etjson
Copy link
Author

etjson commented Feb 4, 2023

虽然通过各种奇技淫巧能实现这样的功能,但是这个并不是真正的编译php代码为机器码然后构建成为一个可执行程序。
php 语言只是一个脚本语言,它的运行方式就是使用 VM 加载执行的方式。强行整合为一个可执行文件,具有一定的迷惑性。
就像 java 程序,都是通过先安装 jre 再通过 java your_app.jar 的方式运行的。

分发问题

swoole-cli已经解决了分发的问题,你可以把 swoole-cli 和 你的php 程序一起打包给用户即可。 这里何必纠结于分发一个文件,还是两个文件呢,这并没有什么区别。

授权问题

swoole-cli中使用了很多GPL协议的软件包,这些软件包是有授权污染的问题的,若要将swoole-cli的二进制程序进行发行,相关的源代码必须是开源的。
如果你坚持要将你的 php 代码和 swoole-cli 打包在一起成为一个可执行文件,可能会有法律风险,这可能会被视为发行程序的一部分,你的 php 代码可能也需要开源。

说了一堆也没有说清楚 如何把 phar 和 swoole 整合为一个文件

开源项目中不会加入一些不规范性的想法,swoole-cli中只是没有预留这样的入口,但并不会阻止你实现,我已经二改成打包单个文件,但感觉实用性不大,做个小端分发出去还是挺方便的,上面也解释了因为GPL的原因会导致你就算整合成一个文件也要开源一部分,swoole-cli的定位应该是jdk而不是webpack

@jingjingxyk
Copy link
Contributor

jingjingxyk commented Feb 4, 2023

@etjson

  1. swoole-cli 本质是PHP 运行时,只不过名字叫做swoole-cli,实质仍然是PHP 解释器。

  2. swoole-cli 详情:静态编译的PHP运行时,其中包括了swoole扩展。

  3. swoole-cli 目标是:让PHP能像nodejs一样运行

  4. Phar打包: 只是把多个文件归档到同一个可压缩的文件中。 Phar打包并没有生成字节码。

备注: swoole 仅仅是PHP一个扩展,不能独立运行
Phar包裹器:https://www.php.net/manual/zh/wrappers.phar.php

关键点

其实你想要的就是类似:python3 pyinstaller 、nodejs pkg (运行时+用户应用程序),生成一个二进制可执行文件。

生成你想要的

都到这一步了,其实你已经有了:运行时和应用程序, 接着就是生成应用程序安装包或者直接可运行的程序即可,自己搜索下面这些包格式的配置就好了

类似这些应用程序安装包格式 : AppX DMG Flatpak AppImage Snapcraft Pkg deb RPM MSI exe

@jingjingxyk
Copy link
Contributor

jingjingxyk commented Feb 4, 2023

phar 和 swoole

php 运行时包含swoole。你想要的是 php运行时+用户应用程序打成一个可执行程序。

@etjson
Copy link
Author

etjson commented Feb 4, 2023

phar 和 swoole

php 运行时包含swoole。你想要的是 php运行时+用户运用程序打成一个可执行包。

这个问题已经得到解决,swoole-cli可以加入phar合并为一个文件,但不符合规范性,只是奇技淫巧,并且本问题仅仅只是讨论打包单个文件的可行性。

@jingjingxyk
Copy link
Contributor

AppImage
flatpak

@TNT-ma
Copy link

TNT-ma commented Feb 4, 2023

phar 和 swoole

php 运行时包含swoole。你想要的是 php运行时+用户运用程序打成一个可执行程序。

就如同:static-php-cli 项目:cat micro.sfx my.phar > single-app
single-app 就是一个PHP + my.phar 组合一起的二进制文件
swoole-cli 不可行

@jingjingxyk
Copy link
Contributor

jingjingxyk commented Mar 16, 2023

@TNT-ma 看这里 实现打包 PHP 文件进二进制可执行文件,小伙伴在弄了哦

@jingjingxyk
Copy link
Contributor

@TNT-ma 试一试这是你想要的的功能,https://github.com/swoole/swoole-cli/tree/main/samples/sfx 小伙伴完成了,试一试

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants