- if ('\\' === DIRECTORY_SEPARATOR && null === self::$symlinkOnWindows) {
- $target = tempnam(sys_get_temp_dir(), 'sl');
- $link = sys_get_temp_dir().'/sl'.microtime(true).mt_rand();
- self::$symlinkOnWindows = @symlink($target, $link) && is_link($link);
- @unlink($link);
- unlink($target);
+ if ('\\' === \DIRECTORY_SEPARATOR) {
+ self::$linkOnWindows = true;
+ $originFile = tempnam(sys_get_temp_dir(), 'li');
+ $targetFile = tempnam(sys_get_temp_dir(), 'li');
+ if (true !== @link($originFile, $targetFile)) {
+ $report = error_get_last();
+ if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
+ self::$linkOnWindows = false;
+ }
+ } else {
+ @unlink($targetFile);
+ }
+
+ self::$symlinkOnWindows = true;
+ $originDir = tempnam(sys_get_temp_dir(), 'sl');
+ $targetDir = tempnam(sys_get_temp_dir(), 'sl');
+ if (true !== @symlink($originDir, $targetDir)) {
+ $report = error_get_last();
+ if (\is_array($report) && false !== strpos($report['message'], 'error code(1314)')) {
+ self::$symlinkOnWindows = false;
+ }
+ } else {
+ @unlink($targetDir);
+ }