1
<?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 字节的文件,它的工作原理知道如何让它工作吗?或者是否有其他解决方案?

4

1 回答 1

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"]可以更改/格式错误/欺骗,因此不值得信任。使用服务器端解决方案按内容确定文件类型。

于 2013-06-06T19:33:17.750 回答