Работая на WordPress над любым проектом, в котором можно загружать различные файлы, будь то видео, CSV-файлы, изображения или другой тип данных, вы рано или поздно столкнетесь с ситуацией, где вам нужно будет определить, не является ли размер файла слишком большим для загрузки на ресурс.

То, что считается «слишком большим» может означать следующее:

  • Размер файла превышает допустимый (больше, чем может принять сама система сайта)
  • Время ожидания истекает при очень длительной загрузке файла из-за его размера
  • Файловая система не имеет достаточно места
  • Прочее

В любом из этих случаев, есть две вещи, которые вам нужно будет сделать:

  1. Определить, не превышает ли файл допустимый размер для загрузки
  2. Отобразить ошибку для пользователя еще до начала загрузки

Вы сами неоднократно сталкивались с подобной ситуацией и не могли разобраться, почему сервер не принимает ваш файл, так как не было соответствующего уведомления об ошибке, не так ли?

Размер файла превышает допустимый на WordPress

Как уже упоминалось, причина, по которой файл может быть «слишком большим» зависит от многих переменных.

Для этого ниже приведены примеры, которые относятся абсолютно к каждой из возможных причин. Существует общая настройка, способная помочь при любой из них. В нижеуказанном коде мы рассмотрим пример для любой из ситуаций.

1. Подготавливаем вывод уведомления

Примерно так будет выглядеть наш код уведомления на WordPress:

<?php
class Acme_File_Importer {

	public function __construct() {
		add_action( 'admin_notices', array( $this, 'display_admin_notice' ) );
	}
	
	public function display_admin_notice() {
	  // TODO
	}
	
}

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

2. Проверка размера файла при загрузке

Учтите, данная функция предполагает, что у вас уже есть соответствующая программа для определения наличия файла в строке загрузки $_FILES.

В этом случае пользователь предоставил файл для загрузки, и мы сделаем следующее:

<?php

/**
 * Determines if the given file is too large for the current environment.
 *
 * @return    bool      True if the file is too large; otherwise, false.
 * @access    private
 */
private function file_is_too_large() {

  // Read the contents of the file
  $file_contents = file_get_contents( $_FILES['acme_uploaded_file']['tmp_name'] );
  $is_too_large = false;
  
  /* Use your own metric for determining if the file is too large or not
   * and then set a boolean value depending on that result.
   */
   
  return $is_too_large;

}

Наличие функции private для определения размера файла способствует лучшей читабельности кода.

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

3. Отображение ошибки (или загрузка файла)

Наконец-то, мы обновляем функцию хука, которую мы уже определили для использования функции private, отображаем ошибку, либо продолжаем загрузку файла:

<?php

/**
 * Renders the appropriate message box based on how the import performs.
 */
public function display_admin_notice() {

  if ( $this->file_is_too_large() ) {

    /* This would be cleaner if it were an external file that was 
     * brought in via an include_once call, but this is just for
     * example :).
     */
    $html = '<div class="error">';
      $html .= '<p>You are attempting to upload a file that is too large.</p>';
    $html .= '</div>';

    echo $html;

  }

}

Обратите внимание, что код проверяет, файл слишком большой или нет. И если да, то показывает ошибку. Если нет - продолжает его загрузку.

Это один из способов узнать, подходит ли тот или иной файл для загрузки на WordPress. Используйте этот метод в таком виде, как описано выше, либо создавайте свои способы на его основе.

Источник: tommcfarlin.com

Вам понравился материал?

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.