28

tmpfile を使用して一時ファイルを作成し、それに書き込み、不要になったら閉じることができることを知っています。しかし、私が抱えている問題は、次のようなファイルへの絶対パスが必要なことです:

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

他の関数やトリックを使用しても、どうにかしてパスを取得できますか?

編集:

データベースからファイルをダウンロードできるようにしたいのですが、

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

このようにすると、より多くの人が同じファイルをまったく同時にダウンロードしようとすると、重複する可能性があるためです。それとも私が間違っていますか?

EDIT2:

たぶん、そのような一意の(uniqID)ファイル名を生成して、それらを削除することができます。それとも、多くの人がダウンロードしている場合、これはサーバーにとって負担が大きすぎるのでしょうか?

4

5 に答える 5

42

これを達成する方法はたくさんありますが、ここにその1つがあります

<?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/MyFileNameX322.tmp のようなものが出力されます。

于 2012-08-23T18:15:13.593 に答える
3

これにより、ディレクトリが表示されます。その後は独り身だと思います。

于 2012-08-23T18:15:46.993 に答える
2

PHPの新しい(あまり新しい笑ではない)バージョン(php 5.2.1以上が必要)の場合、@whikの答えが適しています:

<?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/MyFileNameX322.tmp のようなものが出力されます。

古い答え

誰かがまったく同じ問題に遭遇した場合に備えて。私はやった

$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";
于 2012-08-24T18:13:53.643 に答える
1

一時ファイルを生成して削除し、同じ名前のフォルダーを作成しました

$tempFolder = tempnam(sys_get_temp_dir(), 'MyFileName');
unlink($tempFolder);
mkdir($tempFolder);
于 2016-06-08T15:22:06.163 に答える