PHP flock () - kaputun altında ne var?

4 Cevap php

Bir yarım saat için PHP kaynak ile güreş sonra vazgeçtim. : P soru - hangi sistem çağrısı PHP flock () işlev çağrısı çıban Gentoo Linux sistemi üzerinde aşağı yapar? Ben (sorunların block-for-30-seconds-in-every-one-of-20-loop-iterations tür gibi) ile bazı sorunlar yaşıyorum ve ben o kadar neden bilmek istiyorum.

4 Cevap

// example: $stream = fopen(FILE, 'rb') or die('???');
$md = stream_get_meta_data($stream);
echo $md['wrapper_type'];
flock($stream);
if this prints plainfile then the call to the php function flock() is handled by php_stdiop_set_option(...) which calls flock(). Depending on whether PHP was compiled with HAVE_FLOCK or not this may be the system call flock() or a function defined in flock_compat.c which utilizes fcntl(). On my gentoo system PHP was compiled with HAVE_FLOCK.

Ana / akarsu / plain_wrapper.c @ static int php_stdiop_set_option (...):

   	case PHP_STREAM_OPTION_LOCKING:
    		if (fd == -1) {
    			return -1;
    		}

    		if ((zend_uintptr_t) ptrparam == PHP_STREAM_LOCK_SUPPORTED) {
    			return 0;
    		}

    		if (!flock(fd, value)) {
    			data->lock_flag = value;
    			return 0;
    		} else {
    			return -1;
    		}
    		break;

http://www.opengroup.org/onlinepubs/009695399/functions/fcntl.html

/etc/standard/flock_compat.c [line 66]    
ret = fcntl(fd, operation & LOCK_NB ? F_SETLK : F_SETLKW, &flck);

Ben size soruyoruz yanlış anlama ediyorum sürece, PHP'nin flock() Unix sistem işlevi flock() Gentoo. Bunlar aynı anlama sahiptirler.

Eğer bir ağa ya da bağlı bir sürücüye kullanıyor musunuz? Ne yaşıyorsanız deadlock ise ben şaşırmam, ve bazı comments in the documentation bu konuda konuşmak.

The documentation for flock.