Как получить временный путь к файлу?

Я знаю, что вы можете создать временный файл с tmpfile, а не писать ему, и закрыть его, когда он больше не понадобится. Но проблема в том, что мне нужен абсолютный путь к файлу:

"/var/www/html/lolo/myfile.xml"

Можно ли каким-то образом получить путь, даже с помощью какой-либо другой функции или трюка?

EDIT:

Я хочу, чтобы загрузить файл из базы данных, но без

$fh = fopen("/var/www/html/myfile.xml", 'w') or die("no no");
fwrite($fh, $fileData);
fclose($fh); 

потому что если я сделаю это так, есть вероятность совпадения, если больше людей попытаются загрузить тот же файл в одно и то же время. Или я не прав?

EDIT2:

Возможно, я могу просто генерировать уникальные (uniqID) имена файлов, подобные этому, и удалять их. Или это может быть слишком много для сервера, если многие люди загружают?

Ответы

Ответ 1

На всякий случай кто-то сталкивается с той же проблемой. Я закончил делать

$fh = fopen($filepath, 'w') or die("Can't open file $name for writing temporary stuff.");
fwrite($fh, $fileData);
fclose($fh);

и

unlink($filepath); 

в конце, когда файл больше не нужен.

До этого я сгенерировал имя файла:

$r = rand();        
$filepath = "/var/www/html/someDirectory/$name.$r.xml";

Ответ 2

Есть много способов добиться этого, вот один

<?php 
// Create a temp file in the temporary 
// files directory using sys_get_temp_dir()
$temp_file = tempnam(sys_get_temp_dir(), 'MyFileName');
echo $temp_file;
?>

В приведенном выше примере будет выведено нечто похожее: /var/tmp/MyFileNameX 322.tmp

Ответ 3

Я знаю, что вы можете создать временный файл с tmpfile

Это хорошее начало, что-то вроде этого:

$fileHandleResource = tmpfile();

Можно ли каким-то образом получить путь, даже с помощью какой-либо другой функции или трюка?

Да:

$metaData = stream_get_meta_data($fileHandleResource);
$filepath = $metaData['uri'];

Этот подход имеет преимущество оставить его до PHP, чтобы выбрать хорошее место и имя для этого временного файла, который может оказаться хорошим или плохим в зависимости от ваших потребностей. Но это самый простой способ сделать это, если у вас еще нет конкретной причины выбрать свой собственный каталог и имя файла.

Литература:

http://us.php.net/manual/en/function.stream-get-meta-data.php

Получение имени файла (или удаление файла) с помощью дескриптора файла

Ответ 4

Это даст вам каталог . Думаю, после этого ты сам по себе.

Ответ 5

Я только что создал временный файл, удалил его и создал папку с тем же именем

$tempFolder = tempnam(sys_get_temp_dir(), 'MyFileName');
unlink($tempFolder);
mkdir($tempFolder);