/** * Generates closure tempnam handler * @param $dir * @param $prefix * @param $cb * @param $tries */ protected static function tempnamHandler($dir, $prefix, $cb, &$tries) { $cb = CallbackWrapper::forceWrap($cb); if (++$tries >= 3) { call_user_func($cb, false); return; } $path = FileSystem::genRndTempnam($dir, $prefix); FileSystem::open($path, 'x+!', function ($file) use($dir, $prefix, $cb, &$tries) { if (!$file) { static::tempnamHandler($dir, $prefix, $cb, $tries); return; } call_user_func($cb, $file); }); }