2010-04-15 3 views
0

Мне нужно загрузить файл csv на сервер. отлично работает для небольших файлов, но когда файл 3-6 мегабайт, он не работает.Большая проблема с загрузкой файлов с php

$allowedExtensions = array("csv"); 
     foreach ($_FILES as $file) { 
      if ($file['tmp_name'] > '') { 
      if (!in_array(end(explode(".", strtolower($file['name']))), $allowedExtensions)) { 

       die($file['name'].' is an invalid file type!<br/>'. '<a href="javascript:history.go(-1);">'. '&lt;&lt Go Back</a>'); 

      } 
      if (move_uploaded_file($file['tmp_name'], $uploadfile)) { 
        echo "File is valid, and was successfully uploaded.\n"; 
       } else { 
        echo "Possible file upload attack!\n"; 
       } 

      echo "File has been uploaded"; 



      } 

// Загрузка формы

<form name="upload" enctype="multipart/form-data" action="<? echo $_SERVER['php_self'];?>?action=upload_process" method="POST"> 
        <!-- MAX_FILE_SIZE must precede the file input field --> 
        <input type="hidden" name="MAX_FILE_SIZE" value="31457280" /> 
        <!-- Name of input element determines name in $_FILES array --> 
        Send this file: <input name="userfile" type="file" /> 
        <input type="submit" value="Send File" /> 
      </form> 

Я также добавил это HTAccess

php_value upload_max_filesize 20M 
php_value post_max_size 20M 
php_value max_execution_time 200 
php_value max_input_time 200 

Где я буду неправильно?

+0

Вы не проверяли фактические значения. запустите 'phpinfo()', чтобы увидеть их –

+0

Если вы делаете phpinfo, что такое предел max_filesize и т. д.? EDIT: Шрапнель избил меня. – Simeon

+0

Если вы отправляете с собой максимальный размер файла и сравниваете загруженные файлы с ним, вы позволяете любому пользователю выбирать максимальный размер файла. – alex

ответ

1

Каково значение $ _FILES ['userfile'] ['error']? Посмотрите здесь:

http://php.net/manual/en/features.file-upload.errors.php

Кроме того, Что с этим:

if ($file['tmp_name'] > '') { 

Я не думаю, что это очень здорово.

+0

Лучшим способом может быть 'if (file_exists ($ file ['tmp_name'])) {' – donut

+0

i get error "1". php ini значение? – chris

+0

@donut: Еще лучше 'is_uploaded_file ($ file ['tmp_name'])', который имеет некоторую дополнительную защиту subversion для скрипта. –

-1

Проверьте файл php.ini и посмотрите, установлен ли файл upload_max_filesize выше 3 МБ, я не знаю, имеет ли приоритет .htaccess над php.ini.

Предел загрузки по умолчанию на debian php5 равен 2 МБ, если я правильно помню, но я не уверен, в какой системе вы работаете.

Вы также можете проверить значения php, если вы создали файл , например. info.php и поместите его в ту же директорию, что и ваш «сценарий проблем php».

содержание Файл должен выглядеть следующим образом <?php phpinfo(); ?>

Это даст вам все PHP соответствующие значения, относящиеся к каталогу вы в, надеюсь, что это помогает.

0

Просто некоторые предложения к вашему коду

  • ($file['tmp_name'] > '') должно быть что-то вроде (! empty($file['tmp_name']))
  • гулкой «атака загрузки можно файл» никому не поможет. Если вы считаете, что это возможная атака, запишите ее в файл.
  • Атрибут действия формы, $_SERVER['php_self'] должен быть капитализирован, потому что он является константой, то есть $_SERVER['PHP_SELF'].
+0

изменен .. все еще не работает – chris

0

Проверьте свои журналы ошибок apache, и ошибка должна быть там?

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