2011-03-09 38 views
6

Ben PHP yeniyim ve benim Windows geliştirme makinede başkası var kodu yönetmeye çalışıyorum çağır. PHP 5 ve Apache 2.2 yüklü, ama bunu çalıştırmayı denediğinizde hata iletisi:Ölümcül hata: tanımlanmamış işlev sem_get()

Fatal error: Call to undefined function sem_get() 

o atılan ediliyor çizgidir:

private function UpdateCounter($semkey, $memkey, $count) 
{ 
    $sem_h = sem_get($semkey, 1);//this line is the problem 
    ... 
} 

cevap

9

sem_get() fonksiyon Semaphore, Shared Memory and IPC tarafından sağlanmaktadır bileşen.

aktaran bunun introduction manuel bölüm var:

This extension is not available on Windows platforms.

+0

Teşekkürler. Bunun için bir çözüm var mı? Linux ;-) – Adam

+0

, ben orada olduğunu sanmıyorum. Benim geliştirme ortamı (Windows) Bu göz ardı edebilirsiniz böylece burada function_exists sağlamak için –

+0

kodu kaldırmak kullanarak hariç - manuel Windows üzerinde müsait değil devletler –

6

o beklendiği gibi çalışacaktır eğer bilmiyorum, ama workaround for sem_get on Windows bulundu: Ayrıca

if (!function_exists('sem_get')) { 
    function sem_get($key) { 
     return fopen(__FILE__ . '.sem.' . $key, 'w+'); 
    } 
    function sem_acquire($sem_id) { 
     return flock($sem_id, LOCK_EX); 
    } 
    function sem_release($sem_id) { 
     return flock($sem_id, LOCK_UN); 
    } 
} 

Ben çok ftok on Windows gerekli:

if(!function_exists('ftok')) 
{ 
    function ftok($filename = "", $proj = "") 
    { 
     if(empty($filename) || !file_exists($filename)) 
     { 
      return -1; 
     } 
     else 
     { 
      $filename = $filename . (string) $proj; 
      for($key = array(); sizeof($key) < strlen($filename); $key[] = ord(substr($filename, sizeof($key), 1))); 
      return dechex(array_sum($key)); 
     } 
    } 
} 
+3

1. Örnekte – Christian

+0

'flok kilidi kilitlenene kadar bloke edilir. 'LOCK_NB' bayrağı eklemek, dosyayı hemen kilitleyemezse yürütmeyi engellememek için iyi bir fikirdir. –

İlgili konular