Файлы и папки доменов

Чтобы управлять файлами и папками в пределах домена, используйте класс pm_FileManager. Этот класс позволяет создавать и удалять файлы и папки, проверять наличие файлов и папок, читать и записывать данные в файлы, а также изменять права файлов и папок (только в Linux).

Важно. Из соображений безопасности мы настоятельно не рекомендуем вам использовать системные вызовы, такие как fopen или file_get_contents, в коде вашего расширения. Когда вы используете такие вызовы, расширение работает с файлами от имени пользователя psaadm. Если же вы используете класс pm_FileManager, действия выполняются от имени системного пользователя владельца домена.

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

scanDir() – возвращает список файлов и папок внутри папки по указанному пути.

Использование
array scanDir(string $path [, bool $skipDots = false [, bool $showSystemFiles = true ]])
Параметры
  • path (тип: string)

    Папка, которая будет просканирована.

  • skipDots (тип: boolean, значение по умолчанию: false)

    Если для необязательного параметра skipDots задано значение "true", корневые папки ".." и "." будут исключены из результирующего массива, иначе они будут включены в него.

  • showSystemFiles (тип: boolean, значение по умолчанию: true)

    Если для необязательного параметра showSystemFiles задано значение "true", скрытые файлы (например, системные файлы) будут включены в результирующий массив, иначе они будут отсутствовать в нем.

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

Возвращает массив, состоящий из файлов и папок в сканируемой папке.

Примеры

Дерево папок

$ ls -a var
. .. config.json .gitkeep

Пример

$result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir()); // Использование по умолчанию
// аналог:
// $result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir(), false, true);
var_dump($result);

Вывод

array(4) {
 [0]=>
 string(1) "."
 [1]=>
 string(2) ".."
 [2]=>
 string(11) "config.json"
 [3]=>
 string(8) ".gitkeep"
}

Пример

$result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir(), true);
// аналог:
// $result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir(), true, true);
var_dump($result);

Вывод

array(2) {
 [0]=>
 string(11) "config.json"
 [1]=>
 string(8) ".gitkeep"
}

Пример

$result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir(), false, false);
var_dump($result);

Вывод

array(3) {
 [0]=>
 string(1) "."
 [1]=>
 string(2) ".."
 [2]=>
 string(11) "config.json"
}

Пример

$result = (new \pm_FileManager())->scanDir(\pm_Context::getVarDir(), true, false);
var_dump($result);

Вывод

array(1) {
 [0]=>
 string(11) "config.json"
}

joinPath() – возвращает объединенные части пути.

Использование
string joinPath(string ...$pathParts)
Параметры
  • pathParts (тип: string, можно указать одно или больше значений)
Возвращаемые значения

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

Пример
$result = (new \pm_FileManager())->joinPath('var', 'config', 'config.json');
var_dump($result);

Вывод

string(22) "var/config/config.json"

isSubpath() – проверяет, является ли папка по указанному пути подпапкой корневой папки веб-пространства.

Использование
bool isSubpath(string $path)
Параметры
  • path (тип: string)
Возвращаемые значения

"True" – если папка находится внутри основной папки, иначе – "false".

Примеры

Пример

$result = (new \pm_FileManager())->isSubpath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result);

Вывод

bool(true)

Пример

// в предположении, что корневая папка веб-пространства – '/var/www/vhosts/a.a/'
$result1 = (new \pm_FileManager(1))->isSubpath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
$result2 = (new \pm_FileManager(1))->isSubpath('/var/www/vhosts/b.b/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result1);
var_dump($result2);

Вывод

bool(true)
bool(false)

getRelativeFilePath() – возвращает путь относительно корневой папки веб-пространства для указанного абсолютного пути.

Использование
string getRelativeFilePath(string $path)
Параметры
  • path (тип: string, абсолютный путь)
Возвращаемые значения

Относительный путь в корневой папке.

Примеры

Пример

$result = (new \pm_FileManager())->getRelativeFilePath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result);

Вывод

string(47) "var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds"

Пример

// в предположении, что корневая папка веб-пространства – '/var/www/vhosts/a.a/'
$result1 = (new \pm_FileManager(1))->getRelativeFilePath('/var/www/vhosts/a.a/httpdocs/qwe/qwe/ddd/wqecfds');
$result2 = (new \pm_FileManager(1))->getRelativeFilePath('/var/www/vhosts/b.b/httpdocs/qwe/qwe/ddd/wqecfds');
var_dump($result1);
var_dump($result2);

Вывод

string(28) "httpdocs/qwe/qwe/ddd/wqecfds"
string(35) "../b.b/httpdocs/qwe/qwe/ddd/wqecfds"

copyFile() – копирует объекты файловой системы (файлы и папки) из исходной папки в целевую. Папки копируются рекурсивно.

Использование
copyFile(string $source, string $destination)
Параметры
  • source (тип: string, полный путь к исходной папке)
  • destination (тип: string, полный путь к целевой папке)
Пример
(new \pm_FileManager())->copyFile('/tmp/source', '/tmp/destination');

Ниже приводится пример работы с файлами домена. В этом примере выполняются некоторые действия с содержимым файла. Используются следующие методы:

Используйте следующий код:

$fileManager = new pm_FileManager($domainId);
 $filePath = $fileManager->getFilePath("$currentDir/$file");
 if ($fileManager->fileExists($filePath)) {
 $fileData = $fileManager->fileGetContents($filePath);
 // Некоторые действия с данными файла...
 $fileData = str_replace('foo', 'bar', $fileData);
 
 $fileManager->filePutContents($filePath, $fileData);
 }

Здесь $filePath – абсолютный путь. Он получен из относительного пути в папке домена $currentDir с помощью вызова метода getFilePath().

 

Leave your feedback on this topic here

If you have questions or need support, please visit the Plesk forum or contact your hosting provider.
The comments below are for feedback on the documentation only. No timely answers or help will be provided.