2013-06-06 2 views
0
<?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 мб еще ?! это нормально? Я загружаю файл размером 800 байтов, и он знает, как заставить его работать? или если есть другое решение?PHP размер файла более

ответ

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"] может быть изменена/malformed/spoofed, так что не стоит доверять. Используйте серверные решения для определения типа файла по контенту.

+0

Я исправил его перед чтением сообщения, но, без сомнения, узнал о вещах, которые я пропустил в вашем сообщении, например, $ _FILES не заслуживает доверия, но я хотел бы показать мне, как это сделать с помощью сервера, чтобы проверить содержимое даже в простой способ :) Спасибо большое –

Смежные вопросы