Rumah > Soal Jawab > teks badan
Menjalankan DigitalOcean Droplet pada Ubuntu (20.4?)
Pengguna A saya mempunyai kebenaran root. Mereka juga disambungkan kepada penggunaA dalam pangkalan data postgres.
Disebabkan persediaan perisian yang saya gunakan, mereka memerlukan nama pengguna khusus untuk postgresdb. Untuk mengelak daripada mendedahkan terlalu banyak data dalam talian, kami akan memanggilnya userB. Ini adalah kedua-dua pengguna linux dan postgres.
Saya menjalankan arahan php yang pada asasnya mengambil (uname,dbname,pdo,options) sebagai input tetapi pada masa ini ia gagal kerana ia tidak dapat mencari fail pdo.
Saya menyemak imbas beberapa siaran. Seseorang mencadangkan menyahkomen semua baris pgsql dan pdo_pgsql dalam semua fail php.ini, yang telah saya lakukan, sama ada untuk pengeluaran, pembangunan atau versi tujuan umum fail tersebut.
Apabila saya menjalankan arahan sebagai userA dan userB, saya mendapat ralat ini.
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
Namun, pdo_pgsql.so sebenarnya wujud di lokasi tersebut. (Adakah ia mencari fail bernama pdo_pgsql tetapi pdo_pgsql.so?)
laman web php berkata untuk menjalankan satu
./configure
arahan, tetapi ia tidak benar-benar menyatakan di mana konfigurasi folder terletak. Ia bukan pakej yang saya boleh pasang dari cli. (https://www.php.net/manual/en/ref.pdo-pgsql.php)
Halaman lain mengatakan anda perlu memasang autoconf dahulu (https://unix.stackexchange.com/questions/158960/can-not-run-configure-command-no-such-file-or-directory), tetapi tiada cara untuk membuat ini. / Konfigurasikan arahan yang boleh digunakan untuk saya.
Saya juga menemui artikel yang mengatakan bahawa fail conf dalam apache perlu dikemas kini untuk menunjukkan lokasi fail PDO, tetapi saya belum mempunyai pelayan yang sedang berjalan, saya hanya menjalankan fail php yang mengisi pangkalan data pgsql tempatan. (sambungan pgsql tidak dimuatkan)
Berlari
php -i | grep PDO
diberikan
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0 PDO PDO support => enabled PDO drivers => pgsql PDO Driver for PostgreSQL => enabled
Walaupun mengikut perkhidmatan pelanggan API, ia sepatutnya kembali
PDO PDO support => enabled PDO drivers => mysql, odbc, pgsql PDO Driver for MySQL => enabled PDO Driver for ODBC (unixODBC) => enabled PDO Driver for PostgreSQL => enabled
Walaupun saya rasa mereka memberikan beberapa contoh pemacu yang berbeza bergantung pada perisian pangkalan data yang anda pilih.
Saya tidak pasti apa yang perlu dilakukan.
Kemas kini:
Saya cuba dengan mengedit fail php.ini yang digunakan oleh php
php -i | grep ini
Saya telah menggunakannya
locate pdo_pgsql
Cari laluan fail pdo_pgsql dan pdo_pgsql.so. Saya telah mencuba 4 suntingan berbeza pada fail php.ini. 2 Nyahkomen (satu demi satu) sambungan pgsql lalai. 2 adalah laluan fail yang berbeza ke fail pdo_pgsql yang terdapat pada sistem saya melalui locate.
**extension=/usr/lib/php/20190902/pdo_pgsql.so** sudo php file.php PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20190902/pdo_pgsql.so' (tried: /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: **undefined symbol: pdo_parse_params**), /usr/lib/php/20190902//usr/lib/php/20190902/pdo_pgsql.so.so (/usr/lib/php/20190902//usr/lib/php/20190902/pdo_pgsql.so.so: **cannot open shared object file: No such file or directory**)) in Unknown on line 0 **extension=/var/lib/php/modules/7.4/registry/pdo_pgsql** sudo php file.php PHP Warning: PHP Startup: Unable to load dynamic library '/var/lib/php/modules/7.4/registry/pdo_pgsql' (tried: /var/lib/php/modules/7.4/registry/pdo_pgsql (/var/lib/php/modules/7.4/registry/pdo_pgsql: **file too short**), /usr/lib/php/20190902//var/lib/php/modules/7.4/registry/pdo_pgsql.so (/usr/lib/php/20190902//var/lib/php/modules/7.4/registry/pdo_pgsql.so: **cannot open shared object file: No such file or directory)**) in Unknown on line 0 Could not open input file: file.php **extension=pgsql** sudo php file.php **PHP Warning: Module 'pgsql' already loaded in Unknown on line 0** Could not open input file: file.php **extension=pdo_pgsql** sudo php file.php PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: **cannot open shared object file: No such file or directory**), /usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: **undefined symbol: pdo_parse_params**)) in Unknown on line 0 Could not open input file: file.php
Output mengikut keperluan pengguna di bawah
$ php -v PHP 7.4.3 (cli) (built: Mar 2 2022 15:36:52) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies $ dpkg -l|grep pgsql ii php-pgsql 2:7.4+75 all PostgreSQL module for PHP [default] ii php7.4-pgsql 7.4.3-4ubuntu2.10 amd64 PostgreSQL module for PHP $ dpkg -l|grep php ii php-common 2:75 all Common files for PHP packages ii php-pgsql 2:7.4+75 all PostgreSQL module for PHP [default] ii php7.4-cli 7.4.3-4ubuntu2.10 amd64 command-line interpreter for the PHP scripting language ii php7.4-common 7.4.3-4ubuntu2.10 amd64 documentation, examples and common module for PHP ii php7.4-json 7.4.3-4ubuntu2.10 amd64 JSON module for PHP ii php7.4-opcache 7.4.3-4ubuntu2.10 amd64 Zend OpCache module for PHP ii php7.4-pgsql 7.4.3-4ubuntu2.10 amd64 PostgreSQL module for PHP ii php7.4-readline 7.4.3-4ubuntu2.10 amd64
P粉4638244102024-03-22 09:12:49
Jika sesuatu tidak berfungsi pada DEV enc anda, jangan cuba pada PROD..itu mengalahkan tujuan memiliki DEV env..
Dalam php.ini
anda sepatutnya sudah mempunyai contoh tentang cara mendayakan pgsql:
extension=pdo_pgsql
Bukan module=
Saya tidak tahu versi PHP yang anda ada, tetapi sila pastikan anda memasang versi yang sesuai php7.X-pgsql
kerana anda nampaknya mempunyai versi perpustakaan yang salah.
Mungkin anda boleh menambah output berikut pada soalan anda:
dpkg -l|grep pgsql dpkg -l|grep php php -v