Skip to content
This repository has been archived by the owner on Jan 29, 2020. It is now read-only.

Commit

Permalink
Merge pull request zendframework/zendframework#5880 from spiffyjr/fea…
Browse files Browse the repository at this point in the history
…ture/php-array-fix-dir

Updated PhpArray to expand paths using __DIR__
  • Loading branch information
weierophinney committed Feb 28, 2014
192 parents f93b47e + b3fb51a + c6bda54 + 6da2074 + 26ea7ff + 44bad20 + 47ff527 + 33b5707 + 0f253b5 + 644d22a + f3cba00 + e470732 + ae8cd95 + a4f21b6 + f36ff90 + 5344247 + 5cdfa08 + 4925e55 + fb107e5 + 98634df + 8d23ab7 + 19e17a6 + 98ac67f + 0a2d51c + 86db540 + efbb513 + 24c143c + 307427e + 4c7a822 + 25d3bd7 + 40bfe7f + 70ca2ff + 76fd684 + 82cff31 + 186a39c + 39a35fe + b0c8193 + 1a7e426 + 09ea754 + 8317963 + 950705c + bd78289 + 25f3e05 + 1c0577b + 6bcfccb + 0b2a1a9 + 7974490 + f3ba45e + 4357e80 + 7d43d02 + 421a0f4 + e7aa329 + 6d05bfe + f27c5e2 + 6cb3b21 + 1ecb5ed + b66b0e2 + 0b91e40 + 6bda391 + b932fa5 + a431b75 + 9ce83ec + a35dff6 + 60e4965 + 0f071e9 + 3fe17b4 + 196ca18 + 17cbc64 + 8f4a51f + 88ec12d + 31ab35e + 59c83c4 + d50da4c + 01af50b + 6a46af5 + 4308adc + 1c3d629 + 18a268d + 1987408 + abc72db + 175f7ab + 8a85704 + 7706019 + cc5d38c + fbaa5aa + 0555415 + 20ae04b + 0680687 + e65301c + 424e30a + d36a7f1 + 64bb794 + c74649b + b14bb6b + 4e73e4e + 0ee93d0 + e887bfd + f66ad20 + 66c5ff2 + f5b2841 + 717175b + 52c5e49 + 8f39d69 + 2003fce + 1ccb3fd + 315a9ac + 2b82c0f + 1565409 + fd7399e + cb27129 + 62ca6c9 + 7b73995 + 18f93e0 + 72fe59b + 9f5b116 + 28a04a3 + b56ee4d + 9287e61 + 1a420ec + 6a43cc1 + ad11b96 + cf95523 + 25ef603 + 894f762 + c00c005 + 69fb7fc + 57cb4a0 + e25b09c + 17a7c5c + c526cd4 + 518ca6f + 57fa76c + 853c28f + 520cebc + dc5f609 + ccf1c7e + 251b79e + 78fbb55 + fcc04e7 + 9bf2948 + 9561532 + b614ad3 + 954a3b1 + dacc257 + 07a262d + 59c02c3 + 7064caa + 6f75739 + 747b7ed + eb24d30 + 8ff8298 + 97c61d8 + da4af46 + 11c9caf + cc11df8 + cd54577 + 298afbb + 24c5cf6 + fa546ac + 5e4d7a6 + cddbfdf + 7e73be1 + ecda841 + dc32703 + 9bb6302 + fee2498 + f827502 + 4b8d9e1 + eff3fbb + 240c93a + 3778e71 + c7f821e + fcfa508 + a57a7d5 + 9082749 + fa6c937 + a4efcfe + fa5d8fc + a11f648 + 5886658 + f2482ca + aa8df8c + fba2506 + 007bd82 + f405d9e + 60ad0f1 + 814c94b + d97c259 + c2f7d37 + 4abae37 + 8b50f27 + 231aa06 commit ac99f6a
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 0 deletions.
49 changes: 49 additions & 0 deletions src/Writer/PhpArray.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

namespace Zend\Config\Writer;

use Zend\Config\Exception;

class PhpArray extends AbstractWriter
{
/**
Expand Down Expand Up @@ -51,6 +53,53 @@ public function setUseBracketArraySyntax($value)
return $this;
}

/**
* toFile(): defined by Writer interface.
*
* @see WriterInterface::toFile()
* @param string $filename
* @param mixed $config
* @param bool $exclusiveLock
* @return void
* @throws Exception\InvalidArgumentException
* @throws Exception\RuntimeException
*/
public function toFile($filename, $config, $exclusiveLock = true)
{
if (empty($filename)) {
throw new Exception\InvalidArgumentException('No file name specified');
}

$flags = 0;
if ($exclusiveLock) {
$flags |= LOCK_EX;
}

set_error_handler(
function ($error, $message = '', $file = '', $line = 0) use ($filename) {
throw new Exception\RuntimeException(sprintf(
'Error writing to "%s": %s',
$filename, $message
), $error);
}, E_WARNING
);

try {
// for Windows, paths are escaped.
$dirname = str_replace('\\', '\\\\', dirname($filename));

$string = $this->toString($config);
$string = str_replace("'" . $dirname, "__DIR__ . '", $string);

file_put_contents($filename, $string, $flags);
} catch (\Exception $e) {
restore_error_handler();
throw $e;
}

restore_error_handler();
}

/**
* Recursively processes a PHP config array structure into a readable format.
*
Expand Down
17 changes: 17 additions & 0 deletions test/Writer/PhpArrayTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,23 @@ public function testRenderWithQuotesInString()
$this->assertEquals($expected, $configString);
}

public function testWriteConvertsPathToDirWhenWritingBackToFile()
{
$filename = $this->getTestAssetFileName();
file_put_contents($filename, file_get_contents(__DIR__ . '/_files/array.php'));

$this->writer->toFile($filename, include $filename);

// Ensure file endings are same
$expected = trim(file_get_contents(__DIR__ . '/_files/array.php'));
$expected = preg_replace("~\r\n|\n|\r~", PHP_EOL, $expected);

$result = trim(file_get_contents($filename));
$result = preg_replace("~\r\n|\n|\r~", PHP_EOL, $result);

$this->assertSame($expected, $result);
}

public function testSetUseBracketArraySyntaxReturnsFluentInterface()
{
$this->assertSame($this->writer, $this->writer->setUseBracketArraySyntax(true));
Expand Down
4 changes: 4 additions & 0 deletions test/Writer/_files/array.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?php
return array(
'dir' => __DIR__ . '/foobar.php',
);

0 comments on commit ac99f6a

Please sign in to comment.