resourcesPath) . '/' . strtolower($resourceType) . '/' . $resourceName; return (file_exists($resourcePath) ? $resourcePath : null); } /** * @param string $resourceName * @return string Path of the generated resource for the given name */ protected function getGeneratedResourcePath($resourceName) { $resourceType = pathinfo($resourceName, PATHINFO_EXTENSION); $generatedResourcePath = realpath($this->generatedResourcesPath) . '/' . strtolower($resourceType) . '/' . $resourceName; return $generatedResourcePath; } /** * @param string $resourceName * @return void */ protected function createGeneratedFolderIfNeeded($resourceName) { $resourceType = pathinfo($resourceName, PATHINFO_EXTENSION); $generatedResourcePathForType = $this->generatedResourcesPath . '/' . strtolower($resourceType); if (!file_exists($generatedResourcePathForType)) { mkdir($generatedResourcePathForType, 0777, true); } } /** * @param string $resourceName * @return string Path of the generated unwritable (because parent folder is read only) resource for the given name */ protected function getGeneratedUnwritableResourcePath($resourceName) { return realpath($this->generatedUnwritableResourcesPath) . '/' . $resourceName; } /** * @return void */ protected function createUnwritableFolderIfNeeded() { // On Windows, chmod() or the mkdir's mode is ignored if ($this->isWindows()) { $this->markTestSkipped('Skipping because Windows cannot create read-only folders through PHP'); } if (!file_exists($this->generatedUnwritableResourcesPath)) { // Make sure generated folder exists first if (!file_exists($this->generatedResourcesPath)) { mkdir($this->generatedResourcesPath, 0777, true); } // 0444 = read only mkdir($this->generatedUnwritableResourcesPath, 0444, true); } } /** * @return string Path of the temp folder */ protected function getTempFolderPath() { return realpath($this->tempFolderPath); } /** * @return void */ protected function recreateTempFolder() { if (file_exists($this->tempFolderPath)) { $this->deleteFolderRecursively($this->tempFolderPath); } mkdir($this->tempFolderPath, 0777, true); } /** * @param string $folderPath * @return void */ private function deleteFolderRecursively($folderPath) { $itemIterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($folderPath, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::CHILD_FIRST ); foreach ($itemIterator as $item) { if ($item->isDir()) { rmdir($item->getPathname()); } else { unlink($item->getPathname()); } } rmdir($folderPath); } /** * @return bool Whether the OS on which PHP is installed is Windows */ protected function isWindows() { return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; } }