Skip to content

Commit

Permalink
[Swoole AI Assistant] translate to de
Browse files Browse the repository at this point in the history
  • Loading branch information
SwooleAI committed Dec 11, 2024
1 parent 85c43cf commit dc2a416
Show file tree
Hide file tree
Showing 26 changed files with 1,462 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/de/.translate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"latest_commit":"85c43cf27ffabd4ee9f861fba590979be0e338de"}
48 changes: 48 additions & 0 deletions docs/de/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---

- [In PHP auf Python-Module aufrufen](php/tutorial.md)
- [In Python PHP-Funktionen aufrufen](python/tutorial.md)
- [Entwicklungspfad](roadmap.md)

PHP-Erweiterungen
----
* [Kompilierung und Installation](php/build.md)
* [Sprachkern](php/core.md)
* [Interne Typen](php/object.md)
* [Fehlerbehandlung](php/exception.md)
* [Ganzzahlige Zahlen](php/int.md)
* [Rückruffunktionen](php/fn.md)
* [Speicherkopien](php/memory.md)
* [Leistungstests](benchmark.md)
* [IDE-Tips](php/composer.md)
* [Socket-API](php/socket.md)
* [Erben von Python-Klassen](php/inherit.md)

Python-Module

---

- [Funktionsliste](python/function.md)

- [Objektoperationen](python/object.md)

- [String-Operationen](python/string.md)

- [Array-Operationen](python/array.md)

- [Klassensystem](python/class.md)

- [Referenztypen](python/reference.md)

- [Speicherkopien](php/memory.md)
- [Modulverpackung](python/module.md)

Anleitungen

---

- [phpy: Eine Bibliothek zur gegenseitigen Anrufung von PHP und Python, die die Python-Ökologie in PHP einführt](https://zhuanlan.zhihu.com/p/670373512)

- [Compilierung und Installation von phpy unter Ubuntu 18.04 mit PHP-8.3](https://mp.weixin.qq.com/s/q_-keG3clvs7Hii-oEW3RQ)
- [phpy: Verbindung zwischen PHP und Python-Ökologie](https://zhuanlan.zhihu.com/p/671645003)
- [Wie kann PHP über phpy开源大型模型平台魔塔ModelScope aufrufen](https://mp.weixin.qq.com/s/p5x2XwJgPpodZI_Woa8qPA)
113 changes: 113 additions & 0 deletions docs/de/benchmark.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Stresstest
In einem Stresstest-Skript wurde ein `PyDict` angelegt, um sowohl PHP- als auch Python-Code für die Ausführung von `10 Millionen` Mal zu lesen und zu schreiben.

- `PHP-Version`: `PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)`

- `Python-Version`: `Python 3.11.5`

- Betriebssystem: `Ubuntu 20.04`
- `GCC-Version`: `gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)`

> Bitte beachten Sie, dass dieser Test eine `10 Millionen` Elemente umfassende `HashTable` benötigen und mindestens `2GB` an Arbeitsspeicher für die Ausführung benötigen kann.
## PHP

```php
<?php

$dict = new PyDict();
const COUNT = 10000000;

$n = COUNT;
$s = microtime(true);
while ($n--) {
$dict['key-' . $n] = $n * 3;
}
echo 'dict set: ' . round(microtime(true) - $s, 6) . ' Sekunden' . PHP_EOL;

$c = 0;
$n = COUNT;
$s = microtime(true);
while ($n--) {
$c += $dict['key-' . $n];
}
echo 'dict get: ' . round(microtime(true) - $s, 6) . ' Sekunden' . PHP_EOL;
```

## Python
```python
import time

my_dict = {}
COUNT = 10000000

n = COUNT
start_time = time.time()

for i in range(n):
my_dict["key-" + str(i)] = i * 3

elapsed_time = time.time() - start_time

print(f"dict set: {elapsed_time:.6f} seconds")

n = COUNT

total = 0
start_time_get = time.time()
for i in range(n):
total += my_dict["key-" + str(i)]

elapsed_time_get = time.time() - start_time_get

print(f"dict get: {elapsed_time_get:.6f} seconds")
```

## PHP Array
```php
<?php

ini_set('memory_limit', '2G');
$dict = [];
const COUNT = 10000000;

$n = COUNT;
$s = microtime(true);
while ($n--) {
$dict['key-' . $n] = $n * 3;
}
echo 'array set: ' . round(microtime(true) - $s, 6) . ' Sekunden' . PHP_EOL;

$c = 0;
$n = COUNT;
$s = microtime(true);
while ($n--) {
$c += $dict['key-' . $n];
}
echo 'array get: ' . round(microtime(true) - $s, 6) . ' Sekunden' . PHP_EOL;
```

## Ergebnisvergleich

```shell
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php
dict set: 4.663758 Sekunden
dict get: 3.980076 Sekunden
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php
array set: 1.578963 Sekunden
array get: 0.831129 Sekunden
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py
dict set: 5.321664 Sekunden
dict get: 4.969081 Sekunden
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$
```

Mit dem `Python` Test als Basis:

| Scriptname | Set | Get |
|:----------|:----:|-----:|
| dict.php | 114% | 125% |
| array.php | 337% | 599% |

- `phpy` schreibt PHP-Code in `PyDict` mit einer Leistung, die 14% höher ist als die native Python-Leistung und 25% höher für das Lesen.
- Die Leistung von PHP beim Schreiben in ein PHP-Array ist 237% höher als die Leistung von Python beim Schreiben in ein Dict und fast 500% höher für das Lesen.
140 changes: 140 additions & 0 deletions docs/de/php/build-on-windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Windows-Kompilierung

> Unterstützt nur PHP-Versionen ab 8.1

## PHP-Entwicklungsumgebung

Referenz: [https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2)



- Installieren Sie `Visual C++ 16.0`, Adresse: [https://aka.ms/vs/16/release/vs_buildtools.exe](https://aka.ms/vs/16/release/vs_buildtools.exe)

- Installieren Sie `php-sdk-binary-tools`, Adresse: [https://github.com/php/php-sdk-binary-tools](https://github.com/php/php-sdk-binary-tools)

- Herunterladen Sie die `php`-Quellcode

- Installieren Sie die Abhängigkeiten, Adresse: [https://windows.php.net/downloads/php-sdk/deps/](https://windows.php.net/downloads/php-sdk/deps/)

> Alle `PHP`-相关的 Dateien werden in dem Verzeichnis `d:\workspace` installiert

## Python-Entwicklungsumgebung



- Installieren Sie `Python`, Adresse: [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/)

- Legen Sie die `Path`-Umweltvariablen fest, fügen Sie `d:\python` hinzu, und führen Sie in der `Windows-Terminal` `Python -V` durch

- Legen Sie die `PYTHONHOME`-Umweltvariablen fest, zeigen Sie auf `d:\python`

> `Python` wird im Verzeichnis `d:\python` installiert
```shell
C:\WINDOWS\system32>python -V
Python 3.12.1

echo %Path%
echo %PYTHONHOME%
```



## Build-Verzeichnis

```shell
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0
phpsdk-vs16-x64.bat
```

Nach dem Erfolg betreten Sie diesen Terminal und wechseln Sie in das Verzeichnis `php-src`

```shell
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5
phpsdk_deps -u
```

Erweiterungsprojekte werden im `ext` Verzeichnis von `php-src` platziert, zum Beispiel: `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\ext\phpy`, oder Sie können `mklink` verwenden, um einen softlink zu erstellen.



## Kompilierungsconfig

```shell
$ buildconf --force
Rebuilding configure.js
Jetzt führen Sie 'configure --help' durch
configure --with-openssl --with-mysqlnd --with-mysqli --enable-mbstring --enable-pdo --with-pdo-mysql --with-curl --enable-cli --enable-opcache --disable-zts --enable-phpy=shared
```

`--enable-phpy=shared` bedeutet, dass die `phpy`-Erweiterung aktiviert wird und als `.dll` dynamische Link-Bibliothek kompiliert wird

Nach erfolgreicher Ausführung wird das folgende Output generiert:

```shell
...

Generierung von main/config.w32.h
Generierung von phpize
Fertig.


Aktivierte Erweiterungen:
-----------------------
| Erweiterung | Modus |
-----------------------
| date | statisch |
| hash | statisch |
| json | statisch |
| pcre | statisch |
| phpy | geteilt |
| reflection | statisch |
| spl | statisch |
| standard | statisch |
-----------------------


Aktivierte SAPIs:
-------------
| Sapi-Name |
-------------
| cli |
-------------


---------------------------------------
| | |
---------------------------------------
| Build-Typ | Release |
| Thread-Sicherheit | Nein |
| Compiler | Visual C++ 2019 |
| Architektur | x64 |
| Optimierung | PGO ausgeschaltet |
| Native Intrinsics | SSE2 |
| Statische Analyzer | ausgeschaltet |
---------------------------------------


Typ 'nmake' um PHP zu bauen

D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5
$
```



## Erweiterung kompilieren
```shell
nmake clean
nmake
```

## Binär-Paketieren

```shell
nmake snap
```

Nach erfolgreicher Ausführung wird im Verzeichnis `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\x64\Release` das Paket `php-8.1.5-nts-Win32-vs16-x64.zip` generiert.
61 changes: 61 additions & 0 deletions docs/de/php/build.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Linux/macOS/Unix-Kompilierung

> Derzeit werden nur Python 3.10 oder höher unterstützt.
- Ändern Sie in `config.m4` den Pfad für `Python`, der Default ist: `/opt/anaconda3`

```shell
phpize
./configure
make install
```

Fügen Sie in `php.ini` `extension=phpy.so` hinzu.
Verwenden Sie `php -m`, um zu sehen, ob es in der Liste erscheint. Sie können auch `php --ri phpy` verwenden, um Informationen anzuzeigen, und `php --re phpy`, um die von der Erweiterung definierte Klassen und Methoden zu sehen.

```shell
php -m
----
```
```shell
php -m
[PHP Modules]
bcmath
bz2
Core
...
phpy
...

[Zend Modules]
Zend OPcache
```

Kompilierungsoptionen
----

### `--with-python-dir`

Geben Sie den Installationspfad für `Python` an, zum Beispiel sollte `/usr/bin/python` mit `--with-python-dir=/usr` festgelegt werden.
Wenn Sie `Python` mit `conda` installiert haben, sollte es mit `/opt/anaconda3` festgelegt werden.

### `--with-python-version`
Geben Sie die Version von `Python` an, zum Beispiel `3.10`, `3.11`, `3.12`. Der Default verwendet `$python-dir/bin/python -V`, um die Version zu ermitteln.

### `--with-python-config`
Setzen Sie den Pfad für das `python-config` Executable fest. Diese Option hat Vorrang vor `--with-python-dir` und `--with-python-version`.

```shell
(base) htf@swoole-12:~/workspace/python-php$ which python3.11-config
/opt/anaconda3/bin/python3.11-config
(base) htf@swoole-12:~/workspace/python-php$ python3.11-config
Usage: /opt/anaconda3/bin/python3.11-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed
(base) htf@swoole-12:~/workspace/python-php$ ./configure --wi
--with-gnu-ld --with-libdir= --without-PACKAGE --with-PACKAGE --with-php-config= --with-pic --with-python-config --with-python-dir --with-python-version --with-tags=
(base) htf@swoole-12:~/workspace/python-php$ ./configure --with-python-config=python3.11-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for a sed that does not truncate output... /bin/sed
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
```
Loading

0 comments on commit dc2a416

Please sign in to comment.