Skip to content

Commit 29ea25c

Browse files
ENGCOM-8127: \Magento\Framework\Filesystem\Io\File::read() should be able to accept resource in second argument #27869
- Merge Pull Request #27869 from bnymn/magento2:2.4-develop-issue-27866 - Merged commits: 1. cbc6637 2. d177789 3. 4024320 4. c160b44 5. ed111ae 6. a00f2d0 7. b480c4d 8. 2b2acee 9. b5bce0b
2 parents 5977749 + b5bce0b commit 29ea25c

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

lib/internal/Magento/Framework/Filesystem/Io/File.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,11 +440,16 @@ public function cd($dir)
440440
*/
441441
public function read($filename, $dest = null)
442442
{
443+
$result = false;
444+
443445
$this->_cwd();
444-
if ($dest !== null) {
445-
$result = @copy($filename, $dest);
446-
} else {
446+
if ($dest === null) {
447447
$result = @file_get_contents($filename);
448+
} elseif (is_resource($dest)) {
449+
$result = @file_get_contents($filename);
450+
fwrite($dest, $result);
451+
} elseif (is_string($dest)) {
452+
$result = @copy($filename, $dest);
448453
}
449454
$this->_iwd();
450455

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Filesystem\Test\Unit\Io;
7+
8+
use Magento\Framework\Exception\LocalizedException;
9+
use Magento\Framework\Filesystem\Io\File;
10+
use PHPUnit\Framework\TestCase;
11+
12+
class FileTest extends TestCase
13+
{
14+
private function getTmpDir()
15+
{
16+
$tmpDir = '/tmp/magento-' . \microtime(true);
17+
if (!\file_exists($tmpDir)) {
18+
\mkdir($tmpDir, 0777, true);
19+
}
20+
return $tmpDir;
21+
}
22+
23+
/**
24+
* To cover the issue on GitHub: #27866
25+
* @throws LocalizedException
26+
*/
27+
public function testReadShouldCopyTheSourceFileToTheGivenFileResource()
28+
{
29+
$content = \random_int(0, 1000);
30+
$sourceFileName = "source-file.txt";
31+
$tmpDir = $this->getTmpDir();
32+
\file_put_contents("{$tmpDir}/{$sourceFileName}", $content);
33+
34+
$file = new File();
35+
$targetFileName = "target-file.txt";
36+
$targetFileHandle = \fopen("{$tmpDir}/{$targetFileName}", 'w');
37+
$file->cd($tmpDir);
38+
$file->read($sourceFileName, $targetFileHandle);
39+
40+
$targetContent = file_get_contents("{$tmpDir}/{$targetFileName}");
41+
$this->assertEquals($content, $targetContent);
42+
}
43+
}

0 commit comments

Comments
 (0)