我已经为图像文件构建了一个带有HTML表单/ PHP上传的网站,当它在我的本地计算机上运行XAMPP时运行良好,但是当我将它上传到000webhost时,大多数情况下它表示无效文件和有时只会成功上传图片。我已经尝试在php配置中调高最大执行时间,但似乎没有修复它。我试图上传的文件小于php配置中的最大文件大小,并完美地在我的测试机上工作。
我觉得奇怪的是,它有时会起作用,而不是其他时间,并且不知道该尝试什么。
编辑:
这是表格 文件名:
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png")))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
move_uploaded_file($_FILES["file"]["tmp_name"],
"churchimages/pauls.jpeg");
echo "Stored in: " . "churchimages/pauls.jpeg";
}
}
else
{
echo "Invalid file";//This is the section I am seeing
}
答案 0 :(得分:3)
您的文件类型检测依赖于$_FILES["file"]["type"]
,这是由浏览器发送的,并且非常不可靠。
检测上传文件是否为图片的更好方法是getimagesize()
。
$info = getimagesize($_FILES["file"]["tmp_name"]);
$allowed_types = array(IMG_GIF, IMG_JPEG, IMG_PNG);
if (in_array($info[2], $allowed_types))
{ .... do stuff ... }
答案 1 :(得分:2)
在执行任何其他操作之前,您应该检查上传是否实际上成功:
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
... handle upload...
if (!move_uploaded_file(...)) { // <--important. ALWAYS check if the move worked.
die("File move failed. Data is lost");
}
} else {
die("Upload failed with code " . $_FILES['file']['error']);
}
如果没有上传,那么['type']
字段就不会被设置,只是说“无效文件”就没用了 - 根本就没有文件。
正如Pekka指出的那样,你应该使用其他方法来确定文件类型。 $ _FILES中的['type']
数据是用户提供的,并且很容易伪造。
答案 2 :(得分:0)
确保您为上传的文件而不是相对文件定义绝对路径。
答案 3 :(得分:0)
我今天遇到过这个问题......很伤心。花了大约一个小时来修理。
想法:检查脚本顶部的$ _FILES [“file”] [“type”] ==“image / gif”是对我失败的。浏览器似乎填充了“BLANK DATA”而不是“image / gif”,因此每次使用“无效文件类型”时我的初始检查失败
问题:浏览器似乎没有正确地从tmp目录发送文件类型?
我的FIX:删除文件类型检查....如上所述,这是非常不可靠的......
答案 4 :(得分:0)
检查PHP文件权限。在ooowebhost中,您可以在chmod中找到它。改为'777'。否则,该文件没有执行/写入的权限