Search code examples
phpcutycapt

CutyCapt with php exec


I'am using CutyCapt on my CentOS. It works fine via terminal but it doesn't work via php exec function. I've started xvfb by command in terminal:

Xvfb :99 -screen 0 1024x768x24

And I'am trying to do a screenshot by php script:

exec("DISPLAY=:99 /path/to/cutycapt --url=<some url> --out=<path/to/output>");

It doesn't show any errors but there is no output file (output directory has chmod 777) Can somebody help me?

Thanks

UPD: Maybe it is better somehow to allow executing of Xvfb by Apache?


Solution

  • I've managed to get CutyCapt to run successfully using the php at the end. The $_parameters are passed via AJAX to the php script. Hope this helps...

     case 'Output_Chart': {
    
        // We always create the .png.  We use the  ImageMagick convert (IMC) command to make .pdfs
        if ($_Suffix == 'pdf') {
           $IMC = ";convert -page 735x850 '$_PathOut/$_ChartName.png' '$_PathOut/$_ChartName.pdf'";
        } else {
           $IMC = '';
        }
    
        // Prepare the query string for the CutyCapt URL
        $sQuery_Pattern   = '?Path=%s&iDL=%d';
        $sQuery           = sprintf($sQuery_Pattern, $_Path, $_iDL);
    
        // Prepare CutyCapt's command and parameters (NB: query string and out parameter are enclosed in aposts for the shell)
        $sCC_Cmd          = '/var/www/LF/Includes/CutyCapt';
        $sCC_URL          = "http://localhost/LF/LFPrint.html'$sQuery'";     // Note: Inner apostrophes
        $sCC_Out          = "'$_PathOut/$_ChartName.png'";
        $sCC_Pattern      = ' --url=%s --out=%s --delay=%d --min-width=%d';
        $sCC_Options      = sprintf($sCC_Pattern, $sCC_URL, $sCC_Out, $_Delay, $_MinWidth);
        //$sCC_CmdLine         = $sCC_Cmd . $sCC_Options . " 2> CutyCapt.err.txt";
        $sCC_CmdLine         = $sCC_Cmd . $sCC_Options . " 2> /dev/null";
    
        // Prepare the final command line with xvfb-run, CutyCapt, and the URL?QueryString
        $sCC_CmdLine = 'xvfb-run --auto-servernum --server-args="-screen 0, 800x1000x24" ' . $sCC_CmdLine . $IMC;
        exec( $sCC_CmdLine, $aOutput = array(), $ret);
        // Wait for and then return the results.  sCC_CmdLine and aOutput are just for debugging
        echo json_encode(array("ret" => $ret, "cmd" => $sCC_CmdLine, "Output" => $aOutput));
        break;
     }