我是新来的PHP,我试图运行我的Windows开发机器上的其他人的代码。 我安装了PHP 5和Apache 2.2,但是当我尝试运行它时出现错误:
Fatal error: Call to undefined function sem_get()
它被抛出的线是:
private function UpdateCounter($semkey, $memkey, $count) { $sem_h = sem_get($semkey, 1);//this line is the problem ... }
sem_get()
函数由Semaphore,Shared Memory和IPC组件提供。
引用它的手册部分的介绍 :
此扩展在Windows平台上不可用。
我不知道这是否会像预期的那样工作,但是我在Windows上找到了sem_get的解决方法 :
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); } }
另外,我也需要Windows上的ftok :
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)); } } }