diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09ba8668..e7564f68 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -47,6 +47,7 @@ This release added form fields (textinput, checkbox, and dropdown), drawing shap
- Autoloader: Add the ability to set the autoloader options - @bskrtich GH-267
- Element: Refactor elements to move set relation Id from container to element - @ivanlanin
- Introduced CreateTemporaryFileException, CopyFileException - @RomanSyroeshko
+- Settings: added method to set user defined temporary directory - @RomanSyroeshko GH-310
## 0.11.1 - 2 June 2014
diff --git a/phpword.ini.dist b/phpword.ini.dist
index 4a51ee11..f8eafb6a 100644
--- a/phpword.ini.dist
+++ b/phpword.ini.dist
@@ -7,6 +7,7 @@ compatibility = true
zipClass = ZipArchive
pdfRendererName = DomPDF
pdfRendererPath =
+; tempDir = "C:\PhpWordTemp"
[Font]
diff --git a/samples/index.php b/samples/index.php
index 5632664f..4281f6fb 100644
--- a/samples/index.php
+++ b/samples/index.php
@@ -3,7 +3,7 @@ include_once 'Sample_Header.php';
$requirements = array(
'php' => array('PHP 5.3.0', version_compare(phpversion(), '5.3.0', '>=')),
'xml' => array('PHP extension XML', extension_loaded('xml')),
- 'temp' => array('Temp folder "' . sys_get_temp_dir() . '" is writable', is_writable(sys_get_temp_dir())),
+ 'temp' => array('Temp folder "' . Settings::getTempDir() . '" is writable', is_writable(Settings::getTempDir())),
'zip' => array('PHP extension ZipArchive (optional)', extension_loaded('zip')),
'gd' => array('PHP extension GD (optional)', extension_loaded('gd')),
'xmlw' => array('PHP extension XMLWriter (optional)', extension_loaded('xmlwriter')),
diff --git a/src/PhpWord/Element/Image.php b/src/PhpWord/Element/Image.php
index e48f703e..4a812f6c 100644
--- a/src/PhpWord/Element/Image.php
+++ b/src/PhpWord/Element/Image.php
@@ -19,6 +19,7 @@ namespace PhpOffice\PhpWord\Element;
use PhpOffice\PhpWord\Exception\InvalidImageException;
use PhpOffice\PhpWord\Exception\UnsupportedImageTypeException;
+use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\Shared\ZipArchive;
use PhpOffice\PhpWord\Style\Image as ImageStyle;
@@ -313,8 +314,8 @@ class Image extends AbstractElement
if ($zip->open($zipFilename) !== false) {
if ($zip->locateName($imageFilename)) {
$isTemp = true;
- $zip->extractTo(sys_get_temp_dir(), $imageFilename);
- $actualSource = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $imageFilename;
+ $zip->extractTo(Settings::getTempDir(), $imageFilename);
+ $actualSource = Settings::getTempDir() . DIRECTORY_SEPARATOR . $imageFilename;
}
}
$zip->close();
@@ -428,7 +429,7 @@ class Image extends AbstractElement
$imageData = null;
$source = substr($source, 6);
list($zipFilename, $imageFilename) = explode('#', $source);
- $tempFilename = tempnam(sys_get_temp_dir(), 'PHPWordImage');
+ $tempFilename = tempnam(Settings::getTempDir(), 'PHPWordImage');
$zip = new ZipArchive();
if ($zip->open($zipFilename) !== false) {
diff --git a/src/PhpWord/Settings.php b/src/PhpWord/Settings.php
index 8481717b..009c849c 100644
--- a/src/PhpWord/Settings.php
+++ b/src/PhpWord/Settings.php
@@ -119,6 +119,13 @@ class Settings
*/
private static $defaultFontSize = self::DEFAULT_FONT_SIZE;
+ /**
+ * The user defined temporary directory.
+ *
+ * @var string
+ */
+ private static $tempDir = '';
+
/**
* Return the compatibility option used by the XMLWriter
*
@@ -269,6 +276,35 @@ class Settings
return true;
}
+ /**
+ * Sets the user defined path to temporary directory.
+ *
+ * @param string $tempDir The user defined path to temporary directory.
+ * @return void
+ * @since 0.12.0
+ */
+ public static function setTempDir($tempDir)
+ {
+ self::$tempDir = $tempDir;
+ }
+
+ /**
+ * Returns path to temporary directory.
+ *
+ * @return string
+ * @since 0.12.0
+ */
+ public static function getTempDir()
+ {
+ $tempDir = sys_get_temp_dir();
+
+ if (!empty(self::$tempDir)) {
+ $tempDir = self::$tempDir;
+ }
+
+ return $tempDir;
+ }
+
/**
* Get default font name
*
diff --git a/src/PhpWord/Shared/ZipArchive.php b/src/PhpWord/Shared/ZipArchive.php
index 7515c5b5..38781a80 100644
--- a/src/PhpWord/Shared/ZipArchive.php
+++ b/src/PhpWord/Shared/ZipArchive.php
@@ -83,7 +83,7 @@ class ZipArchive
$this->usePclzip = (Settings::getZipClass() != 'ZipArchive');
if ($this->usePclzip) {
if (!defined('PCLZIP_TEMPORARY_DIR')) {
- define('PCLZIP_TEMPORARY_DIR', sys_get_temp_dir() . '/');
+ define('PCLZIP_TEMPORARY_DIR', Settings::getTempDir() . '/');
}
require_once 'PCLZip/pclzip.lib.php';
}
@@ -139,7 +139,7 @@ class ZipArchive
$this->numFiles = $zip->numFiles;
} else {
$zip = new \PclZip($this->filename);
- $this->tempDir = sys_get_temp_dir();
+ $this->tempDir = Settings::getTempDir();
$this->numFiles = count($zip->listContent());
}
$this->zip = $zip;
diff --git a/src/PhpWord/Template.php b/src/PhpWord/Template.php
index 28055cea..c8f88026 100644
--- a/src/PhpWord/Template.php
+++ b/src/PhpWord/Template.php
@@ -67,7 +67,7 @@ class Template
*/
public function __construct($fileName)
{
- $this->tempFileName = tempnam(sys_get_temp_dir(), '');
+ $this->tempFileName = tempnam(Settings::getTempDir(), 'PhpWord');
if (false === $this->tempFileName) {
throw new CreateTemporaryFileException();
}
diff --git a/src/PhpWord/Writer/AbstractWriter.php b/src/PhpWord/Writer/AbstractWriter.php
index 52a2098f..c74819b5 100644
--- a/src/PhpWord/Writer/AbstractWriter.php
+++ b/src/PhpWord/Writer/AbstractWriter.php
@@ -20,6 +20,7 @@ namespace PhpOffice\PhpWord\Writer;
use PhpOffice\PhpWord\Exception\CopyFileException;
use PhpOffice\PhpWord\Exception\Exception;
use PhpOffice\PhpWord\PhpWord;
+use PhpOffice\PhpWord\Settings;
use PhpOffice\PhpWord\Shared\ZipArchive;
/**
@@ -214,12 +215,12 @@ abstract class AbstractWriter implements WriterInterface
protected function getTempFile($filename)
{
// Temporary directory
- $this->setTempDir(sys_get_temp_dir() . '/PHPWordWriter/');
+ $this->setTempDir(Settings::getTempDir() . '/PHPWordWriter/');
// Temporary file
$this->originalFilename = $filename;
if (strtolower($filename) == 'php://output' || strtolower($filename) == 'php://stdout') {
- $filename = @tempnam(sys_get_temp_dir(), 'phpword_');
+ $filename = tempnam(Settings::getTempDir(), 'phpword_');
// @codeCoverageIgnoreStart
// Can't find any test case. Uncomment when found.
if ($filename == '') {
diff --git a/tests/PhpWord/Tests/SettingsTest.php b/tests/PhpWord/Tests/SettingsTest.php
index 61364034..0d3d66ae 100644
--- a/tests/PhpWord/Tests/SettingsTest.php
+++ b/tests/PhpWord/Tests/SettingsTest.php
@@ -22,6 +22,7 @@ use PhpOffice\PhpWord\Settings;
/**
* Test class for PhpOffice\PhpWord\Settings
*
+ * @coversDefaultClass \PhpOffice\PhpWord\Settings
* @runTestsInSeparateProcesses
*/
class SettingsTest extends \PHPUnit_Framework_TestCase
@@ -70,6 +71,31 @@ class SettingsTest extends \PHPUnit_Framework_TestCase
$this->assertFalse(Settings::setMeasurementUnit('foo'));
}
+ /**
+ * @covers ::getTempDir
+ * @test
+ */
+ public function testPhpTempDirIsUsedByDefault()
+ {
+ $this->assertEquals(sys_get_temp_dir(), Settings::getTempDir());
+ }
+
+
+ /**
+ * @covers ::setTempDir
+ * @covers ::getTempDir
+ * @depends testPhpTempDirIsUsedByDefault
+ * @test
+ */
+ public function testTempDirCanBeSet()
+ {
+ $userDefinedTempDir = 'C:\PhpWordTemp';
+ Settings::setTempDir($userDefinedTempDir);
+ $currentTempDir = Settings::getTempDir();
+ $this->assertEquals($userDefinedTempDir, $currentTempDir);
+ $this->assertNotEquals(sys_get_temp_dir(), $currentTempDir);
+ }
+
/**
* Test set/get default font name
*/
diff --git a/tests/PhpWord/Tests/Writer/PDF/DomPDFTest.php b/tests/PhpWord/Tests/Writer/PDF/DomPDFTest.php
index a22cb530..476c9011 100644
--- a/tests/PhpWord/Tests/Writer/PDF/DomPDFTest.php
+++ b/tests/PhpWord/Tests/Writer/PDF/DomPDFTest.php
@@ -71,7 +71,7 @@ class DomPDFTest extends \PHPUnit_Framework_TestCase
$writer->setOrientation();
$this->assertEquals('default', $writer->getOrientation());
- $writer->setTempDir(sys_get_temp_dir());
- $this->assertEquals(sys_get_temp_dir(), $writer->getTempDir());
+ $writer->setTempDir(Settings::getTempDir());
+ $this->assertEquals(Settings::getTempDir(), $writer->getTempDir());
}
}
diff --git a/tests/PhpWord/Tests/_includes/TestHelperDOCX.php b/tests/PhpWord/Tests/_includes/TestHelperDOCX.php
index 7998cbdc..553a51be 100644
--- a/tests/PhpWord/Tests/_includes/TestHelperDOCX.php
+++ b/tests/PhpWord/Tests/_includes/TestHelperDOCX.php
@@ -19,6 +19,7 @@ namespace PhpOffice\PhpWord\Tests;
use PhpOffice\PhpWord\IOFactory;
use PhpOffice\PhpWord\PhpWord;
+use PhpOffice\PhpWord\Settings;
/**
* Test helper class
@@ -41,9 +42,9 @@ class TestHelperDOCX
*/
public static function getDocument(PhpWord $phpWord, $writerName = 'Word2007')
{
- self::$file = tempnam(sys_get_temp_dir(), 'PhpWord');
- if (!is_dir(sys_get_temp_dir() . '/PhpWord_Unit_Test/')) {
- mkdir(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
+ self::$file = tempnam(Settings::getTempDir(), 'PhpWord');
+ if (!is_dir(Settings::getTempDir() . '/PhpWord_Unit_Test/')) {
+ mkdir(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
$xmlWriter = IOFactory::createWriter($phpWord, $writerName);
@@ -52,11 +53,11 @@ class TestHelperDOCX
$zip = new \ZipArchive;
$res = $zip->open(self::$file);
if ($res === true) {
- $zip->extractTo(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
+ $zip->extractTo(Settings::getTempDir() . '/PhpWord_Unit_Test/');
$zip->close();
}
- return new XmlDocument(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
+ return new XmlDocument(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
/**
@@ -67,8 +68,8 @@ class TestHelperDOCX
if (file_exists(self::$file)) {
unlink(self::$file);
}
- if (is_dir(sys_get_temp_dir() . '/PhpWord_Unit_Test/')) {
- self::deleteDir(sys_get_temp_dir() . '/PhpWord_Unit_Test/');
+ if (is_dir(Settings::getTempDir() . '/PhpWord_Unit_Test/')) {
+ self::deleteDir(Settings::getTempDir() . '/PhpWord_Unit_Test/');
}
}