我有一个非常基本的上传脚本,可能直接从php.net/move_upload_files功能页面解除。
move_uploaded_file()
失败,因为它无法在tmp文件夹中找到tmp文件。但是我知道它被放在那里,但是在move_upload_file()
可以在我的脚本中处理它之前被删除了。我知道它被放在那里,因为当一个大文件被发布到服务器时我可以在那里看到一个文件。
此外,$_FILES
包含我刚刚上传的文件的正确详细信息。
有没有人知道为什么在我有机会处理它之前从/ tmp中删除临时文件?
以下是我使用的基本代码。
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file))
{
$result['error'] = 'false';
$result['file_loc'] = $upload_file;
}
else
{
$result['error'] = 'true';
}
print_r($_FILES)
的输出看起来像
[userfile] => Array
(
[name] => switchsolo.png
[type] => image/png
[tmp_name] => /tmp/phpIyKRl5
[error] => 0
[size] => 6690
)
但/ tmp / phpIyKRl5根本就不存在。
答案 0 :(得分:10)
1)post_max_size和upload_max_filesize的值是否高于您尝试上传的文件的大小?
2)您的上传脚本执行的时间是否比max_execution_time变量的值允许的时间长?
3)我假设您的上传脚本不会消耗尽可能多的内存,因为memory_limit变量允许。当客户端将文件上传到服务器时,服务器可能会在执行此操作时将其中的一部分保留在内存中。我不确定它是否会以某种方式影响php.ini中memory_limit变量的限制。
可以在php.ini和/或.htaccess中或使用ini_set()更改这些变量。
希望有所帮助。
答案 1 :(得分:6)
脚本完成执行后将删除该文件。如果您运行脚本,然后检查/ tmp /文件夹,则无论如何都不会存在该文件。
答案 2 :(得分:1)
我正在尝试http://www.w3schools.com/php/php_file_upload.asp 我偶然发现了同样的错误。
在我的情况下,在$ destination之前添加“./”解决了问题。
bool move_uploaded_file ( string $filename , string $destination )
答案 3 :(得分:1)
我刚刚遇到这个问题,遇到了这个网站的解决方案 - 没有得到它;)
我在查看print_r($_FILES)
时收到了正确的信息,但无法执行move_uploaded_file
...
我通过检查$upload_file
函数中的move_uploaded_file
路径属性来解决了这个问题 - 请确保它是正确的,否则它将无效(我的错误)。
此外,临时位置的文件会自动删除,我认为这是PHP的工作方式。
我希望这会有所帮助。
答案 4 :(得分:1)
也可能是您的目标文件夹不存在或您没有写入权限。
答案 5 :(得分:0)
您是否100%确定文件实际是在/ tmp中创建的?如果您没有写入权限(或脚本运行的用户),文件将不会写入/ tmp但是(我猜)你会在上传过程中看到它,尽管在上传完成时它实际上并不存在。
编辑:$ _FILES ['file'] ['error'] - 值:7;无法将文件写入磁盘。在PHP 5.1.0中引入。所以检查你的PHP版本。如果它低于5.1写入磁盘可能是你的问题。
答案 6 :(得分:0)
我自己也遇到过这个问题。在我的情况下,PHP上传到错误的tmp文件夹。它不是使用域tmp文件夹(在plesk上的虚拟主机中),而是直接上传到OS临时文件夹。
检查临时文件夹的设置
答案 7 :(得分:0)
为了将来参考,当Apache无法访问目标目录时也会发生这种情况(请记住更改ACL !!)。
答案 8 :(得分:0)
我有同样的问题,'tmp_name'会说它存储在'/ private / var / tmp /'中,但文件不存在。
我必须在php.ini中将“E”添加到我的“变量顺序”中 ;是variables_order 默认值:“EGPCS”
希望这有帮助。
答案 9 :(得分:0)
在move_uploaded_file()函数之前做的简单测试:
if (!file_exists("upload")) {
if (mkdir("upload")) {
echo "Upload directory created!";
}
else {
die( "Invalid upload directory!" );
}
}
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
答案 10 :(得分:0)
小心你的$ upload_file。当您连接文件夹路径和上传的文件名时,它可能缺少“/”。
答案 11 :(得分:0)
尝试在以下位置注释掉PrivateTmp = true 在/etc/systemd/system/multi-user.target.wants/apache2.service中 重新启动Apache之后,它将始终使用系统的临时文件夹,而不是每个会话使用相对的临时文件夹。
答案 12 :(得分:-1)
您的form
应使用以下标记:
<form method="post" enctype="multipart/form-data" action="...">
将multiple/form-data
用作enctype
。
答案 13 :(得分:-2)
您使用move_uploaded_file()
的返回值错误的方法:
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file))
{
$result['error'] = 'true';
}
else
{
$result['error'] = 'false';
$result['file_loc'] = $upload_file;
}