我正在使用HTML表单上传图片。
当我获得图像的完整路径时,它会输出如下内容:
'/tmp/phpkIv1BY/10259944_770025219687938_1184503840380306483_n.jpg'
但是当我转到/tmp
文件夹时,子文件夹phpkIv1BY
甚至不存在!这里发生了什么?
答案 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()
将其移动到安全的地方。