opendir — Открыть каталог


FPublisher

Web-технологии: База знаний

Документация PHP

opendir

opendir — Открыть каталог

Описание

resource opendir ( string $path )

Возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir().

Если путь не существует или каталог, расположенный по указанному пути, не может быть открыт вследствие правовых ограничений или ошибок файловой системы, функция opendir() возвращает значение FALSE и генерирует сообщение PHP об ошибке уровня E_WARNING. Вы можете запретить вывод сообщения об ошибке, предварив имя функции opendir() символом ‘@’.

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

// Открыть заведомо существующий каталог и начать считывать его содержимое
if ( is_dir ( $dir )) <
if ( $dh = opendir ( $dir )) <
while (( $file = readdir ( $dh )) !== false ) <
print «Файл: $file : тип: » . filetype ( $dir . $file ) . «\n» ;
>
closedir ( $dh );
>
>
?>

Начиная с версии PHP 4.3.0, параметр путь может также являться любым URL’ом, обращение к которому приводит к получению списка его файлов и каталогов. Однако, данный способ работает только при использовании url-упаковщика file://. В версии PHP 5.0.0 была добавлена поддержка url-упаковщика ftp://.

См.также описания функций is_dir(), readdir() и класса Dir

opendir

(PHP 4, PHP 5, PHP 7)

opendir — Открывает дескриптор каталога

Описание

Открывает дескриптор каталога для последующего использования с функциями closedir() , readdir() и rewinddir() .

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

Путь к открываемому каталогу

Для описания параметра context обратитесь к разделу Потоки.

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

Возвращает дескриптор каталога ( resource ) в случае успеха или FALSE в случае ошибки.


Если path не существует или каталог, расположенный по указанному пути, не может быть открыт из-за ограничений доступа или ошибок файловой системы, функция opendir() вернет значение FALSE и сгенерирует ошибку PHP уровня E_WARNING. Вы можете запретить вывод сообщения об ошибке, предварив имя функции opendir() символом ‘@’.

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

Версия Описание
5.0.0 path теперь поддерживает обертку ftp://.
4.3.0 Параметр path теперь может являться любым URL, поддерживающим передачу списка файлов, однако в PHP 4 поддерживается только обертка file://

Примеры

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

// Открыть известный каталог и начать считывать его содержимое
if ( is_dir ( $dir )) <
if ( $dh = opendir ( $dir )) <
while (( $file = readdir ( $dh )) !== false ) <
echo «файл: $file : тип: » . filetype ( $dir . $file ) . «\n» ;
>
closedir ( $dh );
>
>
?>

Результатом выполнения данного примера будет что-то подобное:

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

  • is_dir() — Определяет, является ли имя файла директорией
  • readdir() — Получает элемент каталога по его дескриптору
  • dir() — Возвращает экземпляр класса Directory

Открыть каталог с помощью C

9 Vinod K [2010-08-24 09:58:00]

Я принимаю путь через ввод в командной строке.

Как передать ввод командной строки в указатель dir.

4 ответа

30 Решение paxdiablo [2010-08-24 10:03:00]

Вы действительно должны опубликовать свой код, но здесь. Начните с:

Вам нужно проверить свой случай, что args[1] установлен и относится к фактическому каталогу. Когда это выполняется, выполните следующие действия:

( tmp — это подкаталог моего текущего каталога, но вы можете использовать любой действительный каталог), я получаю:

Обратите внимание, что вам нужно передать каталог, а не файл. Когда я выполняю:

потому что это файл, а не каталог (если вы скрыты, вы можете попытаться использовать diropen(dirname(v[1])) , если исходный diropen не работает).

Параметры, переданные в исполняемый файл программы C, представляют собой не что иное, как массив строки (или указатель символа), поэтому память уже была выделена для этих входных параметров, прежде чем ваша программа будет обращаться к этим параметрам, поэтому нет необходимости выделять буфер, и что вы также можете избежать кода обработки ошибок в своей программе (уменьшите шансы segfault:)).


1 Thanatos [2010-08-24 10:12:00]

Некоторая обратная связь по сегменту кода, хотя по большей части, должна работать.

  • int main — стандарт определяет main как возвращающий int .
  • c и args обычно называются argc и argv с уважением, но вам разрешено называть их чем-либо
  • Здесь у вас переполнение буфера: если args[1] длиннее 50 байтов, buffer не сможет его удержать, и вы будете записывать в память, которую вы не должны. Нет причин, по которым я могу посмотреть, чтобы скопировать буфер здесь, чтобы вы могли обойти эти проблемы, просто не используя strcpy .

Если это возвращает NULL , это может быть по нескольким причинам:

  • Каталог не существует. (Вы набрали его правильно? Имел ли он пробел в нем, и вы набрали ./your_program my directory , что не получится, потому что он пытается opendir(«my») )
  • Вам не хватает разрешений для каталога
  • Недостаточно памяти. (Это маловероятно.)

0 Vijay S B [2020-07-25 12:17:00]

Вот простой способ реализовать команду ls , используя c . Для запуска используйте, например, ./xls /tmp

opendir

opendir — Открыть каталог

Описание

Возвращает дескриптор каталога для последующего использования с функциями closedir() , readdir() и rewinddir() .

Если путь не существует или каталог, расположенный по указанному пути, не может быть открыт вследствие правовых ограничений или ошибок файловой системы, функция opendir() возвращает значение FALSE и генерирует сообщение PHP об ошибке уровня E_WARNING. Вы можете запретить вывод сообщения об ошибке, предварив имя функции opendir() символом ‘@’.

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

// Открыть заведомо существующий каталог и начать считывать его содержимое
if ( is_dir ( $dir )) <
if ( $dh = opendir ( $dir )) <
while (( $file = readdir ( $dh )) !== false ) <
print «Файл: $file : тип: » . filetype ( $dir . $file ) . «\n» ;
>
closedir ( $dh );
>
>
?>

Начиная с версии PHP 4.3.0, параметр путь может также являться любым URL’ом, обращение к которому приводит к получению списка его файлов и каталогов. Однако, данный способ работает только при использовании url-упаковщика file://. В версии PHP 5.0.0 была добавлена поддержка url-упаковщика ftp://.

См.также описания функций is_dir() , readdir() и класса Dir

НОВОСТИ ФОРУМА
Рыцари теории эфира
01.10.2020 — 05:20: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]69vJGqDENq4[/Youtube][/center]
[center]14:36[/center]
Osievskii Global News
29 сент. Отправлено 05:20, 01.10.2020 г.’ target=_top>Просвещение от Вячеслава Осиевского — Карим_Хайдаров.
30.09.2020 — 12:51: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Ok]376309070[/Ok][/center]
[center]11:03[/center] Отправлено 12:51, 30.09.2020 г.’ target=_top>Просвещение от Дэйвида Дюка — Карим_Хайдаров.
30.09.2020 — 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ — Upbringing, Inlightening, Education ->
[center][Youtube]VVQv1EzDTtY[/Youtube][/center]
[center]10:43[/center]

интервью Раввина Борода https://cursorinfo.co.il/all-news/rav.
мой телеграмм https://t.me/peshekhonovandrei
мой твиттер https://twitter.com/Andrey54708595
мой инстаграм https://www.instagram.com/andreipeshekhonow/

[b]Мой комментарий:
Андрей спрашивает: Краснодарская синагога — это что, военный объект?
— Да, военный, потому что имеет разрешение от Росатома на манипуляции с радиоактивными веществами, а также иными веществами, опасными в отношении массового поражения. Именно это было выявлено группой краснодарцев во главе с Мариной Мелиховой.


[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

[center][Youtube]CLegyQkMkyw[/Youtube][/center]
[center]10:22 [/center]

Доминико Риккарди: Россию ждёт страшное будущее (хотелки ЦРУ):
https://tainy.net/22686-predskazaniya-dominika-rikardi-o-budushhem-rossii-sdelannye-v-2000-godu.html

Завещание Алена Даллеса / Разработка ЦРУ (запрещено к ознакомлению Роскомнадзором = Жид-над-рус-надзором)
http://av-inf.blogspot.com/2013/12/dalles.html

[center][b]Сон разума народа России [/center]

Создание сайта на WordPress

Что как и почему в WordPress

Чтение файлов и каталогов в php-сценарии

Сначала — выбор пути к файлу или каталогу, затем — чтение из каталога и/или чтение из файла.

Путь к файлу

Абсолютный путь — это полный путь к файлу от корневого каталога (папки) в файловой системе.

В то время как абсолютный путь к файлу в Windows начинается с имени диска (например, «C:/www/html/file.html»), абсолютный путь к файлу страницы с веб-адресом //mysite.ru/file1.php, которая находится на Unix-сервере (Apache), имеет вид

где userlogin — логин пользователя на сервере.

Слеш (/) обозначает корневой каталог.

Путь к каталогу, который является корневым для веб-сайта, задается в кофигурации сервера и содержится в системной php-переменной

В данном случае это «»/home/userlogin/public_html/mysite.ru«».

«/myplugin/file2.php» полный путь от корня сайта (адрес соответствующей веб-страницы — «//site.ru//myplugin/file2.php»)

Это значит, что в ссылках на локальные страницы сайта можно указывать только путь от корня сайта (без протокола и домена) «/myplugin/file2.php».
Относительный путь — это путь относительно документа, в котором используется ссылка на файл.

Например, пусть в папке сайта «myplugin» есть файл file2.php и папка «images», в которой находится файл «image1.jpg». Путь к файлу изображения из файла file2.php: «images/image1.jpg».


Но если в начале этого пути добавить слеш (/) , т.е. написать «/images/image1.jpg», это будет путь к другому файлу, который находится в другой папке «images» в корне сайта mysite.ru (см. рисунок).

Чтобы подняться на директорию вверх, нужно написать»../».

Например, в файле file2.php можно указать на файл файл file1.php (в корневой папке сайта) как на файл в родительском каталоге «../file1.php» или в корневом каталоге «/file1.php».

«/tmp/file.html» полный путь от корня сайта (соответствующий веб-адрес «//site.ru//tmp/file.html»)
«tmp/data/» путь относительно текущего каталога («tmp» — это подкаталог текущего каталога, а «data» — подкаталог каталога «tmp»)
«./images/» подкаталог текущего каталога
«file.php» файл в текущем каталоге
«./file.php» файл в текущем каталоге
«../» родительский каталог
«../file.php» файл в родительском каталоге
«../../file.php» файл в каталоге, который на два уровня выше текущего каталога

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

bool file_exists(string $name) проверяет, существование файла или каталога с заданным именем
if ( !file_exists(«file.txt») ) exit(«Файл не существует»);
string basename(string $path) возвращает имя файла из полного пути (т.е. имя файла без пути)
string dirname(string $path) возвращает имя каталога из полного пути; для текущего файла: dirname(__FILE__)
array pathinfo (string path [, int options]) возвращает ассоциативный массив, который содержит элементы пути path: dirname, basename и extension.
options позволяет задать, какие элементы будут возвращены: PATHINFO_DIRNAME, PATHINFO_BASENAME и PATHINFO_EXTENSION.
string realpath(string $path) преобразует относительный путь в абсолютный, например, в сценарии, расположенном в корневой папке:
echo realpath(«file1.php»); // выведет /home/userlogin/public_html/mysite.ru/file1.php
string tempname(string $dir, string $prefix) генерирует (уникальное) имя временного файла
is_readable($path) проверяет возможность чтения файла или каталога***
bool is_dir(string $path) возвращает TRUE, если $path — это путь к существующему каталогу ***.
bool is_file ( string $path ) возвращает TRUE, если $path — это путь к существующему файлу (результат кэшируется***).
string getcwd (void) возвращает текущий каталог (например, «/home/userlogin/public_html/mysite.ru/myplugin»)
int chdir( string $dir ) изменяет текущий каталог (переходит в заданный каталог)
boolean chroot (string $path) изменяет корневой каталог

*** Результаты функций, возвращающих информацио о состоянии файлов, кэшируются. Это функции stat(), lstat(), file_exists(), is_writable(), is_readable(), is_executable(), is_file(), is_dir(), is_link(), filectime(), fileatime(), filemtime(), fileinode(), filegroup(), fileowner(), filesize(), filetype() и fileperms().
Если во время выполнения php-скрипта состояние файла может изменяться, и это нужно проверять, следует очищать кэш. Это делает функция clearstatcache();

Чтение каталога

Если прочитать все элементы внутри каталога, в списке результатов окажутся элементы «.» (текущий каталог) и «..» (родительский каталог) , что следует учитывать при обработке прочитанных элементов каталога.

resourse opendir (string $path) открывает каталог, например, текущий каталог можно открыть так:
opendir(‘.’);
string readdir (resource $handle) Возвращает имя следующего по порядку элемента каталога, для которого создан дескриптор $handle (порядок следования элементов зависит от файловой системы).
void rewinddir (resource $handle) сбрасывает дескриптор каталога $handle (чтобы он указывал на начало каталога)
void closedir ($handle) закрывает каталог

Чтение каталога без создания дискриптора:

array scandir (string $path [, int order]) возвращает массив файлов и каталогов из заданного каталога, ессли каталог не найден, возвращает FALSE и генерирует сообщение об ошибке уровня E_WARNING.
По умолчанию элементы сортируются в алфавитном порядке, а если необязательный параметр order равен 1, — по убыванию.
array glob ( string pattern [, int flags] ) возвращает массив файлов и каталогов, пути к которым соответствуют заданному шаблону pattern, а в случае ошибки возвращает FALSE.
флаги:
GLOB_MARK — добавляет слеш к каждому возвращаемому пути
GLOB_NOSORT — возвращает файлы без сортировки
GLOB_NOCHECK — возвращает шаблон , если не был найден ни один файл.
GLOB_NOESCAPE — обратные слеши не экранируют метасимволы
GLOB_BRACE — раскрывает для совпадения с ‘a’, ‘b’ или ‘c’
GLOB_ONLYDIR — возвращает только катологи

Все файлы с расширением «.txt» из папки «texts» в корневой папке сайта:

Продолжение — о чтении данных из файла — в следующей статье, которая называется
«Чтение файлов и каталогов в php-сценарии, продолжение: файлы».

Чтение файлов и каталогов в php-сценарии : 1 комментарий

Да есть плагин Wp-editor для этих целей. Весьма функциональный.

fdopendir(3) — Linux man page

opendir, fdopendir — open a directory

Synopsis

Description

The opendir() function opens a directory stream corresponding to the directory name, and returns a pointer to the directory stream. The stream is positioned at the first entry in the directory.

The fdopendir() function is like opendir(), but returns a directory stream for the directory referred to by the open file descriptor fd. After a successful call to fdopendir(), fd is used internally by the implementation, and should not otherwise be used by the application.


Return Value

The opendir() and fdopendir() functions return a pointer to the directory stream. On error, NULL is returned, and errno is set appropriately.

Errors

fd is not a valid file descriptor opened for reading.

Too many file descriptors in use by process.

Too many files are currently open in the system.

Directory does not exist, or name is an empty string.

Insufficient memory to complete the operation. ENOTDIR name is not a directory.

Versions

fdopendir() is available in glibc since version 2.4.

Conforming To

opendir() is present on SVr4, 4.3BSD, and specified in POSIX.1-2001. fdopendir() is specified in POSIX.1-2008.

Notes

The underlying file descriptor of the directory stream can be obtained using dirfd(3).

The opendir() function sets the close-on-exec flag for the file descriptor underlying the DIR *. The fdopendir() function leaves the setting of the close-on-exec flag unchanged for the file descriptor, fd. POSIX.1-200x leaves it unspecified whether a successful call to fdopendir() will set the close-on-exec flag for the file descriptor, fd.

Open directory using C

I am accepting the path through command line input.

it doesn’ t enter the loop. i.e dir==null .

How do I pass the command line input to dir pointer?

4 Answers 4

You should really post your code, but here goes. Start with:

You need to check in your case that args[1] is both set and refers to an actual directory. When this is run with:

( tmp is a subdirectory off my current directory but you can use any valid directory), I get:


Note that you have to pass a directory in, not a file. When I execute:

because that’s a file rather than a directory (if you’re sneaky, you can attempt to use diropen(dirname(v[1])) if the initial diropen fails).

Some feedback on the segment of code, though for the most part, it should work.

  • int main — the standard defines main as returning an int .
  • c and args are typically named argc and argv , respectfully, but you are allowed to name them anything
  • You have a buffer overflow here: If args[1] is longer than 50 bytes, buffer will not be able to hold it, and you will write to memory that you shouldn’t. There’s no reason I can see to copy the buffer here, so you can sidestep these issues by just not using strcpy .

If this returning NULL , it can be for a few reasons:

  • The directory didn’t exist. (Did you type it right? Did it have a space in it, and you typed ./your_program my directory , which will fail, because it tries to opendir(«my») )
  • You lack permissions to the directory
  • There’s insufficient memory. (This is unlikely.)

Я не могу открыть каталог, используя php opendir

У меня есть код, как показано ниже:

и я не понимаю, почему?

Я считаю, что вы пытаетесь открыть серверную директорию. Если вы делаете это локально, это сработает — я вижу, что вы получаете каталог с вашего ПК, но вместо этого вы пытаетесь выполнить скрипт на стороне клиента и получаете результат на стороне сервера.

Это означает, что если этот каталог не существует на вашем сервере, сервер не сможет найти файл — и вернет false.

В определенный момент вы должны проверить, существует ли каталог на вашем сервере.

Если оба из этих двух перекрестных ссылок, они вернутся к false.

Работа с файлами

Для установки текущего каталога применяется функция chdir:

Работать с этой функцией можно следующим образом:

  • chdir («/tmp/data» ); // переход по абсолютному пути
  • chdir («./js» ); // переход в подкаталог текущего каталога
  • chdir («..» ); // переход в родительский каталог
  • chdir

/data» ); // переходим в /home/пользователь/data (для Unix)


Чтобы узнать текущий каталог можно воспользоваться функцией getcwd:

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

После того, как каталог открыт, прочитать его можно функцией readdir:

Эта функция возвращает имена элементов, содержащихся в каталоге. Кроме файлов и папок в каталогах находятся также элементы «.» и «..». Первый элемент указывает на текущий каталог, а второй — на родительский. Текущий каталог, кстати, можно открыть, указав его имя как «.»:

После того, как работа с каталогом закончена, его нужно закрыть. Закрытие каталога выполняется при помощи функции closedir:

Ниже приведен пример, осуществляющий чтение и вывод файлов, находящихся в текущем каталоге.

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

В качестве примера на рассмотренные функции, давайте создадим скрипт, удаляющий все файлы из каталога c:/temp, к которым не было доступа в течение суток. Функция удаления файлов в этом случае вызывается рекурсивно.

Создание каталогов производится с помощью функции mkdir:

Эта функция создает каталог с именем dirname и правами доступа mode. В случае неудачи возвращает false. Права доступа задаются только для каталогов UNIX, поскольку в Windows этот аргумент игнорируется. Ниже приведен пример создания каталога test в директории c:/temp.

Удалить каталог можно с помощью функции rmdir:

Теперь удалим только что созданный каталог /test:

Функция rmdir удаляет только пустые каталоги. Для того чтобы удалять непустые каталоги, давайте напишем функцию и удалим каталог c:/temp со всеми вложенными папками и файлами:

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

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Функция Opendir

Функция Opendir открывает дескриптор каталога.
Функция Opendir открывает дескриптор каталога для последующего использования с функциями Closedir, Readdir и Rewinddir.

В параметре Path указывается путь к открываемому каталогу.

Параметр Context являет собой ресурс контекста.

Функция Opendir возвращает дескриптор каталога (resource) в случае успеха или FALSE в случае ошибки.

Если Path не существует или каталог, расположенный по указанному пути, не может быть открыт вследствие правовых ограничений или ошибок файловой системы, функция Opendir вернет значение FALSE и сгенерирует сообщение PHP об ошибке уровня E_WARNING.

Илон Маск рекомендует:  Использование слоев
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL