Skip to content

Commit 57a2f45

Browse files
add support for creating a temporary file with a custom name
1 parent 7a3a507 commit 57a2f45

File tree

4 files changed

+48
-34
lines changed

4 files changed

+48
-34
lines changed

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,10 @@ $tempFile = TempFile::fromBinary($binaryData);
5050
Create a temporary file from a resource.
5151

5252
```php
53-
$binaryData = '...';
54-
$tempFile = TempFile::fromBinary($binaryData);
53+
$resource = fopen('php://memory', 'w+');
54+
fwrite($resource, 'test');
55+
fseek($resource, 0);
56+
$tempFile = TempFile::fromResource($resource);
5557
```
5658
---
5759
# FileInfo

src/TempFile.php

+11-2
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,18 @@ public static function fromResource($resource): FileInfo
7373
*
7474
* @return FileInfo The FileInfo object representing the temporary file
7575
*/
76-
private static function createTempFile(): FileInfo
76+
public static function createTempFile(?string $filename = null): FileInfo
7777
{
78-
$tmpFilePath = tempnam(sys_get_temp_dir(), 'tmp_');
78+
if ($filename === null) {
79+
$filename = tempnam(sys_get_temp_dir(), 'tmp_');
80+
} else {
81+
$filename = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename;
82+
if (!file_exists($filename)) {
83+
touch($filename);
84+
}
85+
}
86+
87+
$tmpFilePath = $filename;
7988
if ($tmpFilePath === false) {
8089
throw new RuntimeException('Unable to create temporary file.');
8190
}

tests/FileExplorerTest.php

+19-30
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,25 @@ public function testListAll()
1616
$this->assertIsArray($files);
1717
$this->assertCount(3, $files);
1818

19-
$file1 = $files[0];
20-
$this->assertIsArray($file1);
21-
$this->assertArrayHasKey('path', $file1);
22-
$this->assertArrayHasKey('name', $file1);
23-
$this->assertArrayHasKey('is_directory', $file1);
24-
$this->assertArrayHasKey('size', $file1);
25-
$this->assertArrayHasKey('modified_time', $file1);
26-
$this->assertFalse($file1['is_directory']);
27-
28-
$file2 = $files[1];
29-
$this->assertIsArray($file2);
30-
$this->assertArrayHasKey('path', $file2);
31-
$this->assertArrayHasKey('name', $file2);
32-
$this->assertArrayHasKey('is_directory', $file2);
33-
$this->assertArrayHasKey('size', $file2);
34-
$this->assertArrayHasKey('modified_time', $file2);
35-
$this->assertFalse($file2['is_directory']);
36-
37-
$file3 = $files[2];
38-
$this->assertIsArray($file3);
39-
$this->assertArrayHasKey('path', $file3);
40-
$this->assertArrayHasKey('name', $file3);
41-
$this->assertArrayHasKey('is_directory', $file3);
42-
$this->assertArrayHasKey('size', $file3);
43-
$this->assertArrayHasKey('modified_time', $file3);
44-
$this->assertArrayHasKey('files', $file3);
45-
$this->assertTrue($file3['is_directory']);
46-
47-
$this->assertIsArray($file3['files']);
48-
$this->assertCount(2, $file3['files']);
19+
$foldersCount = 0;
20+
$filesCount = 0;
21+
foreach ($files as $file) {
22+
if ($file['is_directory']) {
23+
$foldersCount++;
24+
$this->assertIsArray($file['files']);
25+
$this->assertCount(2, $file['files']);
26+
}else{
27+
$filesCount++;
28+
}
29+
$this->assertArrayHasKey('path', $file);
30+
$this->assertArrayHasKey('name', $file);
31+
$this->assertArrayHasKey('is_directory', $file);
32+
$this->assertArrayHasKey('size', $file);
33+
$this->assertArrayHasKey('modified_time', $file);
34+
}
35+
36+
$this->assertEquals(1, $foldersCount);
37+
$this->assertEquals(2, $filesCount);
4938

5039
}
5140

tests/TempFileTest.php

+14
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,18 @@ public function testFromResourceReturnsFileInfoObject()
4141

4242
}
4343

44+
public function testCreateTempFile()
45+
{
46+
47+
$fileInfo = TempFile::createTempFile();
48+
$this->assertInstanceOf(FileInfo::class, $fileInfo);
49+
$this->assertNotEmpty( $fileInfo->getFilename());
50+
$this->assertStringStartsWith('/tmp/', $fileInfo->getRealPath());
51+
52+
$fileInfo = TempFile::createTempFile('test.pdf');
53+
$this->assertInstanceOf(FileInfo::class, $fileInfo);
54+
$this->assertNotEmpty( $fileInfo->getFilename());
55+
$this->assertEquals('/tmp/test.pdf', $fileInfo->getRealPath());
56+
}
57+
4458
}

0 commit comments

Comments
 (0)