ID: 24824
Updated by: [email]hellyphp.net[/email]
Reported By: php at johnlevine dot com
-Status: Open
+Status: Wont fix
Bug Type: DBM/DBA related
Operating System: BSD/OS 4.3.1
PHP Version: 4.3.2
Assigned To: helly
New Comment:

Because ndbm is a mess erm i mean sometimes a wrapper to this sometimes
to that! So there's no reliable easy solution. And Berkley DB locking
would involve an 'environment' which i don't want to create.

Feel free to find a solution your self. What ext/dba does is quite
simple. It either locks the database file itself or a log file
according to the flag given in dba_open(). And it does this reliable on
all supported platforms.


Previous Comments:
------------------------------------------------------------------------

[2003-08-05 19:56:39] php at johnlevine dot com

It turns out on my system the ndbm is really a wrapper around the more
recent Berkeley db that uses dbopen().

The problem seems to be that the ndbm library appends .db to file name,
so if you open "foo", it really opens "foo.db". There's a bunch of
code in php_dba_open that distrusts ndbm's locking and tries to open
the file and lock it, but that code doesn't know that the file is
really called foo.db and gets confused.

The locking code is a mess. If it's written down anywhere what it's
supposed to do, I can probably come up with a simple patch or rewrite
that will work anywhere. The obvious question is why it tries to do
its own lockf rather than use the one built into ndbm.

------------------------------------------------------------------------

[2003-07-27 14:05:52] php at johnlevine dot com

All the system libraries are the standard ones. We may have an arcane
difference between BSD/OS and other BSDs, assuming we know this works
on other BSDs. I could try it on FreeBSD 4.8.

tom:johnl:php-4.3.2$ php -r 'echo print_r(dba_handlers());'
Array
(
[0] => ndbm
[1] => cdb
[2] => cdb_make
[3] => flatfile
)

------------------------------------------------------------------------

[2003-07-27 12:33:35] [email]hellyphp.net[/email]

The result should be impossible with normal builds. Did you compile
your own libc or something like that?

Please execute: php -r 'echo print_r(dba_handlers());'

You could also provide me with your config.log per email but stick to
the list for the rest.

------------------------------------------------------------------------

[2003-07-27 11:41:18] php at johnlevine dot com

tom:johnl:php-4.3.2$ TEST_PHP_EXECUTABLE=/usr/local/bin/php php
run-tests.php ext/dba

================================================== ===================
CWD : /home/src/php-4.3.2
PHP : /usr/local/bin/php
PHP_SAPI : cli
PHP_VERSION : 4.3.2
ZEND_VERSION: 1.3.0
PHP_OS : BSD/OS
INI actual : /usr/local/lib/php.ini
More .INIs :
Extra dirs :
================================================== ===================
Running selected tests.
FAIL DBA File Creation Test [ext/dba/tests/dba001.phpt]
FAIL DBA Insert/Fetch Test [ext/dba/tests/dba002.phpt]
FAIL DBA Insert/Replace/Fetch Test [ext/dba/tests/dba003.phpt]
FAIL DBA Multiple Insert/Fetch Test [ext/dba/tests/dba004.phpt]
FAIL DBA FirstKey/NextKey Loop Test With 5 Items
[ext/dba/tests/dba005.phpt]
FAIL DBA FirstKey/NextKey with 2 deletes [ext/dba/tests/dba006.phpt]
FAIL DBA Multiple File Creation Test [ext/dba/tests/dba007.phpt]
FAIL DBA magic_quotes_runtime Test [ext/dba/tests/dba008.phpt]
FAIL DBA dba_popen Test [ext/dba/tests/dba009.phpt]
FAIL DBA CDB handler test [ext/dba/tests/dba_cdb.phpt]
FAIL DBA CDB_MAKE handler test [ext/dba/tests/dba_cdb_make.phpt]
PASS DBA CDB handler test (read only)
[ext/dba/tests/dba_cdb_read.phpt]
FAIL DBA DB2 handler test [ext/dba/tests/dba_db2.phpt]
FAIL DBA DB3 handler test [ext/dba/tests/dba_db3.phpt]
FAIL DBA DB4 handler test [ext/dba/tests/dba_db4.phpt]
FAIL DBA DBM handler test [ext/dba/tests/dba_dbm.phpt]
FAIL DBA FlatFile handler test [ext/dba/tests/dba_flatfile.phpt]
FAIL DBA GDBM handler test [ext/dba/tests/dba_gdbm.phpt]
FAIL DBA NDBM handler test [ext/dba/tests/dba_ndbm.phpt]
tom:johnl:php-4.3.2$ ldd /usr/local/bin/php
libm.so => /shlib/libm.so.0.0 (0x48171000)
libdl.so => /shlib/libdl.so (0x48182000)
libgcc.so.1 => /shlib/libgcc.so.1 (0x48185000)
libc.so.2 => /shlib/libc.so.2 (0x48191000)

------------------------------------------------------------------------

[2003-07-27 11:27:46] [email]hellyphp.net[/email]

Please provide the outputs of the following two commands using CLI or
CGI version of php:
1) php run-tests.php ext/dba
2) ldd php

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
[url]http://bugs.php.net/24824[/url]

--
Edit this bug report at [url]http://bugs.php.net/?id=24824&edit=1[/url]