Sziasztok!
Segítséget kérnék az alábbi probléma megoldásában:
Van egy régi intranetes szerverünk, melyen a PHP-ben megírt alkalmazás Oracle adatbázist használ. Frissítettem 5.4-ről balga módon 5.6-ra, ezzel viszont elszállt az alkalmazás.
InstantClient11.2 van rajta. Már próbálkoztam mindenféle leírással, de nem megy. a Google már nem barátom, mindent végig próbáltam, fordítottam is PDO-OCI-t.
A hiba (php -ri oci8 utasítás után):
PHP Warning: Module 'oci8' already loaded in Unknown on line 0
PHP Parse error: syntax error, unexpected end of file in Command line code on line 1
Parse error: syntax error, unexpected end of file in Command line code on line 1
yum info php-oci8 kimenete:
Név : php-oci8
Arch : x86_64
Verzió : 5.6.40
Kiadás : 35.el7.remi
Méret : 414 k
Tároló : installed
Tárolóból : remi-php56
Összegzés : A module for PHP applications that use OCI8 databases
URL : http://www.php.net/
Licenc : PHP
Leírás : The php-oci8 packages provides the OCI8 extension version 2.0.12
: and the PDO driver to access Oracle Database.
:
: The extension is linked with Oracle client libraries 21.8
: (Oracle Instant Client). For details, see Oracle's note
: "Oracle Client / Server Interoperability Support" (ID 207303.1).
:
: You must install libclntsh.so.21.1 to use this package, provided
: in the database installation, or in the free Oracle Instant Client
: available from Oracle.
:
: Notice:
: - php-oci8 provides oci8 and pdo_oci extensions from php sources.
: - php-pecl-oci8 only provides oci8 extension.
:
: Documentation is at http://php.net/oci8 and http://php.net/pdo_oci
Az alkalmazás PDO-n keresztül érné el:
PDO("oci:dbname=".$tns.";charset=EE8ISO8859P2",$db_username,$db_password)
Előre is köszönöm!
Hozzászólások
Itt van némi ellentmondás:
* InstantClient11.2 van rajta.
* You must install libclntsh.so.21.1 to use this package
Ennyi.
Az InstantClient a frissítés előtt fel volt telepítve.
Viszont a libclntsh.so.11.1 van a könyvtárában a /usr/lib/oracle/11.2/client/lib könyvtárban.
Igen, de ennek 21-es kliens kellene, nem 11-es. Most mondhatnám, hogy könnyű PHP-t forrásból telepíteni, de igazából nem könnyű.
Elég, ha felteszem az Oracle-től letöltött InstantClient zip-et, és beállítom az LD_LIBRARY_PATH változót erre?
A legjobb az lenne, ha a php_oci8.so meg a php_pdo_oci.so (vagy ahogy hívják őket) ugyanarra a libclntsh.so.N-re dependálnánk. Ezt a
readelf -d <ezaneve.so>
meg aldd <ezaneve.so>
tudja megmondani.php.ini és az include-jait megnézném, szerintem ott lesz elásva valami...
A php.ini-ben nincs beállítva extension, illetve minden oci8-ra utaló sor ki van kommentelve.
A PHP a kiterjesztéseit az /ezc/php.d-ben lévő ini állományokból tölti.
oci8.ini:
extension=oci8.so
pdo_oci.ini:
extension=pdo_oci.so
Unexpected end of line?
Nem valami ezeréves vacak? ( <? nyitó (PHP nélkül) van benne ?)
Ez esetben:
short_open_tag = On
A PHP.inibe (vagy cserélni a <? -t <?php -re a kódban ha olyan már nem van)
short_open_tag = Off
Egyébként régi szutyok. Nem tudom mikor csinálták ... De 5.4-es PHP-vel működött. Csak ey "yum update"-et eresztettem a rendszerre, mert egy másik alkalmazásnak frissebb kell.
Csak hagytam magam belerángatni a hülyeségbe... mert hogy "biztosan menni fog".
Máshol php-fpm-mel több PHP verziót használok.
Mi történik ha átirod short_open_tag=on ra? Ha az a baja, hogy short tagek vannak a kódban az megfixálja.
A helyzet nem változik. Az alkalmazásba nem tudok bejelentkezni, tehár valószínűleg nem tud hozzányúlni az adatbázishoz.
Az Apache log-ja most:
[Fri Feb 03 20:07:41.417815 2023] [mpm_prefork:notice] [pid 31511] AH00170: caught SIGWINCH, shutting down gracefully
[Fri Feb 03 20:07:42.511842 2023] [core:notice] [pid 3535] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Fri Feb 03 20:07:42.512889 2023] [suexec:notice] [pid 3535] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 03 20:07:42.548797 2023] [lbmethod_heartbeat:notice] [pid 3535] AH02282: No slotmem from mod_heartmonitor
[Fri Feb 03 20:07:45.936820 2023] [mpm_prefork:notice] [pid 3535] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_auth_kerb/5.4 PHP/5.6.40 configured -- resuming normal operations
[Fri Feb 03 20:07:45.936874 2023] [core:notice] [pid 3535] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
yum updatet takolt ezer eves foson kiadni majd ontokonbokest vegrehajtani a legjobb penteki buli, en is ezt javaslom mindenkinek:D
Ahogy nézem remi repo is fent van ...
Szedjél le minden php-t, kapcsold ki a remi repot, majd yum install php és akkor visszakerül a centos -es 5.4 es php.
Fedora 37, Thinkpad x280
A php mondja azt hogy ez a modul már be van töltve ha jól értem. Tehát vagy kiveszed az ini-ben ha paranccsal akarod betölteni vagy inditod csak simán mivel már ott lesz, én igy értelmezem.
"php -ri oci8" parancs kimenete:
PHP Parse error: syntax error, unexpected end of file in Command line code on line 1
Parse error: syntax error, unexpected end of file in Command line code on line 1
ettol a php -ri oci8-tol mit varsz amugy?
egyaltalan tudod, hogy ez mit csinal(na)?
A "ri" paraméter a kiterjesztés beállításait adná vissza.
Én biztos h ellapátolnám az egész szeméttelepet valami vm-be.
Egy kísérleti oracle mehetne egy másik vm-be.
Aztán ezzel lehet játszogatni amíg el nem indul.
Amivel most találkozol azt úgy hívják hogy "technical debt" és ha eddig évek alatt nem "fizettétek meg" akkor majd most megfizetitek.
Vagy totál lecserélitek az egész alkalmazást (ha meg lehet tenni) és akkor az évek alatt elkummantott "megfizetést" meg lehet úszni.
VM alatt nem kell túl nagy dologra gondolni, hetznernél pár euróért lehet venni havonta, két kattintás az egész.
Gábriel Ákos