0

converterShell クラスがあり、コントローラーから呼び出す必要があります。コマンドはビデオを変換します。cmdからテストしたところ、うまくいきましたが、ファイルがアップロードフォルダーに移動された後に呼び出す必要があります。関数に「呼び出し」を付けて、フィルムがすでに移動しているときに呼び出すことを考えました。しかし、問題はシェル クラスを呼び出すことです。コードは次のとおりです。

    class ConverterShell extends AppShell {
    public function main() {
        shell_exec('cd webroot\files\ && ffmpeg -i ' .fonte. 'whatever.wmv ' .destino. 'BLABLABLA.mp4');
    }

ああ、そして

    public function arquivos() {
        $this->autoRender = false;

        $name = $this->request->params['form']['upload']['name'];
        $type = $this->request->params['form']['upload']['type'];
        $tmp_name = $this->request->params['form']['upload']['tmp_name'];
        $error = $this->request->params['form']['upload']['error'];
        $size = $this->request->params['form']['upload']['size'];

        $path_parts = pathinfo($name);
        $formato = ($path_parts['extension']);
        $nome = ($path_parts['filename']);          

        $tamanho = ((($size)/1024)/1024);
        $tamanho_mb = number_format($tamanho, 2, '.', '');
        $string = $name;

        echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);
        if(!$error) {
            if(move_uploaded_file($tmp_name, WEBROOT_FOLDER . 'files/uploads/' . $name)) {
                $this->call function here();
                exit('OK!');
        } else {
            exit('Erro!');
        }
    }
}
4

1 に答える 1

1

コンソールとアプリケーション ロジックを混在させるという考えは却下し、分離する必要があります。代わりに、単純にコンバーター機能をライブラリ クラスに配置し、それをコントローラーとシェルで利用することができます。

このようなもの (テストされていない CakePHP 2.x サンプルコード):

/app/lib/Converter.php

class Converter {
    static public function convert($source, $destination) {
        $source = escapeshellarg(fonte . $source);
        $destination = escapeshellarg(destino . $destination);

        shell_exec('cd webroot\files\ && ffmpeg -i ' . $source . ' ' . $destination);
    }
}

/app/Console/Command/ConverterShell.php

App::uses('Converter', 'Lib');

class ConverterShell extends AppShell {
    public function main() {
        Converter::convert('whatever.wmv', 'BLABLABLA.mp4');
    }
}

/app/Controller/WhateverController.php

App::uses('Converter', 'Lib');

class WhateverController extends AppController {

    ...

    public function arquivos() {
        ...

        if(!$error) {
            if(move_uploaded_file($tmp_name, WEBROOT_FOLDER . 'files/uploads/' . $name)) {
                Converter::convert($name, $nome . '.mp4');
                exit('OK!');
            } else {
                exit('Erro!');
            }
        }
    }
}
于 2013-10-18T09:47:53.040 に答える