Re: php5 ve libpq4'te pg_version() sorunu

From: Devrim GUNDUZ <devrim(at)gunduz(dot)org>
To: Volkan YAZICI <volkan(dot)yazici(at)gmail(dot)com>
Cc: PostgreSQL Türkiye <pgsql-tr-genel(at)postgresql(dot)org>
Subject: Re: php5 ve libpq4'te pg_version() sorunu
Date: 2005-04-14 14:10:17
Message-ID: Pine.LNX.4.61.0504131821200.14191@emo.org.tr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--8323328-1876215017-1113405681=:14191
Content-Type: TEXT/PLAIN; CHARSET=iso-8859-9; FORMAT=flowed
Content-Transfer-Encoding: 8BIT
Content-ID: <Pine(dot)LNX(dot)4(dot)61(dot)0504141631141(dot)8408(at)emo(dot)org(dot)tr>

Merhaba,

Geç yanıt olmamıştır umarım; tatildeydim de :-)

[root(at)buildfarm ~]# php sil.php
Content-type: text/html
X-Powered-By: PHP/5.0.4

array(3) {
["client"]=>
string(5) "8.0.2"
["protocol"]=>
int(3)
["server"]=>
string(5) "8.0.2"
}

[root(at)buildfarm ~]# php --version
PHP 5.0.4 (cgi) (built: Apr 14 2005 17:07:45)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies

[root(at)buildfarm ~]# rpm -qv postgresql-devel
postgresql-devel-8.0.2-1PGDG

Senin eski liblerin sistemde kalmış olmasın?

On Tue, 12 Apr 2005, Volkan YAZICI wrote:

> Merhaba,
>
> Sistemimdeki PostgreSQL 8.0.1'i, 8.0.2'ye güncelledikten sonra, PHP
> 5.0.3'i de baştan derledim. Fakat PHP ile pg_version() çıktısı almaya
> çalıştığımda sunucu sürümü 8.0.2 gözükürken, istemci (libpq) sürümü
> 8.0.1 gözüküyor. İşin garip yanı ise /usr/bin/php, libpq4 kullanıyor
> gözüküyor:
>
> $ ldd /usr/bin/php | grep libpq
> libpq.so.4 => /usr/lib/libpq.so.4 (0xb7f9a000)
>
> #postgresql(at)irc(dot)freenode(dot)net kanalında da soruna bir çözüm bulunamadı,
> ama problemin PHP 5'ten kaynaklandığı düşünülüyor. Sanırım aynı sorun
> PHP 4'te yok.
>
> Konu hakkında fikri olan var mı acaba? Eğer herhangi bir fikriniz
> yoksa bile, şöyle bir 15 dakika süreniz varsa, PostgreSQL 8.0.2 ile
> PHP 5.0.3 sürümünü birlikte derleyip, pg_version() çıktısından beni
> haberdar ederseniz çok sevinirim. En azından sorunun benden mi, yoksa
> PHP'nin bu sürümünden mi kaynaklı olduğu anlaşılabilir.
>
> İyi çalışmalar.
>
> P.S. Bundan sonraki kısım biraz işin teknik detayına kaçıp izlediğim
> adımlardan bahsediyor:
>
> knt (~) [501:0]$ cd /usr/local/src/php-5.0.3/
> knt (...rc/php-5.0.3) [502:0]$ vim ext/pgsql/pgsql.c
> # pg_version() fonksiyonunun aslında bir php_pgsql_get_link_info()
> # fonksiyonu çağrısını olduğunu öğreniyorum.
> 936: PHP_FUNCTION(pg_version)
> 937: {
> 938: php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,
> PHP_PG_VERSION);
> 939: }
> #...
> 814: static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS,
> int entry_type)
> # ...
> 860: case PHP_PG_VERSION:
> 861: array_init(return_value);
> 862: add_assoc_string(return_value, "client", PG_VERSION, 1);
> 863: #if HAVE_PQPROTOCOLVERSION
> 864: add_assoc_long(return_value, "protocol",
> PQprotocolVersion(pgsql));
> 865: #if HAVE_PQPARAMETERSTATUS
> # ...
> # 862. satırdan PG_VERSION adlı değişkenin istemci sürümünü belirlemekte
> # kullanıldığını anlıyorum.
>
> # Bakıyorum PHP'nin kendi header'ları içinde dişe dokunur bir şey var mı?
> knt (...rc/php-5.0.3) [504:0]$ grep PG_VERSION -RH *
> ext/pgsql/pgsql.c: php_info_print_table_row(2, "PostgreSQL(libpq)
> Version", PG_VERSION);
> ext/pgsql/pgsql.c: if (atof(PG_VERSION) >= 7.2) {
> ext/pgsql/pgsql.c:#define PHP_PG_VERSION 7
> ext/pgsql/pgsql.c: case PHP_PG_VERSION:
> ext/pgsql/pgsql.c: add_assoc_string(return_value,
> "client", PG_VERSION, 1);
> ext/pgsql/pgsql.c:
> php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAM_PASSTHRU,PHP_PG_VERSION);
> # Buradan elim boş döndüm.
> # Devam ediyorum:
>
> knt (...rc/php-5.0.3) [506:0]$ cd /usr/include
> knt (/usr/include) [508:0]$ grep PG_VERSION -IRH *
> pg_config.h:#define PG_VERSION "8.0.2"
> pg_config.h:#define PG_VERSION_STR "PostgreSQL 8.0.2 on
> i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.5 (Debian
> 1:3.3.5-12)"
> postgresql/server/miscadmin.h:#define PG_VERSIONSTR "postgres
> (PostgreSQL) " PG_VERSION "\n"
> postgresql/server/pg_config.h:#define PG_VERSION "8.0.2"
> postgresql/server/pg_config.h:#define PG_VERSION_STR "PostgreSQL 8.0.2
> on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.3.5 (Debian
> 1:3.3.5-12)"
> postgresql/server/catalog/pg_version.h:#ifndef PG_VERSION_H
> postgresql/server/catalog/pg_version.h:#define PG_VERSION_H
> postgresql/server/catalog/pg_version.h:#endif /* PG_VERSION_H */
> postgresql/server/catalog/catversion.h: * stored in PG_VERSION. It
> shouldn't matter to end users, but during
> # Sonunda PG_VERSION'un nereden geldiğini buluyorum, ama buradaki
> # PG_VERSION değerinin ise 8.0.2 olduğunu görüyorum.
> # Peki PHP nereden buldu bu 8.0.1 değerini?
>
> # Belki yıldırım çarpmıştır:
> root (/tmp) [505:0]# cat sil.php
> <?php $conn = pg_connect("user=knt dbname=template1");
> var_dump(pg_version($conn)); ?>
> root (/tmp) [506:0]# php < sil.php
> array(3) {
> ["client"]=>
> string(5) "8.0.1"
> ["protocol"]=>
> int(3)
> ["server"]=>
> string(5) "8.0.2"
> }
> # Yok gene olmadı :(
>
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo(at)postgresql(dot)org so that your
> message can get through to the mailing list cleanly
>

--
Devrim GUNDUZ
devrim~gunduz.org, devrim~PostgreSQL.org, devrim.gunduz~linux.org.tr
http://www.tdmsoft.com http://www.gunduz.org
--8323328-1876215017-1113405681=:14191--

In response to

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Devrim GUNDUZ 2005-04-14 15:45:01 Re: Tasarım hakkında
Previous Message Devrim GUNDUZ 2005-04-14 13:37:03 Tasarım hakkında