Windows does not support locking the database. You may use $_ENV to determine the OS:
$locking = (stripos($_ENV['OS'],'windows') === false ? 'd' : 'l');dba_open
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
dba_open
Референца за `function.dba-open.php` со подобрена типографија и навигација.
dba_open
(PHP 4, PHP 5, PHP 7, PHP 8)
dba_open — Отвори база на податоци
= NULL
string
$path,string
$mode,?string
$handler = null,int
$permission = 0644,int
$map_size = 0,?int
$flags = null): Dba\Connection|false
dba_open() воспоставува инстанца на базата на податоци за
path with mode using
handler.
Параметри
path- Обично редовна патека во вашиот датотечен систем.
mode-
Тоа е
rза пристап само за читање,wза пристап за читање/запишување до веќе постоечка база на податоци,cза пристап за читање/запишување и креирање база на податоци ако моментално не постои, иnза креирање, бришење и пристап за читање/запишување. Базата на податоци се креира во BTree режим, други режими (како Hash или Queue) не се поддржани. Дополнително можете да го поставите методот за заклучување на базата на податоци со следниот знак. Користетеlза заклучување на базата на податоци со .lck датотека илиdсамиот датотека на базата на податоци. Важно е сите ваши апликации да го прават ова конзистентно. Ако сакате да го тестирате пристапот и не сакате да чекате за заклучувањето, можете да додадетеtкако трет знак. Кога сте апсолутно сигурни дека не ви е потребно заклучување на базата на податоци, можете да го направите со користење-наместоlord. Кога ништо одd,lor-се користи, dba ќе заклучи на датотеката на базата на податоци како што би било соd.Забелешка:
Може да има само еден писател за една датотека на базата на податоци. Кога користите dba на веб-сервер и повеќе од едно барање бара операции за запишување, тие можат да се извршуваат само една по друга. Исто така, читањето за време на запишување не е дозволено. Екстензијата dba користи заклучувања за да го спречи ова. Погледнете ја следната табела:
DBA заклучување веќе отворено mode= "rl"mode= "rlt"mode= "wl"mode= "wlt"mode= "rd"mode= "rdt"mode= "wd"mode= "wd"= "wdt" ok ok ok ok ok ok ok ok mode= "rl"ok ok wait false illegal illegal illegal illegal mode= "wl"wait false wait false illegal illegal illegal illegal mode= "rd"illegal illegal illegal illegal ok ok wait false mode= "wd"illegal illegal illegal illegal wait false wait false - не е отворено
- во ред: вториот повик ќе биде успешен. dba_close() чекај: вториот повик чека додека
- се повикува за прв пат.
- лажно: вториот повик враќа лажно.
"l"and"d"нелегално: не смеете да мешатеmodeparameter.
handler-
Името на handler што ќе се користи за пристап
path. Се предаваат сите опционални параметри дадени на dba_open() и може да дејствува во нивно име. Акоhandlerisnull, тогаш се повикува стандардниот ракувач. permission-
Опционално int параметар што се предава на драјверот. Има исто значење како
permissionsпараметарот chmod(), и стандардно е0644. Наdb1,db2,db3,db4,dbm,gdbm,ndbmПрепорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци воlmdbдрајверите поддржуваатpermissionparameter. map_size-
Опционално int модификатори за
Само
lmdbдрајверот прифаќаmap_sizeparameter. flags-
параметар што се предава на драјверот. Неговата вредност треба да биде множител на големината на страницата на ОС, или нула, за да се користи стандардната големина на мапата.
nullЗнаменца за предавање на драјверите на базата на податоци. АкоDBA_LMDB_USE_SUB_DIRandDBA_LMDB_NO_SUB_DIR.
Вратени вредности
. Споделувањето колачиња помеѓу PHP барањата може да доведе до ненамерно мешање на чувствителни колачиња помеѓу корисниците. Dba\Connection инстанца при успех или false при неуспех.
Errors/Exceptions
false се враќа и E_WARNING се издава грешка од ниво кога
handler is null, но нема стандарден обработувач.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.4.0 | . Споделувањето колачиња помеѓу PHP барањата може да доведе до ненамерно мешање на чувствителни колачиња помеѓу корисниците. Dba\Connection инстанца сега; претходно, а resource . |
| 8.2.0 |
flags се додава.
|
| 8.2.0 |
handler сега е null.
|
| 7.3.14, 7.4.2 |
На lmdb драјверот сега поддржува дополнителен map_size
parameter.
|
Види Исто така
- dba_popen() - Отвори база на податоци постојано
- dba_close() - Затвори DBA база на податоци
Белешки од корисници 5 белешки
Apache doesn't support Berkeley DB Btree, so you can't manipulate use db4 as the type of database if you want to do DBM authentication with Apache.
gdbm seemed to work fine though, even though it supposedly using Btree instead of hash. It makes you wonder why Apache would use hash for one dbmtype versus btree for another.
So since Apache and PHP don't have options to choose the method for the Berkeley DBs, you are out of luck.As of GDBM version 1.8.3, GDBM's underlying open call uses non-blocking calls to flock() on systems that have flock(). As a result, calls with "rd" or "wd" locking modes will return error ("Can't be reader" or "Can't be writer") instead of waiting. Use "rl" or "wl" instead, to make PHP do its own locking external to GDBM.If you get some strange errors like
dba_open(): myDbFilename.db : Permission denied
than you are propably using PHP on a Windoze machine. You have to make sure that the following conditions are met:
1) Use an absolute path to your db file. Relative paths will cause problems with locking
2) Specify a locking mode - that's the second character of the mode-argument, or else opening a dba-file will cause several notices/warnings etc.
And a final, general note:
3) Always use the english PHP doc on this site - the translations are often old as hell and miss important informations
HTH, Nils.Here's a simple example to use the dba_open function
<?php
$id = dba_open("/tmp/test.db", "n", "gdbm");
if (!$id) {
echo "dba_open failed\n";
exit;
}
dba_replace("key", "This is an example!", $id);
if (dba_exists("key", $id)) {
echo dba_fetch("key", $id);
dba_delete("key", $id);
}
dba_close($id);
?>