PHP-ban írt régi program életrekeltése MariaDB-vel (PHC-Win)

Fórumok

Sziasztok!

Van egy Delphi-ben megírt progrtamunk, sajnos a forráskódja nincs meg, viszont sok adat van benne, amire szükség van. Egy Woody-n futó MySQL 5.5.33 szolgáltatja az adatbázisát.

Felhúztam egy CentOS 9-et 10.5.22-es MariaDB-vel (a szerveren a PHP verzió 8.0.30, de szerintem a programműködéséhez nincs köze), de a program nem tud kapcsolatot teremteni az új adatbázisszerverrel hitelesítési probléma miatt.

A program az alábbi ddl-eket használja:

php_bcompiler.dll (5.0.4.4 PHP része)

php_gd2.dll (5.0.4.4 PHP része)

php_mysql.dll (5.0.4.4 PHP része)

php_win32std.dll (5.0.5.5 PHP része)

php_winbinder.dll (üresek az infó mezői)

php5ts.dll (5.0.5.5 PHP része)

libmysql.dll (üresek az infó mezői)

freeimage.dll (üresek az infó mezői)

 

Szerintetek hogy lehetne életre kelteni? Köszönöm előre a segítséget!

[Cím módosÍtás] Jobban belemélyedtem és mikiderült, hogy ez egy PHC-Win-nel EXE-vé fordított PHP-ban írt program (PHP-Winbinder-rel), azért vannak ott ezek a DLL-ek.

Hozzászólások

A felhasználó jelszavát a PHPMyAdmin-ban a "Natív MySQL hitelesítés"-t választva állítottam be.

Lefuttattam az alábbi lekérdezést: SELECT * FROM mysql.user;

Mysql alatt látom a titkosított jelszót (password mező).

MariaDB-ben szintén ugyanazt a karaktersorozatot látom, illetve ott látszik az authentication_string mező ugyanazzal az értékkel és a plugin mezőben pedig ott a mysql_native_password a felhasználó sorában.

Első buta kérdés:

FLUSH PRIVILEGES;

volt ugye?
Mondjuk a phpmyadmin végrehajtja ezt egy ideje.

A második hogy a mysql/mariadb ugye host alapján authentikál:
tehát a bob@* nem ugyanaz a user mint a bob@<host>

Szóval érdemes megnézni, hogy az alkalmazás egyáltalán megkeresi-e a database-t (iptraf, tcpdump vagy szimplán a mysql logja).

Ha végképp nem megy:

 mysqld_safe --skip-grant-tables
Szerkesztve: 2024. 12. 12., cs – 11:10

Valamint van egy php-embed.ini állomány az alábbi tartalommal:
 

[PHP]

# Defaults from sapi/cli/php_cli.c

report_zend_debug= 0
display_errors= 1

register_argc_argv= 1
html_errors= 0
implicit_flush= 1
output_buffering= 0
max_execution_time= 0

;include_path =
extension_dir = ""

extension=php_winbinder.dll
extension=php_win32std.dll
extension=php_bcompiler.dll
extension=php_mysql.dll
extension=php_gd2.dll

Ezt találtam hozzá: https://github.com/RDashINC/embeder2

Ha kiderült és módosítottad, hogy nem Delphi, hanem ez a Php 5.0, akkor próbálj ilyen Php verziót keresni hozzá. Ha sietni akarsz, keress olyan Debian verziót, ami alapból ugyanezt a Php verziót támogatja. Ha több időd van, akkor pedig forrásból fordítsál le hozzá mindent egy újabb verzión. Minél frissebb a Linux, annál nagyobb szívás lesz.

Én egy Vmben futtatnám Woody alapokon, ha már kell, fontos. (Ha igazán fontos lenne, ez meg sem történne.)

Amint kiderítettem reggel óta PHP-ban írtak egy felületet, amiből csináltak egy Windows EXE-t, ami csatlakozik az adatbázishoz. A gond az, hogy most nem találok semmi decompiler-t, ami esetleg visszaadná a PHP kódot.

 

Abban igazad van, hogy ha fontos, akkor nem így kéne, sőt kellett volna ... (Iktató program)

2009-2013 között csinálta egy kolléga, aki már elment nyugdíjba ...

A nyugdíjba ment az nem függvénye annak, hogy esetleg megvannak neki a forráskódok, vagy a fejlesztéshez használt dokumentáció. Ezeket el lehetne kérni. A fejlesztési dokumentáció alapján akár újra lehetne írni az egészet és optimálisabb lenne. A PHP kód szimpla frissítése naprakészre is nagy előrelépés lehetne, de inkább menekülnék ettől a megoldástól,  hogy PHP-t Windows-os exe-re fordítgatni egy halott projekttel, amit néhány lelkes ember még fenntart GitHubon, de ott van nagy betűkkel, hogy nem vállal felelősséget,  illetve ne haszáld éles környezetben.

Ha nem járható út, akkor marad a Docker, mert ez a Windbiner egy elég halott ötlet volt, nem is élt meg sok időt az eredeti.

"C" terv új iktató rendszerre migrálás. Egy kalkuláció után az is lehet jó megoldás.

Attól, hogy nyugdíjba ment egy kolléga, a forrásnak a cégnél meg kéne lenni... Ha nincs meg, akkor majd a következő saját fejlesztéseknél erre is fognak gondolni, miután meglátják a DB-struktúra és adatok meg a felhasználók emlékezete alapján készült specifikáció alapján, külső fejlesztő által az újraírásra adott árajánlatot... Mert a vége mindenképp egy migrálás kell legyen új környezetre onnan, ami 1024 sebből vérzik... (érdemes megnézni, hogy a használt komponensekben mennyi nem javított hiba/luk van...)

Én egyébként megnézném, hogy van-e funkcionálisan megfelelő iktatórendszer, aminek van jól definiált ősfeltöltés/adat input lehetősége, és megpróbálnám egy ilyenbe migrálni az adatokat.
 

Be tudsz másolni esetleg valami konkrétabb hibaüzenetet?

Illetve ami még megoldás szokott lenni hasonló esetben, hogyha a MySQL / MariaDB szerver konfigurációjában beállítod a default plugint ezzel a sorral ([mysqld] részben):

default-authentication-plugin=mysql_native_password

MariaDB 5.2 létezik, 5.2.22 nem, szerintem elirás és 5.5.22 akart lenni, viszont a MariaDB csak nativ passwördöt tud.

A MariaDB Server jelenleg nem támogatja sem a sha256_password, sem a caching_sha2_password hitelesítési bővítményt. További információért lásd az MDEV-9804 dokumentumot.

- gépi fordításban.

szerk:

A MySQL 5.6 hozzáadta a sha256_password hitelesítési bővítmény támogatását, a MySQL 8.0 pedig a caching_sha2_password hitelesítési bővítmény támogatását is.

- gépi fordításban.

szóval ez sem játszik szerintem mivel a MySQL is 5.5 -volt.

A MariaDB 10.5.22-es verzió, amihez kapcsolódni kellene olyan cuccal, ami 5.5.33-as MySQL-hez tud authentikálni. Így, hogy végigolvastam a kommenteket, halott ötlet ... Marad a program újraírása, amíg ki nem fogyunk az régi ügyekből.

Nem biztos hogy halott, csak a mysql 5.5.23 az 2013-as a MariaDB 10.5.22 meg 2023-as, lehet nem csípi a régi libmysql-t, ennyire távoli verziókat nem probáltam még össze.

Vagy a MariaDB-böl kéne az 5.5.x, vagy lehet próbálkozni a 10.5.22-es MariaDB dll-jével átnevezve libmysql.dll-nek és sürü miatyánkok közepette megpróbálkozni vele, reménykedve hogy nem változtattak az funkcióneveken/funkciókon (99% hogy de).

Illetve meglesném hogy mysql.users táblába van e a kérdéses felhasználóhoz bejegyzés ahol a host vagy '%' vagy a gép címe ahonnan csatlakozni akarsz.

Én Docker-el odottam meg egy viszonylag frissebb Linuxon a Mysql 5.5-öt futtatni. (Delphi 7, ZeosDB nem szereti nagyon a verzióváltást, 5.5-re váltás is körülményes volt, szerencsére a forrás megvolt)

ez igy nekem megy:

$ mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 30307
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Reading history-file /home/x/.mysql_history
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> \q

$ mysql -V
mysql  Ver 15.1 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper

$ apt show mariadb-client
Package: mariadb-client
Version: 1:10.11.6-0+deb12u1

$ apt show libmariadb3
Package: libmariadb3
Version: 1:10.11.6-0+deb12u1

$ cat /etc/debian_version
12.5

ezek szerint mégis összepróbáltam egy frissebb MariaDB klienst (10.11.6) egy MySQL 5.5 szerverrel :), viszont fordítva még nem.

windows dll/exe-ből resource extractot próbáltál?

Szerkesztve: 2024. 12. 13., p – 16:14

Csinálsz egy "régi fajta" kapcsolódást, a usernév/jelszavaddal . cli- ben is kipróbálhatod, nem kell webszerveren keresztöl. (/usr/bin/phpx.x  kapcsolodás.php )

 

<?php
// Adatbázis kapcsolat beállításai
$servername = "localhost";
$username = "felhasználónév";
$password = "jelszó";
$dbname = "adatbázis_neve";

// Kapcsolat létrehozása
$conn = mysql_connect($servername, $username, $password);

// Kapcsolat ellenőrzése
if (!$conn) {
    die("Kapcsolat sikertelen: " . mysql_error());
}

 

// Kapcsolat bezárása
mysql_close($conn);
?>
 

Szisztok!

 

Most kísérlezetnék CentOS 9-ben docker-t telepítve egy MySQL-lel. Még dockerrrel nem foglalkoztam, így most keresek megfelő csomagot a dockerhub-on.

Ha 5.5-tel próbálkoznék, tudtok ajánlani megfelelőt? Illetve találtam mysql/mysql-server csomagot MySQL 5.7-essel. Ez még kompatibilis lehet az 5.5-tel?

Én a motivációt nem értem: ha nem frissíted az alkalmazást, akkor mitől lesz neked jobb, ha a DB újabb lesz? Ha meg frissíted az alkalmazást, akkor lehet a legújabbra ugrani és kész. Be az egészet VM-be és múkoggyon ameddig tud. Ha meg migrálás lesz, akkor nem kell foglalkozni vele többé. Tényleg nem értem.