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
Php-pgsqlパッケージ、またはプラットフォームに必要なものをインストールする必要があります。ところであなたが言ったとは思わない。
UbuntuおよびDebianの場合:
Sudo apt-get install php5-pgsql
Ubuntuの簡単インストール:
ただ走れ:
Sudo apt-get install php5-pgsql
それから
Sudo service Apache2 restart //restart Apache
または
;
を削除して、php.iniの次のコメントを解除します
;extension=php_pgsql.dll
その後、Apacheを再起動します
致命的なエラー:未定義関数pg_connect()への呼び出し...
ArchlinuxにLamppまたはxamppをインストールしているときにこのエラーが発生しました。
ソリューションはphp.iniを編集し、/ opt/lampp/etc/php.iniにあります
次に、この行を見つけてコメント解除します
extension="pgsql.so"
次に、xamppとテストでサーバーApacheを再起動します...
編集。私はあなたが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の場合。
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スクリプトを実行するとロードされます。
役に立てば幸いです。
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
できます。
OSXでもこの問題がありました。解決策は、ファイルextension = pgsql.so
がないため、php.ini.default
の.default
のコメントを外し、php.ini
サフィックスを削除することでした。
XAMPPを使用している場合、php.iniファイルは/ XAMPP/xampfiles/etcにあります
必要なパッケージをインストールします。 yumを使用する場合:
yum search pgsql
次に結果を見て、「php-pgsql」などの何かを見つけます。名前をコピーしてから:
yum install *paste the name of the package here*
コメント解除extension=php_pgsql.dll
の中に php.ini
構成ファイルは機能しますが、XAMPPサーバーを再起動して最終的に機能させる必要があります。私はこれをしなければなりませんでした。
Gentooでは、/ etc/portage/make.confでUSEフラグpostgresを使用し、「emerge php」を再起動します
PHP 5.6でこの問題を抱えている人は、次のコマンドを使用できます。
yum install php56w-pgsql
PHP 5.6のその他のパッケージ名のリストについては、次のリンクを開いてパッケージまでスクロールダウンしてください。
このエラーが発生し、PHPのextension_dirのロード方法に関連することになりました。
Phpinfo()の印刷時に、PDOヘッダーの下にPDOドライバーがno value、この投稿で詳しく説明されているように、拡張ディレクトリを正常にロードしていることを確認することができます。
解決策は、ファイルがPHP設定を保持しているという事実に関係しています。つまり、php.iniは、 ";"を配置することにより、phpとpostgresの間の仲介者として機能する拡張機能のコメントを外しました。ステートメント「extension = pdo_pgsql」の前
クイックフィックス
次の手順に従う必要があります。
次のディレクトリにあるphp設定ファイルを開きます
C: \ xampp \ php \ php.ini
そのファイル内で拡張セクションを検索し、次の行のコメントを解除します
extension = php_pdo_pgsql.dll
extension = php_pgsql.dll
apacheを再起動します