我是php的新手。我正在编写一个PHP脚本,它只需要c
,cpp
和java
个文件,并将它们上传到服务器。
这是我的代码:
<?php
if(!empty($_POST["file_submit"]))
{
$allowed_xtensions = array("c","cpp","java");
$tmp_xtension_array = explode(".",$_FILES["file_name"]["name"]);
$xtension = end($tmp_xtension_array);
$type = $_FILES["file_name"]["type"];
if((($type == "text/x-java-source") || ($type == "text/x-csrc") || ($type == "text/x-c")) && in_array($xtension,$xtensions))
{
if($_FILES["file"]["error"] > 0)
{
exit( "Unable to process file.\nError : ".$_FILES["file_name"]["error"]);
}
else
{
if(!file_exists("/code/test.",$xtension))
{
if(move_uploaded_file($_FILES["file_name"]["tmp_name"],"/code/test.",$xtension) == false)
{
exit("Unable to process the file.\n");
}
}
}
}
else
{
exit("Invalid File.");
}
}
else
{
$file_form = ' <html>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<label for="file"> Select File : </label>
<input type="file" name="file_name" id="file_id"/><br />
<input type="submit" name="file_submit" value="Submit">
</form>
</body>
</html>';
echo $file_form;
}
?>
但每当我上传c,cpp或java文件时,我都会得到INVALID FILE
作为回应,尽管我已经上传了正确的文件。谁能告诉我为什么我的代码会显示这种行为?
答案 0 :(得分:3)
不应该是
... && in_array($xtension,$allowed_xtensions) ...
而不是
.... && in_array($xtension,$xtensions) ...
否则,第二个参数不是一个数组,你可能会得到一个错误,它总是假的?
答案 1 :(得分:0)
您的变量$ type似乎未设置。
作为测试,您可能希望在脚本开头附近坚持这个声明:
print_r($_FILES);
我怀疑在传递给你的脚本的内容中没有键['file'] ['type'](或者至少这些值不是你所期望的)。您还可以使用isset($_FILES['file']['type'])
来测试是否存在。
$ _FILES也可能为空。如果是,则尝试将enctype =“multipart / form-data”添加到表单标记中,并确保已启用文件上载。