MediaWiki  master
TempFSFileFactory.php
Go to the documentation of this file.
1 <?php
2 
4 
5 use TempFSFile;
6 use Wikimedia\AtEase\AtEase;
7 
13  private $tmpDirectory;
14 
19  public function __construct( $tmpDirectory = null ) {
20  $this->tmpDirectory = $tmpDirectory;
21  }
22 
31  public function newTempFSFile( $prefix, $extension = '' ) {
32  $ext = ( $extension != '' ) ? ".{$extension}" : '';
33  $tmpDirectory = $this->tmpDirectory;
34  if ( !is_string( $tmpDirectory ) ) {
35  $tmpDirectory = TempFSFile::getUsableTempDirectory();
36  }
37 
38  $attempts = 5;
39  while ( $attempts-- ) {
40  $hex = sprintf( '%06x%06x', mt_rand( 0, 0xffffff ), mt_rand( 0, 0xffffff ) );
41  $path = "$tmpDirectory/$prefix$hex$ext";
42  AtEase::suppressWarnings();
43  $newFileHandle = fopen( $path, 'x' );
44  AtEase::restoreWarnings();
45  if ( $newFileHandle ) {
46  fclose( $newFileHandle );
47  $tmpFile = new TempFSFile( $path );
48  $tmpFile->autocollect();
49  // Safely instantiated, end loop.
50  return $tmpFile;
51  }
52  }
53 
54  // Give up
55  return null; // @codeCoverageIgnore
56  }
57 }
newTempFSFile( $prefix, $extension='')
Make a new temporary file on the file system.
This class is used to hold the location and do limited manipulation of files stored temporarily (this...
Definition: TempFSFile.php:34
static getUsableTempDirectory()
Definition: TempFSFile.php:87
if(!is_readable( $file)) $ext
Definition: router.php:48