xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Функции для работы с файловыми путями

Опубликовано в

drupal_basename($uri, $suffix = NULL) — возвращает имя файла. Это аналог PHP функции basename() за исключением того, что поддерживает stream wrappers и имена файлов с не US-ASCII символами.

drupal_basename('sites/default/files/test.jpg');         // test.jpg
drupal_basename('public://test.jpg');                    // test.jpg
drupal_basename('/drupal/sites/default/files/test.jpg'); // test.jpg

 

drupal_dirname($uri) — возвращает директорию файла. Это аналог PHP функции dirname() за исключением того, что поддерживает stream wrappers.

drupal_dirname('sites/default/files/test.jpg');         // sites/default/files
drupal_dirname('public://test.jpg');                    // public://
drupal_dirname('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files

 

drupal_realpath($uri) — возвращает абсолютный путь к файлу. Может работать с stream wrappers. Возвращает FALSE если файла не существует. Не рекомендуется к использованию.

drupal_realpath('sites/default/files/test.jpg');         // /drupal/sites/default/files/test.jpg
drupal_realpath('public://test.jpg');                    // /drupal/sites/default/files/test.jpg
drupal_realpath('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files/test.jpg

 

file_build_uri($path) — добавляет к пути файла дефолтный протокол (public://).

file_build_uri('test.jpg'); // public://test.jpg

 

file_create_filename($basename, $directory) — возвращает полный путь для будущего файла с именем $basename в директории $directory. Если файл с таким именем существует, то к имени файла добавляется порядковый номер. Поддерживает stream wrappers.

// если файл test.jpg не существует в указанной директории
file_create_filename('test.jpg', 'sites/default/files');          // sites/default/files/test.jpg
file_create_filename('test.jpg', 'public://');                    // public://test.jpg
file_create_filename('test.jpg', '/drupal/sites/default/files/'); // /drupal/sites/default/files/test.jpg
 
// если файл test.jpg существует в указанной директории
file_create_filename('test.jpg', 'sites/default/files');          // sites/default/files/test_0.jpg
file_create_filename('test.jpg', 'public://');                    // public://test_0.jpg
file_create_filename('test.jpg', '/drupal/sites/default/files/'); // /drupal/sites/default/files/test_0.jpg

 

file_create_url($uri) — возвращает URL файла. Поддерживает stream wrappers. Не поддерживает абсолютные пути к файлу.

file_create_url('sites/default/files/test.jpg');         // http://example.com/sites/default/files/test.jpg
file_create_url('public://test.jpg');                    // http://example.com/sites/default/files/test.jpg
file_create_url('/drupal/sites/default/files/test.jpg'); // /drupal/sites/default/files/test.jpg

 

file_destination($destination, $replace) — возвращает путь к существующему файлу в зависимости от значения $replace. Если файла $destination не существует, то функция возвратит то, что передано первым аргументом.

file_destination('sites/default/files/test.jpg', FILE_EXISTS_REPLACE));         // sites/default/files/test.jpg
file_destination('sites/default/files/test.jpg', FILE_EXISTS_RENAME));          // sites/default/files/test_0.jpg
file_destination('sites/default/files/test.jpg', FILE_EXISTS_ERROR));           // FALSE
file_destination('public://test.jpg', FILE_EXISTS_REPLACE));                    // public://test.jpg
file_destination('public://test.jpg', FILE_EXISTS_RENAME));                     // public://test_0.jpg
file_destination('public://test.jpg', FILE_EXISTS_ERROR));                      // FALSE
file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_REPLACE)); // /drupal/sites/default/files/test.jpg
file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_RENAME));  // /drupal/sites/default/files/test_0.jpg
file_destination('/drupal/sites/default/files/test.jpg', FILE_EXISTS_ERROR));   // FALSE

 

file_directory_temp() — возвращает путь к временной директории, указанной на странице admin/config/media/file-system. Не рекомендуется использовать.

file_directory_temp(); // /tmp

 

file_munge_filename($filename, $extensions, $alerts = TRUE) — если файл имеет двойное расширение, например file.php.jpg, то функция добавит нижнее подчёркивание к первому расширению, во избежание взлома при криво настроенном апаче.

file_munge_filename('sites/default/files/exploit.php.pps', '');         // sites/default/files/exploit.php_.pps
file_munge_filename('public://exploit.php.pps', '');                    // public://exploit.php_.pps
file_munge_filename('/drupal/sites/default/files/exploit.php.pps', ''); // drupal/sites/default/files/exploit.php_.pps

 

file_unmunge_filename($filename) — отменяет эффект от функции file_munge_filename().

file_unmunge_filename('sites/default/files/exploit.php_.pps');         // sites/default/files/exploit.php.pps
file_unmunge_filename('public://exploit.php_.pps');                    // public://exploit.php.pps
file_unmunge_filename('/drupal/sites/default/files/exploit.php_.pps'); // drupal/sites/default/files/exploit.php.pps

 

file_stream_wrapper_uri_normalize($uri) — нормализует URI файла: удаляет завершающий слэш из имени директории и исправляет тройной слэш в протоколе.

file_stream_wrapper_uri_normalize('sites/all/files/');   // sites/all/files
file_stream_wrapper_uri_normalize('public:///test.jpg'); // public://test.jpg

 

file_uri_scheme($uri) — возвращает протокол из URI.

file_uri_scheme('public://test.jpg'); // public
file_uri_scheme('temporary://');      // temporary

 

file_uri_target($uri) — возвращает часть пути без протокола.

file_uri_target('public://test.jpg');            // test.jpg
file_uri_target('temporary://test.jpg');         // test.jpg
file_uri_target('sites/default/files/test.jpg'); // FALSE

 

file_valid_uri($uri) — возвращает TRUE если в $uri валидный Drupal URI.

file_valid_uri('public://test.jpg');            // TRUE
file_valid_uri('foo://test.jpg');               // FALSE
file_valid_uri('sites/default/files/test.jpg'); // FALSE
Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Хотел спросить почему не рекомендовано использовать drupal_realpath?
На сайте есть самописный модуль, который работает с ZipArchive, а как раз нужны пути к файлам в фс, урлы не подходят (хотя здесь могу ошибаться). И для получения пути используется как раз эта функция.

в Drupal 7 повсеместно используются stream wrappers, это облегчает разработку и переносимость. drupal_realpath был написан для лёгкой миграции с Drupal 6.

Xandeadx, ты великолепен! В который раз твои статьи меня выручают.

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании