@skajtersen

Как сделать загрузку файла из консоли?

Имеется контроллер для обработки файла.

public function actionIndex()
    {
        $model = new Logs();
        $filename = new UploadHistory();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstance($model, 'file');
            if ($model->file && $model->validate()) {
                $model->file->saveAs($model->file);
                $filename->filename = $model->file->name;
                $filename->save();
                $path = $filename->filename_id;
                $rows = $model->indexFile($model->file);
                $model->logUpload($rows, $path);
            }
        }

        return $this->render('index', ['model' => $model]);
    }


Как правильно переписать его в папку /commands для вызова этой команды из командной строки. То есть интересует как передать файл в таком случае.
  • Вопрос задан
  • 229 просмотров
Пригласить эксперта
Ответы на вопрос 4
Интересно для чего вам нужно передавать файл скрипту из консоли?)
Ответ написан
Комментировать
Recosh
@Recosh
Программист студент
Если требуется передать именно тело файла, то упакуйте его в base64 например и пихните как параметр. А в php спарсить параметр и перевести его в файловый поток.
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
Стандартными средствами это сделать не получиться и соответственно использовать код который Вы привели - тоже не выйдет. Поэтому Вам необходимо написать собственный класс для загрузки файлов (аля UploadedFile) реализовывающий необходимый Вам функционал
Ответ написан
@MadridianFox
Web-программист, многостаночник
Т.к. вы вызываете команду из консоли, то очевидно что файл уже должен лежать на сервере.
Вызывая команду мы можем просто передать ей путь до файла, и далее, имея этот путь мы можем открыть файл и что-то с ним делать с помощью стандартных функций (ну или завернуть в какой-нибудь удобный объект).
public function actionIndex($filepath){
   $filename = end(explode('/',$filepath));

   $file_handler = fopen($filepath); // далее используем дескриптор файла для чтения/записи
   // или
   $file_content_string = file_get_contents($filepath); // сразу читаем содержимое в строку
}

Вызывать это дело надо так: php yii MyCommand /path/to/file
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы