Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Adds File::replaceText().

Added File::replace()

Searches for a given text and replaces the text if found

Renamed File::replace() to File::replaceText()

Updated the replaceText() method to utilize File Locking

Updated File::replaceText()

1. Method now checks if the lock is not identical to null
2. Since the method uses File::read() to get the contents of the file,
there is no need for a temporary file. Removed the temporary file
creation

File::replaceText() update

Opening file with r+ mode
  • Loading branch information...
commit 98e11cea5dc7c72345d2541b652b9e5c6f5b70fc 1 parent 26d677f
rooseveltrp authored Phally committed
Showing with 49 additions and 0 deletions.
  1. +22 −0 lib/Cake/Test/Case/Utility/FileTest.php
  2. +27 −0 lib/Cake/Utility/File.php
View
22 lib/Cake/Test/Case/Utility/FileTest.php
@@ -562,4 +562,26 @@ protected function _getTmpFile($paintSkip = true) {
}
return false;
}
+
+/**
+ * testReplaceText method
+ *
+ * @return void
+ */
+ public function testReplaceText() {
+ $TestFile = new File(__FILE__);
+ $TmpFile = new File(TMP . 'tests' . DS . 'cakephp.file.test.tmp');
+ // Copy the test file to the temporary location
+ $TestFile->copy($TmpFile->path, true);
+
+ // Replace the contents of the tempory file
+ $result = $TmpFile->replaceText("* testReplaceText method", "* testReplaceText method passed");
+ $this->assertTrue($result);
+
+ // Double check
+ $contents = $TmpFile->read();
+ $this->assertContains("* testReplaceText method passed", $contents);
+
+ $TmpFile->delete();
+ }
}
View
27 lib/Cake/Utility/File.php
@@ -587,4 +587,31 @@ public function clearStatCache($all = false) {
return clearstatcache();
}
+/**
+ * Searches for a given text and replaces the text if found
+ * @param string $search
+ * @param string $replace
+ * @return boolean Success
+ */
+ public function replaceText($search, $replace) {
+ if (!$this->open("r+")) {
+ return false;
+ }
+
+ if ($this->lock !== null) {
+ if (flock($this->handle, LOCK_EX) === false) {
+ return false;
+ }
+ }
+
+ $replaced = $this->write(str_replace($search, $replace, $this->read()), "w", true);
+
+ if ($this->lock !== null) {
+ flock($this->handle, LOCK_UN);
+ }
+ $this->close();
+
+ return $replaced;
+ }
+
}
Please sign in to comment.
Something went wrong with that request. Please try again.