web-dev-qa-db-ja.com

致命的エラー:未定義関数pg_connect()の呼び出し

PostgreSQLがインストールされているデータベース(リモートサーバー)に接続しようとしています。私のPHPコードはpg_connect()を使用してデータベースに接続しようとしていますが、次のエラーが表示されます。 82行目の/functions.php。

行82は単純に次のとおりです。

_$db = pg_connect($conn_string);
where $conn_string = "Host=".$hostname." port=5432 dbname=".$dbname." user=".$db_user." password=".$db_password.""
_

(以前に定義されたすべての変数)

私は多くのフォーラムをチェックし、提案された唯一の解決策は次の行を含むphp.iniファイルを見つけることでした。-extension = pgsql.so(UNIXの場合)およびextension = php_pgsql.dll(Windowsの場合)。

このステートメントはコメントされることになっており、解決策はコメントを外すことです。試しましたが、それでも状況は変わりません。リモートサーバーには、PostgreSQL v9.0.4より新しいバージョンがインストールされています。次に、ラップトップにPostgreSQL v8.4.8をインストールし、MAMPを使用してローカルでWebサイトを実行しました。最初、Apacheは何らかの奇妙な理由でクラッシュしましたが、その問題を修正しましたが、以前と同じエラー、つまり致命的なエラー:未定義関数pg_connect()への呼び出しで終わりました...

phpinfo()も実行しましたが、phpバージョンがPostgreSQLモジュールをサポートしていることを示しました。解決策を探して丸1日過ごしましたが、失敗しました。これはウェブサイトを開発する私の最初のプロジェクトであり、私は知恵がありません。どんな助けでも大歓迎です。

phpinfo()は、端末での膨大なリストを提供しますが、PostgreSQLに関連するリストは次のとおりです。

_pdo_pgsql

PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 9.0.4
Module version => 1.0.2
Revision =>  $Id: pdo_pgsql.c 306939 2011-01-01 02:19:59Z felipe $ 

pgsql

PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 9.0.4
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0

Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited
_

これまでに読んだすべての投稿で言及されていたので、編集を行うたびにMAMPを再起動しました。 Apacheとphpの両方がリセットされると思います。

「pqsql.so」(Windowsの「php_pqsql.dll」に相当するUNIX)は「extension」ディレクトリにあります。また、「pqsql.so」ファイルをApache/binディレクトリにコピーアンドペーストしましたが、変更はありませんでした。

私は主にコマンドラインでPHPを実行していません。上記の返信で言及したpgsqlに関連するphpinfo()の内容を知りたいと思いました。

私はまだあなたが言及したツールに取り組んでおり、結果が出たらすぐに対応します。

ありがとう、H

31
hrshd

Php-pgsqlパッケージ、またはプラットフォームに必要なものをインストールする必要があります。ところであなたが言ったとは思わない。

UbuntuおよびDebianの場合:

Sudo apt-get install php5-pgsql
45
Scott Marlowe

Ubuntuの簡単インストール:

ただ走れ:

Sudo apt-get install php5-pgsql

それから

Sudo service Apache2 restart //restart Apache

または

;を削除して、php.iniの次のコメントを解除します

;extension=php_pgsql.dll

その後、Apacheを再起動します

14
Angelin Nadar

致命的なエラー:未定義関数pg_connect()への呼び出し...

ArchlinuxにLamppまたはxamppをインストールしているときにこのエラーが発生しました。

ソリューションはphp.iniを編集し、/ opt/lampp/etc/php.iniにあります

次に、この行を見つけてコメント解除します

extension="pgsql.so"

次に、xamppとテストでサーバーApacheを再起動します...

8
davidleosam

編集。私はあなたがMAMPについて言及していることに気付いた。私のアドバイスはWindows向けですが、使用する対応するツールがわかっている場合に役立ちます。

試すべきこと

  • Php.iniを編集してからPHPとApacheを再起動しましたか?

  • Php_extディレクトリにphp_pgsql.dllが見つかりましたか?

  • Phpをモジュールとして実行していますか?その場合は、Apache\binディレクトリにあるphp_pgsql.dllファイルをコピーしてみてください。

  • 別のphp.iniファイルを指定するフラグを使用して、コマンドラインからPHPを実行していますか?

  • SysinternalsのFilemonなどのツールを使用して、PHPの実行時にアクセスしようとしているファイルを表示してみてください。

  • 依存関係が欠落している場合は、Dependency Walkerなどのツールを使用してpostgreSQL DLLの依存関係を調べてみてください。クイック検索が表示されました ldd Unixの場合。

6
JRL
  1. 'PHPIniDir "C:/ php"'をhttpd.confファイルに追加します。(PHP C:に保存されている場合、またはPHPが保存されます。)
  2. Php.iniファイルの「extension = php_pgsql.dll」に続くコメントを解除します
  3. Php.iniディレクトリの '; extension_dir = "ext"'のコメントを解除します
5
Chetan

Win7でも同じ症状がありました。私はこのスクリプトを手に入れました:

<?php
    phpinfo();
    pg_connect("blah");

Apache( http://localhost/phpinfo.php )経由でphpinfo.phpスクリプトを実行すると、エラーメッセージが表示されました:未定義関数pg_connect( )in ...

コマンドライン(php phpinfo.php)からsameスクリプトを実行すると、次のメッセージが表示されました:PHP警告:pg_connect(): PostgreSQLサーバーに接続できません:「blah」の後に「=」がありません

どちらの場合も、予想されるphp.iniが使用されました。

Loaded Configuration File   C:\Program Files (x86)\php\php.ini 

しかし、Apacheベースの実行の場合、pgsqlセクションはphpinfoから完全に欠落しており、コマンドラインベースの実行に存在していました。

解決策は、Apache httpd.confに次の行を追加することでした。

LoadFile "C:/Program Files (x86)/php/libpq.dll"

何らかの理由で、Apacheがphpスクリプトを実行するときにこのファイルは自動的にロードされないようですが、コマンドラインからphpスクリプトを実行するとロードされます。

役に立てば幸いです。

2
Csongor Halmai

Centos 6.10のphp 5.4では、これらの行をphp.iniに含めます

extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pgsql.so
extension=/opt/remi/php54/root/usr/lib64/php/modules/pdo_pgsql.so

できます。

1
Alf Newman

OSXでもこの問題がありました。解決策は、ファイルextension = pgsql.soがないため、php.ini.default.defaultのコメントを外し、php.iniサフィックスを削除することでした。

XAMPPを使用している場合、php.iniファイルは/ XAMPP/xampfiles/etcにあります

1
user9548

必要なパッケージをインストールします。 yumを使用する場合:

yum search pgsql

次に結果を見て、「php-pgsql」などの何かを見つけます。名前をコピーしてから:

yum install *paste the name of the package here*
0
Maya SC

コメント解除extension=php_pgsql.dll の中に php.ini構成ファイルは機能しますが、XAMPPサーバーを再起動して最終的に機能させる必要があります。私はこれをしなければなりませんでした。

0
Adim Victor

Gentooでは、/ etc/portage/make.confでUSEフラグpostgresを使用し、「emerge php」を再起動します

0
kemals

PHP 5.6でこの問題を抱えている人は、次のコマンドを使用できます。

yum install php56w-pgsql

PHP 5.6のその他のパッケージ名のリストについては、次のリンクを開いてパッケージまでスクロールダウンしてください。

CentOS/RHEL 7.0および6.6上のPHP 5.6、Yum 経由

0
SPRBRN

このエラーが発生し、PHPのextension_dirのロード方法に関連することになりました。

Phpinfo()の印刷時に、PDOヘッダーの下にPDOドライバーno value、この投稿で詳しく説明されているように、拡張ディレクトリを正常にロードしていることを確認することができます。

https://stackoverflow.com/a/14786808/2578505

0
quetzaluz

解決策は、ファイルがPHP設定を保持しているという事実に関係しています。つまり、php.iniは、 ";"を配置することにより、phpとpostgresの間の仲介者として機能する拡張機能のコメントを外しました。ステートメント「extension = pdo_pgsql」の前

クイックフィックス

  1. お気に入りのエディターでphp.iniファイルを開きます。 (原子 ????)
  2. 「Dynamic Extensions」セクションの下にある「extension = pdo_pgsql」行を検索します。 (単純なctrl + f)を使用すると、すばやくそこに移動できます。
  3. 「;」を削除します「; extension = pdo_pgsql」の行の前。
  4. サーバーを再起動します。
  5. ロックスターのようなエラーを修正してください。 ????
0
Geeky64

次の手順に従う必要があります。

次のディレクトリにあるphp設定ファイルを開きます

C: \ xampp \ php \ php.ini

そのファイル内で拡張セクションを検索し、次の行のコメントを解除します

extension = php_pdo_pgsql.dll  
extension = php_pgsql.dll

apacheを再起動します

0