Permalink
Browse files

BUGFIX #4661 Fix SS temporary directory bug with Windows environments…

… - the directory would always be "silverstripe-cache" instead of a namespaced one so that multiple SS sites don't conflict with eachother (from r94134)

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@95588 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
1 parent 0cc0d3c commit b39b85fe5841d97961e735a8e218e1778b394e76 @halkyon halkyon committed Dec 16, 2009
Showing with 74 additions and 11 deletions.
  1. +16 −11 core/Core.php
  2. +58 −0 tests/CoreTest.php
View
27 core/Core.php
@@ -179,13 +179,26 @@
///////////////////////////////////////////////////////////////////////////////
// HELPER FUNCTIONS
+function getSysTempDir() {
+ if(function_exists('sys_get_temp_dir')) {
+ $sysTmp = sys_get_temp_dir();
+ } elseif(isset($_ENV['TMP'])) {
+ $sysTmp = $_ENV['TMP'];
+ } else {
+ $tmpFile = tempnam('adfadsfdas','');
+ unlink($tmpFile);
+ $sysTmp = dirname($tmpFile);
+ }
+ return $sysTmp;
+}
+
/**
* Returns the temporary folder that sapphire/silverstripe should use for its cache files
* This is loaded into the TEMP_FOLDER define on start up
*/
function getTempFolder() {
- if(preg_match('/^(.*)\/sapphire\/[^\/]+$/', $_SERVER['SCRIPT_FILENAME'], $matches)) {
- $cachefolder = "silverstripe-cache" . str_replace(array(' ',"/",":", "\\"),"-", $matches[1]);
+ if(preg_match('/^(.*)[\/\\\\]sapphire[\/\\\\][^\/\\\\]+$/', $_SERVER['SCRIPT_FILENAME'], $matches)) {
+ $cachefolder = "silverstripe-cache" . str_replace(array(' ', "/", ":", "\\"), "-", $matches[1]);
} else {
$cachefolder = "silverstripe-cache";
}
@@ -195,15 +208,7 @@ function getTempFolder() {
return $ssTmp;
}
- if(function_exists('sys_get_temp_dir')) {
- $sysTmp = sys_get_temp_dir();
- } elseif(isset($_ENV['TMP'])) {
- $sysTmp = $_ENV['TMP'];
- } else {
- $tmpFile = tempnam('adfadsfdas','');
- unlink($tmpFile);
- $sysTmp = dirname($tmpFile);
- }
+ $sysTmp = getSysTempDir();
$worked = true;
$ssTmp = "$sysTmp/$cachefolder";
View
58 tests/CoreTest.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * Tests for the core of sapphire, such as how the temporary
+ * directory is determined throughout the framework.
+ *
+ * @package sapphire
+ * @subpackage tests
+ */
+class CoreTest extends SapphireTest {
+
+ protected $tempPath, $renamedTempPath;
+
+ public function setUp() {
+ parent::setUp();
+ $this->tempPath = $tempPath = Director::baseFolder() . '/silverstripe-cache';
+ $this->renamedTempPath = $renamedTempPath = Director::baseFolder() . '/silverstripe-cache-1';
+
+ // If the test failed (PHP error) this will need to be renamed
+ if(file_exists($renamedTempPath)) {
+ rename($renamedTempPath, $tempPath);
+ }
+ if(!file_exists($tempPath)) {
+ mkdir($tempPath);
+ }
+ }
+
+ public function testGetTempPathInProject() {
+ $this->assertEquals(getTempFolder(), $this->tempPath);
+ rename($this->tempPath, $this->tempPath . '-1');
+
+ // Store the original variable so we know what to change it back to
+ $old = $_SERVER['SCRIPT_FILENAME'];
+
+ // A typical Windows location for where sites are stored on IIS
+ $_SERVER['SCRIPT_FILENAME'] = 'C:\inetpub\wwwroot\silverstripe\sapphire\main.php';
+ $this->assertEquals(getTempFolder(), getSysTempDir() . '/silverstripe-cacheC--inetpub-wwwroot-silverstripe');
+
+ // A typical Mac OS X location for where sites are stored
+ $_SERVER['SCRIPT_FILENAME'] = '/Users/joebloggs/Sites/silverstripe/sapphire/main.php';
+ $this->assertEquals(getTempFolder(), getSysTempDir() . '/silverstripe-cache-Users-joebloggs-Sites-silverstripe');
+
+ // A typical Linux location for where sites are stored
+ $_SERVER['SCRIPT_FILENAME'] = '/var/www/silverstripe/sapphire/main.php';
+ $this->assertEquals(getTempFolder(), getSysTempDir() . '/silverstripe-cache-var-www-silverstripe');
+
+ // Restore the SCRIPT_FILENAME variable back to the original
+ $_SERVER['SCRIPT_FILENAME'] = $old;
+ }
+
+ public function tearDown() {
+ parent::tearDown();
+ if(file_exists($this->renamedTempPath)) {
+ rename($this->renamedTempPath, Director::baseFolder() . '/silverstripe-cache');
+ }
+ }
+
+}

0 comments on commit b39b85f

Please sign in to comment.