<?php
ini_set('upload_max_filesize', '70M');
ini_set('post_max_size', '70M');
ini_set('max_input_time', 6000);
ini_set('max_execution_time', 300000);
$f = 'path';
$obj = new COM ( 'scripting.filesystemobject' );
if ( is_object ( $obj ) )
{
$ref = $obj->getfolder ( $f );
//echo 'Directory: ' . $f . ' => Size: ' . $ref->size;
$obj = null;
}
else
{
//echo 'can not create object';
}
if ( $ref->size < 32212254720){
if (($_FILES["fileToUpload"]["type"] == "audio/mp3")
|| ($_FILES["fileToUpload"]["type"] == "audio/wav")
|| ($_FILES["fileToUpload"]["type"] == "audio/mpeg")
&& ($_FILES["fileToUpload"]["size"] >= 26214400)
&& ($_FILES["fileToUpload"]["size"]<= 70000000)
)
{
things done
else
{
echo error
}
echo error space if full
}
问题是($_FILES["fileToUpload"]["size"] >= 26214400)
不起作用,我可以上传小于25 MB的文件吗?!那是正常的吗?我上传800字节的文件,它有任何想法如何让它工作?或者如果有其他解决方案?
答案 0 :(得分:1)
此:
if (($_FILES["fileToUpload"]["type"] == "audio/mp3")
|| ($_FILES["fileToUpload"]["type"] == "audio/wav")
|| ($_FILES["fileToUpload"]["type"] == "audio/mpeg")
&& ($_FILES["fileToUpload"]["size"] >= 26214400)
&& ($_FILES["fileToUpload"]["size"]<= 70000000)
)
是错误的,难以维护和不可靠。
首先,您将||
和&&
混合在一起,而不将||
分组在一个括号中 - 这是您的主要问题。通过添加一组括号轻松修复:
if (
(
($_FILES["fileToUpload"]["type"] == "audio/mp3")||($_FILES["fileToUpload"]["type"] == "audio/wav")||($_FILES["fileToUpload"]["type"] == "audio/mpeg")
)
&& ($_FILES["fileToUpload"]["size"] >= 26214400)
&& ($_FILES["fileToUpload"]["size"]<= 70000000)
)
但这是不可读的,所以让我们定义一个允许值数组并检查它:
$allowed = array("audio/mp3", "audio/wav", "audio/mpeg");
if (
in_array($_FILES["fileToUpload"]["type"], $allowed)
&& ($_FILES["fileToUpload"]["size"] >= 26214400)
&& ($_FILES["fileToUpload"]["size"]<= 70000000)
)
最后一件事 - $_FILES["fileToUpload"]["type"]
可以更改/格式错误/欺骗,因此不值得信任。使用服务器端解决方案按内容确定文件类型。