在PHP中执行console命令

时间:2013-05-10 20:51:33

标签: php console phantomjs

我正在尝试在用户单击“导出PDF”按钮时执行控制台命令。我正在使用Phantom JS生成PDF输出。

如果我在命令提示符下运行以下命令,则一切正常:

phantomjs.exe generate_pdf.js http://hidden_link.com/view_printable_proposal/CPpktzdnbwDB test.pdf

因此,我在我的控制器中创建了一个函数,当您单击“导出PDF”按钮时,它将转到该函数:

<a href="<?= base_url().'create_pdf/'.$hash ?>"><button type="button" class="btn" style="width: 100%;">Export as PDF</button></a>

我的全部功能:

public function create_pdf($hash = false)
{

    $output = 'phantomjs.exe generate_pdf.js http://hidden_link.com/view_printable_proposal/CPpktzdnbwDB test.pdf';
    shell_exec($output);
}

正如您所知,我从未尝试过以任何语言执行控制台命令。我甚至关闭了吗?

谢谢!

PS:如果您不确定它在做什么,为了让您对该控制台命令有所了解 - 第一位,phantomjs.exe正在调用.exe应用程序,那么“generate_pdf”是一个javascript文件,位于同一目录中.exe app。第3项是我想要变成PDF的东西的链接。最终的“test.pdf”就是在导出PDF后简单命名的内容。同样,一切都通过命令提示完美地运行到我试图运行的命令。

顺便说一下,目前当我点击按钮时,我只是转到白页,没有任何反应。

4 个答案:

答案 0 :(得分:0)

我不确定这是否涉及远程,但是如果您可以验证您是否正在执行您的功能,并且shell_exec正在尝试执行,您可能需要验证您的Web服务器的用户的PATH中是否可以使用phantomjs.exe。查看这是否是一个问题的最简单方法可能就是使用可执行文件的完整路径。

答案 1 :(得分:0)

无法通过服务器用户www-data之类的非root用户直接访问Phantomjs,因为它会给出Permission denied错误。要通过php文件运行它,您需要做一个解决方法。完整的解决方案在http://cisight.com/run-latest-phantomjs-with-shell_exec-php-on-ubuntu-11-10-oneiric/

答案 2 :(得分:0)

这可能是一个解决方案:http://php.net/manual/en/book.pdf.php 不使用某些外部应用程序,请使用PECL扩展。如果您的主机尚未安装扩展程序,则可能会出现问题。但话又说回来,您正在尝试执行一些shell命令,因此您可能需要对Web服务器进行必要的控制。

答案 3 :(得分:0)

昨天有这个工作,这是答案:

public function create_pdf($hash = false)
{
    $this->load->helper('download');

    $output ="";
    $return_val = 0;
    //echo APPPATH;

    $path_to_js = APPPATH.'/libraries/generate_pdf.js';

    $base_url = $this->config->item("base_url");

    $tmp_location = $this->config->item("tmp_location");

    $output_path = $tmp_location."/".$hash.'.pdf';

    $command = $this->config->item('phantomjs_path').' '.$path_to_js.' '.$base_url.'view_printable_proposal/'.$hash.' '.$output_path;
//  $command = '/usr/bin/ls /';

    exec($command, $output, $return_val);

    if($return_val) {
        echo "Error";
        echo $return_val;
        echo json_encode($output);
    }
    else {
            $data = file_get_contents($output_path);
            force_download($hash.".pdf", $data);
            unlink($output_path);
    }
}