LAMP - 文件未出现在tmp目录下

时间:2014-07-02 10:41:51

标签: php directory tmp

我正在使用HTML表单上传图片。

当我获得图像的完整路径时,它会输出如下内容:

'/tmp/phpkIv1BY/10259944_770025219687938_1184503840380306483_n.jpg'

但是当我转到/tmp文件夹时,子文件夹phpkIv1BY甚至不存在!这里发生了什么?

2 个答案:

答案 0 :(得分:1)

此行为的原因

所有上传的文件都临时存储在

中定义的文件夹位置

(在php.ini中)

upload_tmp_dir =

(了解更多相关信息:http://php.net/upload-tmp-dir

这些临时存储的文件在执行完php脚本(如前一个答案请求生命周期中所述)完成后不再存在。

执行脚本时执行以下操作以查看上载的文件。

  

upload.html

<html>
<body>
    <form action="upload_file.php" method="post"
    enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="Submit">
    </form>
</body>
</html>
  

upload_file.php

<?php
if ($_FILES["file"]["error"] > 0) {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
} else {
        $fp=fopen("/tmp/write.log","w+");
        fputs($fp,"Original Name:".$_FILES["file"]["name"].";temporay Name:".$_FILES["file"]["tmp_name"]."\n");
        fclose($fp);
        sleep(50000);
}
?>

通过upload.html上传文件

在上传图片后,在/tmp/write.log中的另一个终端应用tail(因为睡眠时间太长,所以你无法找到图像)

#tail -f /tmp/write.log

将该临时文件复制到任何地方并放置原始图像文件的扩展名

例如我的打印日志行是

原名:digits.png;临时名称:/ tmp / phpOKlpoK

(需要使用root权限执行此操作)

#cp / tmp / phpOKlpoK /home/sandeep/Desktop/file.png

#chown sandeep.sandeep /home/sandeep/Desktop/file.png

所以这是你上传的文件。

( 而不是执行所有这些步骤来检查上传的图像,您可以使用move_uploaded_file() )

答案 1 :(得分:0)

如果PHP可能为临时上传的文件创建一个临时文件夹,我找不到任何地方。但可以肯定的是,上传的文件是临时的,一旦请求完成,它们就会被删除。因此,如果您认为可以在/tmp文件夹中找到一些上传的文件,请再想一想。

如果您希望某些上传文件的使用寿命超过请求生命周期,则需要使用move_uploaded_file()将其移动到安全的地方。