waFiles::create не создает файл, но создает папку Есть решение

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

waFiles::create('test.txt');
waFiles::create($path.'test.txt');
waFiles::create('test.txt', false);
waFiles::create($path.'test.txt', false);

Не создают файл. Ни в пути /wa-data/... , ни в корне сайта. Права выставлял 777, все равно отказывается.

Папки создаются везде без проблем.

8 ответов

  • 1
    Михаил Ушенин 4 октября 2016 15:32 # Решение

    Судя по коду этого метода (если не читать комментарий к нему), он не должен создавать файлы. А для чего вам нужно создавать пустые файлы? Обычно ведь файлы создаются с каким-то содержимым.

  • 1
    Eugen Nichikov 4 октября 2016 16:08 # Решение

    Если нужен пустой файл, можно использовать waFiles::write($path.'test.txt', '');

    Хотя это не отменяет тот факт, что в комментарии к waFiles::create написано, что он файлы создаёт :)

    • +2
      Михаил Ушенин Михаил Ушенин 4 октября 2016 16:10 #

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

      • +1
        Eugen Nichikov Eugen Nichikov 4 октября 2016 16:34 #

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

        $path = wa()->getConfig()->getPath('log');
        waFiles::create($path.'/shop/images_regenerate.log');
        waLog::log($message, 'shop/images_regenerate.log');

        Просто описание неправильное.

        • +1
          Михаил Ушенин Михаил Ушенин 4 октября 2016 16:43 #

          Да, описание метода поправим.

          А waLog::log() и сам умеет создавать недостающие поддиректории, так что можно обойтись последней строкой:

          waLog::log($message, 'shop/images_regenerate.log');

          В нём как раз и есть уже waFiles::create().

          • +1
            Eugen Nichikov Eugen Nichikov 4 октября 2016 16:49 #

            Просто первый попавшийся пример из кода SS :) Вот более очевидный

            $template_path = wa()->getAppPath('templates/layouts/'.ucfirst($layout).'.html', $app_id);
            waFiles::create($template_path);
            file_put_contents($template_path, $this->getHtml($app_id, $layout));

            Хотя тут на waFiles::write можно было заменить.

  • 1
    BNP (Дмитрий) 5 октября 2016 17:02 #

    Так а чем getDataPath не устраивает?

    Там же есть флаг создания файла.

    • +1
      BNP (Дмитрий) BNP (Дмитрий) 5 октября 2016 17:21 #

      А, сорри, увидел. Надо файл создать.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите