Cum pot crea un fișier temporar cu o anumită extensie în php.Am dat peste tempnam()
dar folosindu-l extensia nu poate fi specificată.
Acest lucru ar putea simula mkstemp()
(vezi http://linux.die.net/man/3/mkstemp) un pic, realizând ceea ce doriți să faceți:
function mkstemp( $template ) {
$attempts = 238328; // 62 x 62 x 62
$letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$length = strlen($letters) - 1;
if( mb_strlen($template) < 6 || !strstr($template, 'XXXXXX') )
return FALSE;
for( $count = 0; $count < $attempts; ++$count) {
$random = "";
for($p = 0; $p < 6; $p++) {
$random .= $letters[mt_rand(0, $length)];
}
$randomFile = str_replace("XXXXXX", $random, $template);
if( !($fd = @fopen($randomFile, "x+")) )
continue;
return $fd;
}
return FALSE;
}
Deci, ați putea face:
if( ($f = mkstemp("test-XXXXXX.txt")) ) {
fwrite($f, "test
");
fclose($f);
}
Cea mai ușoară metodă pe care am găsit-o este să creați un fișier temporar și apoi doar să-l redenumiți. De exemplu:
$tmpfname = tempnam(sys_get_temp_dir(), "Pre_");
rename($tmpfname, $tmpfname .= '.pdf');
- De asemenea, redenumirea returnează true în caz de succes și false în caz de eșec, așa că probabil că și asta este destul de util. – > .
modul meu de lucru este să folosesc tempnam
$file = tempnam(sys_get_temp_dir(), 'prefix');
file_put_contents($file.'.extension', $data);
{
//use your file
}
unlink($file);//to delete an empty file that tempnam creates
unlink($file.'.extension');//to delete your file
- De asemenea, ar fi foarte util să
unlink ($file)
să nu se creeze gunoaie aleatorii în/tmp
– > . - Nu cred că acest lucru este sigur.
tempnam()
se asigură că$file
nu există.$file . '.extension'
poate la fel de bine să existe. – > . - Atâta timp cât folosiți un prefix suficient de unic și sunteți consecvent cu utilizarea acestuia, ar trebui să fie sigur;
unique-prefix-[tempnam-output].extension
este creat numai după ceunique-prefix-[tempnam-output]
este creat, iar fișierul respectiv a fost garantat unic. Veți avea probleme doar dacă încercați să ștergeți fișierul tempnam înainte de a termina cu fișierul extins. – > .
15
public static function makeTempFileInFolder($prefix, $suffix, $folder="")
{
if (strlen($folder)==0) $folder = sys_get_temp_dir();
do {
$file = $folder."/".$prefix.rand(1,99999).time().$suffix;
} while (file_exists($file));
return $file;
}
Poate folosind
move_uploaded_file($tmp_name, "$uploads_dir/$name.myextension");
A se vedea http://php.net/manual/en/function.move-uploaded-file.php#example-2209
Același lucru ca și tempnam()
cu excepția parametrului suplimentar:
function tempnamp($dir, $prefix, $postfix) {
$maxAttempts = 1000;
// Trim trailing slashes from $dir.
$dir = rtrim($dir, DIRECTORY_SEPARATOR);
// If we don't have permission to create a directory, fail, otherwise we will
// be stuck in an endless loop.
if (!is_dir($dir) || !is_writable($dir)) return false;
// Make sure characters in prefix and postfix are safe.
if (strpbrk($prefix, '\/:*?"<>|') !== false) return false;
if (strpbrk($postfix, '\/:*?"<>|') !== false) return false;
// Attempt to create a random file until it works.
$attempts = 0;
do
{
$path = $dir.DIRECTORY_SEPARATOR.$prefix.mt_rand(100000, mt_getrandmax()).$postfix;
$fp = @fopen($path, 'x+');
} while (!$fp && $attempts++ < $maxAttempts);
if ($fp) fclose($fp);
return $path;
}
Acel „p” de la sfârșitul numelui reprezintă „postfix”.
tempname()
, va trebui să creați o funcție personalizată pentru acest lucru, aruncați o privire laUser Contributed Notes
la theserverpages.com/php/manual/en/function.tempnam.php – > Por Cyclonecode.