我正在使用表单将图片上传到我的 img 文件夹。照片数组的错误代码是0,这意味着没有任何错误,文件上传成功,但它不是......这是我的代码:
这是HTML:
<form enctype="multipart/form-data" method="post" action="upload.php">
<label>Thumbnail:</label>
<input name="thumbnail" type="file">
<input type="submit">
</form>
这是 upload.php 文件:
<?php
$uploaddir = 'img/';
$uploadfile = $uploaddir . basename($_FILES['thumbnail']['name']);
echo $uploadfile;
echo '<pre>';
if (move_uploaded_file($_FILES['thumbnail']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>
我放了一个print_r($_FILES)
,因为我想看看数组...这是我上传图片后得到的结果:
Array
(
[thumbnail] => Array
(
[name] => Stack.png
[type] => image/png
[tmp_name] => /tmp/phpEo6Gu5
[error] => 0
[size] => 482278
)
)
而且,如果你看here,你会发现错误0对应于:
没有错误,文件上传成功。
但我的文件夹中没有任何文件......这是文件夹的树视图:
|test
|||img (folder)
|||||somephoto.png
|||||otherphoto.png
|||upload.php
但那里没有任何照片,因为我无法上传它们......我做错了什么?
谢谢!
编辑:我知道这里存在很多安全风险,但我只是在我的本地机器上进行测试,如果有问题,我将添加所有与安全相关的代码。答案 0 :(得分:3)
文件上传到临时文件夹,print_r($_FILES)
显示,实际文件为/tmp/phpEo6Gu5
。
您必须使用move_uploaded_file()
将此文件移至其最终目的地。例如:
move_uploaded_file($_FILE['thumbnail']['tmp_name'], 'img/final_name.png');
不要相信$_FILE['thumbnail']['name']
或$_FILE['thumbnail']['type']
是安全有效的,因为这来自客户端,可能会被恶意用户扭曲以利用您网站中的安全问题。
此外,请确保您运行的脚本的用户帐户具有写入最终目录的权限。解决问题的简单方法是在shell中运行chmod 777 img
(为文件夹img
中的每个人提供完整的读取+写入+执行权限。)
答案 1 :(得分:0)
您是否尝试将文件从Temporary目录移动到当前目录?
PHP上传到服务器上的tmp文件夹。您需要使用move_uploaded_file函数将其传递到另一个目录:
move_uploaded_file($_FILE['thumbnail']['tmp_name'], 'img/image.png');