Как создать директорию php
Перейти к содержимому

Как создать директорию php

  • автор:

eio_mkdir

eio_mkdir() создаёт директорию с заданным режимом доступа mode .

Список параметров

Путь к новой директории.

Режим доступа, например, 0755

Приоритет запросов: EIO_PRI_DEFAULT , EIO_PRI_MIN , EIO_PRI_MAX , или null . Если передан null , то pri устанавливается в EIO_PRI_DEFAULT .

Функция callback вызывается при завершении запроса. Она должна удовлетворять следующему прототипу:

void callback(mixed $data, int $result[, resource $req]);

является пользовательскими данными, переданными в запросе.

содержит результирующее значение, зависящее от запроса; обычно это значение, возвращаемое соответствующим системным вызовом.

является опциональным запрашиваемым ресурсом, который может использоваться с такими функциями как eio_get_last_error()

Переменная, которую необходимо передать callback-функции callback .

Возвращаемые значения

В случае успешного выполнения операции eio_mkdir() вернёт ресурс запроса или false в случае возникновения ошибки.

Примеры

Пример #1 Пример использования eio_mkdir()

// Удаляем директорию
if ( file_exists ( $data ))
rmdir ( $temp_dirname );
>

// Создаём директорию с режимом доступа 0300
eio_mkdir ( $temp_dirname , 0300 , EIO_PRI_DEFAULT , «my_mkdir_callback» , $temp_dirname );
eio_event_loop ();
?>

Вывод приведённого примера будет похож на:

mkdir

В эту функцию в качестве имени файла можно передавать URL-адреса, если была включена директива fopen wrappers. Подробнее о том, как указать имя файла, рассказано в описании функции fopen() . В разделе «Поддерживаемые протоколы и обёртки» также даны ссылки на информацию о способностях поддерживаемых обёрток, замечания по работе с ними и список предопределённых переменных, которые они дают.

По умолчанию принимает значение 0777, что означает самые широкие права. Больше информации о правах доступа можно узнать на странице руководства функции chmod() .

Замечание:

Аргумент permissions игнорируется в Windows.

Обратите внимание, что аргумент permissions необходимо задавать в виде восьмеричного числа (первой цифрой должен быть ноль). На аргумент permissions также влияет текущее значение umask, которое можно изменить при помощи umask() .

Если указано значение true , то все родительские каталоги для указанного параметра directory также будут созданы, с теми же разрешениями.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false в случае возникновения ошибки.

Замечание:

Если создаваемый каталог уже существует, это считается ошибкой и будет возвращено значение false . Используйте функцию is_dir() или file_exists() , чтобы проверить, существует ли уже каталог, прежде чем пытаться его создать.

Ошибки

Выдаёт ошибку уровня E_WARNING , если директория уже существует.

Выдаёт ошибку уровня E_WARNING , если соответствующие права доступа блокируют создание директории.

Примеры

Пример #1 Пример использования функции mkdir()

mkdir ( «/path/to/my/dir» , 0700 );
?>

Пример #2 Использование mkdir() с параметром recursive

// Желаемая структура папок
$structure = ‘./depth1/depth2/depth3/’ ;

// Для создания вложенной структуры необходимо указать параметр
// $recursive в mkdir().

if (! mkdir ( $structure , 0777 , true )) die( ‘Не удалось создать директории. ‘ );
>

Смотрите также

  • is_dir() — Определяет, является ли имя файла директорией
  • rmdir() — Удаляет директорию
  • umask() — Изменяет текущую маску прав доступа для вновь созданных файлов и каталогов (umask)

User Contributed Notes 5 notes

13 years ago

When using the recursive parameter bear in mind that if you’re using chmod() after mkdir() to set the mode without it being modified by the value of uchar() you need to call chmod() on all created directories. ie:

mkdir ( ‘/test1/test2’ , 0777 , true );
chmod ( ‘/test1/test2’ , 0777 );
?>

May result in «/test1/test2» having a mode of 0777 but «/test1» still having a mode of 0755 from the mkdir() call. You’d need to do:

mkdir ( ‘/test1/test2’ , 0777 , true );
chmod ( ‘/test1’ , 0777 );
chmod ( ‘/test1/test2’ , 0777 );
?>

6 months ago

When creating a file using mkdir() the default root will be the DocumentRoot (in XAMPP) itself.

If you use mkdir(«myfile») in something.php, instead of creating the folder in includes, php will create it in the project folder

24 years ago

This is an annotation from Stig Bakken:

The mode on your directory is affected by your current umask. It will end
up having ( and (not )). If you want to create one
that is publicly readable, do something like this:

$oldumask = umask ( 0 );
mkdir ( ‘mydir’ , 0777 ); // or even 01777 so you get the sticky bit set
umask ( $oldumask );
?>

18 years ago

mkdir, file rw, permission related notes for Fedora 3////
If you are using Fedora 3 and are facing permission problems, better check if SElinux is enabled on ur system. It add an additional layer of security and as a result PHP cant write to the folder eventhough it has 777 permissions. It took me almost a week to deal with this!

If you are not sure google for SElinux or ‘disabling SELinux’ and it may be the cure! Best of luck!

12 years ago

Remember to use clearstatcache()

. when working with filesystem functions.

Otherwise, as an example, you can get an error creating a folder (using mkdir) just after deleting it (using rmdir).

  • Copyright © 2001-2024 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

Функция mkdir в PHP, описание и примеры

Функция mkdir() создает новую папку в указанной директории. Если создание проходит успешно, возвращает значение True. При создании новой папки можно задать права на доступ к ней параметром $mode. Указав параметру $recursive значение True, можно выполнить создание нескольких вложенных папок.

Версия PHP 4 и выше.

function bool mkdir (string $pathname [, int $mode [, bool $recursive [, resource $context]]])

Параметры функции mkdir

$pathname Путь к создаваемой директории.
$mode Права на создаваемую папку.Права назначаются восьмеричным значением с обязательным нулем на первом месте (0777). Не считая первого нуля, числа означают уровни доступа для владельца, для группы владельца, для всех остальных.
Уровень доступа определяется числа:
0 – доступ закрыт;
1 – доступ для чтения;
2 – доступ на запись;
4 – доступ на выполнение.
Чаще всего права задаются составной суммой, например:
7 – полный доступ (1+2+4);
5 – чтение и выполнение (1+4).
По умолчанию назначается значение 0777.
$recursive Логический параметр, определяющий можно ли создавать вложенные поддиректории.
$context Используется при работе с потоками. Добавлена в PHP 5.0.0.

Примеры использования функции mkdir

mkdir("newfolder"); // создание папки в текущей директории
mkdir("../newfolder"); // на уровень ниже
mkdir("/folder1/folder2/newfolder"); // полный путь
mkdir("newfolder", 0777); // создание папки с назначением прав

Если нужно создать несколько вложенных папок, нужно задать $recursive = True.

mkdir("folder1/folder2/newfolder", 0777, True); // создание папки в текущей директории

ftp_mkdir

Возвращает имя только что созданной директории в случае успешного выполнения или false в противном случае.

Ошибки

Выдаёт ошибку уровня E_WARNING , если каталог уже существует или соответствующие права доступа препятствуют созданию каталога.

Список изменений

Версия Описание
8.1.0 Параметр ftp теперь ожидает экземпляр FTP\Connection ; ранее ожидался ресурс (resource).

Примеры

Пример #1 Пример использования ftp_mkdir()

// установка соединения
$ftp = ftp_connect ( $ftp_server );

// вход с именем пользователя и паролем
$login_result = ftp_login ( $ftp , $ftp_user_name , $ftp_user_pass );

// попытка создания директории $dir
if ( ftp_mkdir ( $ftp , $dir )) echo «Создана директория $dir \n» ;
> else echo «Не удалось создать директорию $dir \n» ;
>

// закрытие соединения
ftp_close ( $ftp );
?>

Смотрите также

  • ftp_rmdir() — Удаляет директорию

User Contributed Notes 5 notes

10 years ago

Here’s the correct code for making recursive directories:

// function
function ftp_mksubdirs ( $ftpcon , $ftpbasedir , $ftpath ) @ ftp_chdir ( $ftpcon , $ftpbasedir ); // /var/www/uploads
$parts = explode ( ‘/’ , $ftpath ); // 2013/06/11/username
foreach( $parts as $part ) if(!@ ftp_chdir ( $ftpcon , $part )) ftp_mkdir ( $ftpcon , $part );
ftp_chdir ( $ftpcon , $part );
//ftp_chmod($ftpcon, 0777, $part);
>
>
>

// usage
$path_of_storage = ‘/var/www/uploads’ ;
$newftpdir = ‘2013/06/11/username’ ;

$conn_id = ftp_connect ( $ftpserver );
ftp_login ( $conn_id , $login , $pass );
ftp_mksubdirs ( $conn_id , $path_of_storage , $newftpdir );
ftp_close ( $conn_id );

19 years ago

For recurrent following function work better.
Some ftp servers (like WarFTP) become demented if you’ll
try mkdir not from root dir and if path will be relative.
The second if one of dir (like ‘/’) already exist You’ll get access denied.

function MkDir ( $path )
<
$dir = split ( «/» , $path );
$path = «» ;
$ret = true ;

for ( $i = 0 ; $i < count ( $dir ); $i ++)
<
$path .= «/» . $dir [ $i ];
echo » $path \n» ;
if(!@ ftp_chdir ( $this -> conn_id , $path )) <
@ ftp_chdir ( $this -> conn_id , «/» );
if(!@ ftp_mkdir ( $this -> conn_id , $path )) <
$ret = false ;
break;
>
>
>
return $ret ;
>
?>

5 years ago

if(!@ftp_chdir($ftpcon, $part)) <
ftp_mkdir($ftpcon, $part);
ftp_chdir($ftpcon, $part);
//ftp_chmod($ftpcon, 0777, $part);
>

This if part of answer below, if you want working chmod you need to replace it with:

if(!@ftp_chdir($ftpcon, $part)) ftp_mkdir($ftpcon, $part);
ftp_chmod($ftpcon, 0777, $part);
ftp_chdir($ftpcon, $part);
>

17 years ago

When trying to user the ftp_mkdir, or ftp_chdir I’ve noticed that some servers like the entire path such as

and other servers, want you to use the path from the initial login, such as just /sitename/directory/

Just wanted to pass this on

6 years ago

Updated and correct code for making recursive directories:

/**
* A function to create ftp directories recursively.
*
* @param $ftpcon the ftp connection resource
* @param $baseDir
* @param $path
* @param int $mode
* @return bool
*/
function ftp_mksubdirs($ftpcon, $baseDir, $path, $mode = 0775) $path = dirname($path);

if ($path[0] == DIRECTORY_SEPARATOR) $path = substr($path, 1);
>
> else if ($path[0] == DIRECTORY_SEPARATOR) $path = substr($path, 1);
>
>

@ftp_chdir($ftpcon, $baseDir);
$parts = explode(DIRECTORY_SEPARATOR, $path);
$created = [];
foreach ($parts as $part) if (!@ftp_chdir($ftpcon, $part)) $createdDir = @ftp_mkdir($ftpcon, $part);

if ($createdDir !== false) ftp_chmod($ftpcon, $mode, $createdDir);
>

$created[] = $createdDir;
@ftp_chdir($ftpcon, $part);
>
>

return !in_array(false, $created);
>

  • Copyright © 2001-2024 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *