-
-
Notifications
You must be signed in to change notification settings - Fork 21
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
cff2eb6
commit f47fae5
Showing
60 changed files
with
74 additions
and
8,042 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,3 +11,4 @@ php.ini | |
erl_crash.dump | ||
rebar3.crashdump | ||
.DS_Store | ||
doc/ |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
all: ephp | ||
|
||
doc: | ||
./rebar3 as doc edown | ||
./rebar3 as doc do ex_doc | ||
|
||
clean-devel: clean | ||
-rm -rf _build | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,15 +1,8 @@ | ||
# ePHP | ||
|
||
|
||
# ePHP # | ||
|
||
Copyright (c) 2013-2021 Altenwald Solutions, S.L. | ||
|
||
__Authors:__ "Manuel Rubio" ([`[email protected]`](mailto:[email protected])). | ||
|
||
[![Build Status](https://img.shields.io/travis/bragful/ephp/master.svg)](https://travis-ci.org/bragful/ephp) | ||
[![Build Status](https://github.com/bragful/ephp/actions/workflows/erlang.yml/badge.svg)](https://github.com/bragful/ephp/actions/workflows/erlang.yml) | ||
[![Codecov](https://img.shields.io/codecov/c/github/bragful/ephp.svg)](https://codecov.io/gh/bragful/ephp) | ||
[![License: LGPL 2.1](https://img.shields.io/github/license/bragful/ephp.svg)](https://raw.githubusercontent.com/bragful/ephp/master/COPYING) | ||
[![Gitter](https://img.shields.io/gitter/room/bragful/ephp.svg)](https://gitter.im/bragful/ephp) | ||
[![Hex](https://img.shields.io/hexpm/v/ephp.svg)](https://hex.pm/packages/ephp) | ||
|
||
PHP Interpreter pure 100% Erlang. This interpreter was made for enhance and give flexibility to projects that requires an interface for plugins or addons without new compilations. | ||
|
@@ -18,18 +11,31 @@ In the same way, you can use for server PHP pages in an easy way. | |
|
||
The port is not 100% complete, please refer to [compatibility table](http://github.com/bragful/ephp/blob/master/doc/COMPATIBILITY.md). | ||
|
||
<strong>IMPORTANT</strong> | ||
the generation of the documentation is made using `edown` which isn't compatible with OTP 23 and OTP 24 at the moment. If you need to generate the documentation, install an OTP 22 and run `make doc` removing the `_build` directory if you compiled previously with a more recent OTP version. | ||
> ### IMPORTANT {: .warning} | ||
> | ||
> The generation of the documentation is made using `edown` which isn't compatible with OTP 23 and OTP 24 at the moment. If you need to generate the documentation, install an OTP 22 and run `make doc` removing the `_build` directory if you compiled previously with a more recent OTP version. | ||
|
||
### Who's using it? | ||
|
||
At the moment, this project has been tested using Kazoo and connected to FreeSwitch for writing small VoIP controlling apps. | ||
|
||
In addition, it was tested using XMPP in the Snatch Project (deprecated). | ||
|
||
You can find [here](https://github.com/bragful/ephp_template) an implementation for Phoenix Framework to use PHP instead of EEx for some pages. | ||
|
||
### <a name="Donation">Donation</a> ### | ||
And as embedded project, it's planned to be included in [Conta](https://github.com/altenwald/conta). | ||
|
||
If you are using **ePHP** and you are proud about you created, please let me know for extending the list. | ||
|
||
### Donation | ||
|
||
If you want to support the project to advance faster with the development you can make a donation. Thanks! | ||
|
||
[![paypal](https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=CBYJ5V2ZWWZ8G) | ||
[![paypal](https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/donate/?hosted_button_id=PU85KWS9UZMKA) | ||
|
||
|
||
### <a name="Why_PHP_over_Erlang?">Why PHP over Erlang?</a> ### | ||
### Why PHP over Erlang? | ||
|
||
When I was leading a team of developers in Spain, in Telco companies the most in use language was PHP. Even for handling concurrency, they were using some techniques with POSIX mutexes, shared memory and nohup background processes. That was a nightmare. | ||
|
||
|
@@ -48,36 +54,47 @@ You can see even an example of ephp in use for the running on-the-fly of PHP cod | |
And a post to know how to write a stand-alone server with Erlang, without write a single line of Erlang code and using PHP for the logic of a XMPP component [here](https://medium.com/@bosqueviejo/developing-a-bot-using-tdd-on-erlang-without-write-a-single-line-of-code-in-erlang-5278e28b0356). | ||
|
||
|
||
### <a name="Requirements">Requirements</a> ### | ||
### Requirements | ||
|
||
ePHP requires to be run over an Erlang/OTP 19+, but not all the versions are full compatible or recommended. See the list: | ||
|
||
| Erlang Version | Support | Notes | | ||
|:---|:---:|:---| | ||
| 24.0 | :heavy_check_mark: | Recommended if you use OTP 24 | | ||
| 23.3 | :heavy_check_mark: | Recommended if you use OTP 23 | | ||
| 23.2 | :heavy_check_mark: | | | ||
| 23.1 | :heavy_check_mark: | | | ||
| 23.0 | :heavy_check_mark: | | | ||
| 22.3 | :heavy_check_mark: | Recommended if you use OTP 22 | | ||
| 22.2 | :heavy_check_mark: | | | ||
| 22.1 | :heavy_check_mark: | | | ||
| 22.0 | :heavy_check_mark: | | | ||
| 21.3 | :heavy_check_mark: | Recommended if you use OTP 21 | | ||
| 21.2 | :heavy_check_mark: | | | ||
| 21.1 | :heavy_check_mark: | | | ||
| 21.0 | :heavy_check_mark: | | | ||
| 20.3 | :x: | fails in math lib | | ||
| 20.2 | :heavy_check_mark: | Recommended if you use OTP 20 | | ||
| 20.1 | :heavy_check_mark: | | | ||
| 20.0 | :heavy_check_mark: | | | ||
| 19.3 | :heavy_check_mark: | Recommended if you use OTP 19 | | ||
| 19.2 | :heavy_check_mark: | | | ||
| 19.1 | :heavy_check_mark: | | | ||
| 19.0 | :heavy_check_mark: | | | ||
|
||
|
||
### <a name="Getting_Started">Getting Started</a> ### | ||
| 27.0 | ✓ | Recommended if you use OTP 27 | | ||
| 26.2 | 𐄂 | fails compiling parser | | ||
| 26.1 | 𐄂 | fails compiling parser | | ||
| 26.0 | ✓ | Recommended if you use OTP 26 | | ||
| 25.3 | ✓ | Recommended if you use OTP 25 | | ||
| 25.2 | ✓ | | | ||
| 25.1 | ✓ | | | ||
| 25.0 | ✓ | | | ||
| 24.3 | ✓ | Recommended if you use OTP 24 | | ||
| 24.2 | ✓ | | | ||
| 24.1 | ✓ | | | ||
| 24.0 | ✓ | | | ||
| 23.3 | ✓ | Recommended if you use OTP 23 | | ||
| 23.2 | ✓ | | | ||
| 23.1 | ✓ | | | ||
| 23.0 | ✓ | | | ||
| 22.3 | ✓ | Recommended if you use OTP 22 | | ||
| 22.2 | ✓ | | | ||
| 22.1 | ✓ | | | ||
| 22.0 | ✓ | | | ||
| 21.3 | ✓ | Recommended if you use OTP 21 | | ||
| 21.2 | ✓ | | | ||
| 21.1 | ✓ | | | ||
| 21.0 | ✓ | | | ||
| 20.3 | 𐄂 | fails in math lib | | ||
| 20.2 | ✓ | Recommended if you use OTP 20 | | ||
| 20.1 | ✓ | | | ||
| 20.0 | ✓ | | | ||
| 19.3 | ✓ | Recommended if you use OTP 19 | | ||
| 19.2 | ✓ | | | ||
| 19.1 | ✓ | | | ||
| 19.0 | ✓ | | | ||
|
||
|
||
### Getting Started | ||
|
||
A simple way to use, is include in your project `rebar.config` the following dependency line: | ||
|
||
|
@@ -99,70 +116,12 @@ The result stored in `Text` should be: | |
Result for $a = 115 | ||
``` | ||
|
||
### Controversial License | ||
|
||
### <a name="Built-in_Libs">Built-in Libs</a> ### | ||
|
||
PHP has a lot of built-in libraries. This interpreter has a little implementation of them. You can see the functions in the [compatibility table](http://github.com/bragful/ephp/blob/master/doc/COMPATIBILITY.md). | ||
Yes, looks like not so many people like GPL lincenses and they didn't realised that LGPL 1.2 is very light license in comparison. I mean, I'm the author and it's not my aim to sue to the people for using this software. LGPL is only requesting feedback in case you change and improve the library, that's all. In addition, if you are using it for a project and you have a credits section, it could be great to be included. | ||
|
||
You can add your own functions specifying the PHP name, and the module and function, as follow: | ||
It's NOT required your project will be LGPL or even open source. I think it's the most important part. | ||
|
||
```erlang | ||
ephp_context:register_func(Ctx, <<"time">>, ephp_lib_date, time). | ||
``` | ||
|
||
|
||
|
||
## Modules ## | ||
|
||
|
||
<table width="100%" border="0" summary="list of modules"> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp.md" class="module">ephp</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_array.md" class="module">ephp_array</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_class.md" class="module">ephp_class</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_class_closure.md" class="module">ephp_class_closure</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_class_exception.md" class="module">ephp_class_exception</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_config.md" class="module">ephp_config</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_const.md" class="module">ephp_const</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_context.md" class="module">ephp_context</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_cover.md" class="module">ephp_cover</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_data.md" class="module">ephp_data</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_datetime.md" class="module">ephp_datetime</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_error.md" class="module">ephp_error</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_func.md" class="module">ephp_func</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_include.md" class="module">ephp_include</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_interpr.md" class="module">ephp_interpr</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib.md" class="module">ephp_lib</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_array.md" class="module">ephp_lib_array</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_class.md" class="module">ephp_lib_class</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_control.md" class="module">ephp_lib_control</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_date.md" class="module">ephp_lib_date</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_error.md" class="module">ephp_lib_error</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_exec.md" class="module">ephp_lib_exec</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_file.md" class="module">ephp_lib_file</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_func.md" class="module">ephp_lib_func</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_info.md" class="module">ephp_lib_info</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_math.md" class="module">ephp_lib_math</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_misc.md" class="module">ephp_lib_misc</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_ob.md" class="module">ephp_lib_ob</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_pcre.md" class="module">ephp_lib_pcre</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_spl.md" class="module">ephp_lib_spl</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_string.md" class="module">ephp_lib_string</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_lib_vars.md" class="module">ephp_lib_vars</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_mem.md" class="module">ephp_mem</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_ns.md" class="module">ephp_ns</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_object.md" class="module">ephp_object</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_output.md" class="module">ephp_output</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_parser.md" class="module">ephp_parser</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_parser_class.md" class="module">ephp_parser_class</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_parser_expr.md" class="module">ephp_parser_expr</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_parser_func.md" class="module">ephp_parser_func</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_parser_string.md" class="module">ephp_parser_string</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_shutdown.md" class="module">ephp_shutdown</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_stack.md" class="module">ephp_stack</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_stream.md" class="module">ephp_stream</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_stream_file.md" class="module">ephp_stream_file</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_string.md" class="module">ephp_string</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_timezone.md" class="module">ephp_timezone</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_tracer.md" class="module">ephp_tracer</a></td></tr> | ||
<tr><td><a href="http://github.com/bragful/ephp/blob/master/doc/ephp_vars.md" class="module">ephp_vars</a></td></tr></table> | ||
Copyright (c) 2013-2024 Altenwald | ||
|
||
__Authors:__ "Manuel Rubio" ([`[email protected]`](mailto:[email protected])). |
Oops, something went wrong.