Использование оболочки с Zend Framework - PullRequest
0 голосов
/ 07 марта 2012

Мне любопытно, если у Zend есть компонент, который может использовать оболочку. Например, я хочу сделать команду оболочки следующим образом:

mysqldump --compact --uroot --ppass mydatabase mydable >test.sql

с контроллера.

Если нет, знаете ли вы, как выгрузить данные из таблиц в Zend Framework?

Обновление: Я нашел способ здесь http://www.zfsnippets.com/snippets/view/id/68

1 Ответ

1 голос
/ 08 марта 2012

В среде Zend нет прямой поддержки exec ().ближайший к поддержке командной строки класс Zend_Console, но он предназначен для получения аргументов из командной строки.

Я бы обернул функцию exec () как объект процесса и работал бы с этим.Вот хороший пример из документации php:

<?php
    // You may use status(), start(), and stop(). notice that start() method gets called automatically one time.
    $process = new Process('ls -al');

    // or if you got the pid, however here only the status() metod will work.
    $process = new Process();
    $process.setPid(my_pid);
?>

<?php
    // Then you can start/stop/ check status of the job.
    $process.stop();
    $process.start();
    if ($process.status()){
        echo "The process is currently running";
    }else{
        echo "The process is not running.";
    }
?>

<?php
/* An easy way to keep in track of external processes.
 * Ever wanted to execute a process in php, but you still wanted to have somewhat controll of the process ? Well.. This is a way of doing it.
 * @compability: Linux only. (Windows does not work).
 * @author: Peec
 */
class Process{
    private $pid;
    private $command;

    public function __construct($cl=false){
        if ($cl != false){
            $this->command = $cl;
            $this->runCom();
        }
    }
    private function runCom(){
        $command = 'nohup '.$this->command.' > /dev/null 2>&1 & echo $!';
        exec($command ,$op);
        $this->pid = (int)$op[0];
    }

    public function setPid($pid){
        $this->pid = $pid;
    }

    public function getPid(){
        return $this->pid;
    }

    public function status(){
        $command = 'ps -p '.$this->pid;
        exec($command,$op);
        if (!isset($op[1]))return false;
        else return true;
    }

    public function start(){
        if ($this->command != '')$this->runCom();
        else return true;
    }

    public function stop(){
        $command = 'kill '.$this->pid;
        exec($command);
        if ($this->status() == false)return true;
        else return false;
    }
}
?>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...