Загрузка файла показывает сообщение об ошибке: только переменные должны быть переданы по ссылке в

0

Я попытался снять эту ошибку, я не понимаю, почему это происходит, потому что я правильно загружаю файл... Прямо сейчас загружается файл, он показывает мне ошибку. Уведомление об ошибке. Только переменные должны передаваться по ссылке...

      <?php
   if(isset($_FILES['csv'])){
      $errors= array();
      $file_name = $_FILES['csv']['name'];
      $file_size = $_FILES['csv']['size'];
      $file_tmp = $_FILES['csv']['tmp_name'];
      $file_type = $_FILES['csv']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['csv']['name'])));// error line

      $expensions= array("csv");

      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a csv file.";
      }

      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }

      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>

      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "csv" />// If I change this to name this code does not works, 
         <input type = "submit"  value="Subir archivos"/>


      </form>

   </body>
</html>
  • 0
    Вы уверены, что этот код вызывает уведомление? Нет номера строки / файла? На какую строку кода он ссылается?
  • 0
    именно этот $ file_ext = strtolower (end (explode ('.', $ _ FILES ['csv'] ['name'])));
Показать ещё 1 комментарий
Теги:
excel

3 ответа

0
Лучший ответ

При вызове end() вы должны передать массив как переменную, а не возвращаемое значение функции. Итак, в...

$file_ext=strtolower(end(explode('.',$_FILES['csv']['name'])));

вы можете назначить возврат explode() переменной, а затем call end()

$file_parts =explode('.',$_FILES['csv']['name']);
$file_ext=strtolower(end($file_parts));

Если вы посмотрите на документацию для end(), это показывает, что параметр array &$array, & показывает, что он прошел по ссылке.

0

Измените эту строку:

$file_ext = strtolower(end(explode('.', $_FILES['csv']['name'])));

К этому:

$file_ext = pathinfo($file_name, PATHINFO_EXTENSION);

И в отношении того, If я change this to name this code does not works, потому что вам также нужно изменить индекс массива, чтобы name FILES суперглобальным для доступа к данным.

if (isset($_FILES['name'])) {
    $errors = [];
    $file_name = $_FILES['name']['name'];
    $file_size = $_FILES['name']['size'];
    // and so on...
}
0

Он жалуется, когда вы не передаете переменную plain. Она не любит функции, передаваемые в.

Также вы уже присваиваете $_FILES['csv']['name'] как $name, поэтому просто используйте $name.

Разделите линию:

$file_ext=strtolower(end(explode('.',$_FILES['csv']['name'])));

к

$file_ext = explode('.',$name);
$file_ext = end($file_ext);
$file_ext = strtolower($file_ext);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню