png() or jpeg() in a php script

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

png() or jpeg() in a php script

Angel Roman
Hello,

I've got a problem with a PHP script, in which I call the system function
(to call another processes). The call is :

system("R --slave --vanilla < path/to/source/source.R");

if in this R file, I've got the lines:
  pdf(file="/path/to/file/file.pdf")
  commands
  dev.off()

the pdf file is perfectly created

but if I change the lines to:

  png(file="/path/to/file/file.png");
  commands
  dev.off()

(or with the jpeg() function)

the files are not created. any help?

Thanks

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: png() or jpeg() in a php script

Prof Brian Ripley
This is covered (in at least three places) on the help page for those
functions.

> PLEASE do read the posting guide!
http://www.R-project.org/posting-guide.html

and do as we ask (including reporting your system, reading help pages and
not sending HTML mail).

On Wed, 21 Jun 2006, Angel Roman wrote:

> Hello,
>
> I've got a problem with a PHP script, in which I call the system function
> (to call another processes). The call is :
>
> system("R --slave --vanilla < path/to/source/source.R");
>
> if in this R file, I've got the lines:
>  pdf(file="/path/to/file/file.pdf")
>  commands
>  dev.off()
>
> the pdf file is perfectly created
>
> but if I change the lines to:
>
>  png(file="/path/to/file/file.png");
>  commands
>  dev.off()
>
> (or with the jpeg() function)
>
> the files are not created. any help?
>
> Thanks
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

--
Brian D. Ripley,                  [hidden email]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: png() or jpeg() in a php script

Dieter Menne
In reply to this post by Angel Roman
Angel Roman <aroman6 <at> gmail.com> writes:

> I've got a problem with a PHP script, in which I call the system function
> (to call another processes). The call is :
>
> system("R --slave --vanilla < path/to/source/source.R");
...


> but if I change the lines to:
>
>   png(file="/path/to/file/file.png");
>   commands
>   dev.off()
>
> (or with the jpeg() function)
>
> the files are not created. any help?

Try the following in your script to find out if you can create jpeg on your
operation system.

sink("cap.txt")
capabilities()
sink()


Dieter

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Reply | Threaded
Open this post in threaded view
|

Re: png() or jpeg() in a php script

esmetaman
In reply to this post by Angel Roman
Hi, I have created a OOP version of R_PHP Project, developed by Steve Chen,
you can download the php script, here:
http://www.juanantonio.info/p_research/statistics/r/rphp/RClass.1.0.zip 

<?php
class R{

        //Configuration Variables
        var $temp_dir;
        var $R_path;
        var $R_options_1;
        var $R_options_2;
        var $graphic;
        var $bannedCommandConfigFile;
        var $RCODE;
        var $Rerror;

        //Constructor de clase
        function __construct(){
                $this -> temp_dir = "tmp";
                $this -> R_path = "c:/R-2.3.0/bin/Rterm.exe";
                $this -> R_options_1 = "--quiet --no-restore --no-save  < ";
                $this -> R_options_2 = " > ";
                $this -> graphic = "jpeg";
                $this -> bannedCommandConfigFile = "security.txt";
        }

        //Metodo para establecer valores en propiedades
        function setProp($PropName, $PropValue){
                $this->$PropName = $PropValue;
        }

        //Funcion que comprueba el fichero de configuracion
        function checkBCCFile(){
               
                $lines = file($this -> bannedCommandConfigFile);
                //$lines = file("security.txt");
                $total = count($lines);

                $j = 0;
                for ($i=0;$i < $total;$i++){
  $line = trim($lines[$i]);

                        if (!strrchr($line,"#")){
    $j = $j + 1;
                                if (strrchr($line,"|")){
      $terms = explode("|",$line);
      $bad_0 = trim($terms[0]);
      $bad_op = trim($terms[1]);
                                        $bad_cmd[$j]= $bad_0;
                                        $bad_option[$bad_0] = $bad_op;
                                }else{
                                        $bad_cmd[$j]= $line;
  }
                        }else{
    continue;
                        }
                }
               
                echo("Comprobando el fichero de configuracion<br />");
        }//End Function
       
        //Funcion que comprueba cada linea del codigo R dado, por si emplea un  
commando prohibido.
        function check_bad($text,$j){
                global $bad_cmd,$bad_option;
                $is_bad = 0;

                foreach($bad_cmd as $bad){
                        $bad1 = str_replace(".","\.",$bad);

                        if(ereg($bad1,$text)){
      if(strrchr($bad,".") && (strlen($bad) > 3)){
        $is_bad = 1;
      }else{
                                // get remaining string after targer key word
                                $terms = explode($bad,$text);
                                // get rid of spaces before a possible following "("
                                $term1 = ltrim($terms[1]);
                       
                                if($bad_option[$bad] != ""){
                                                if(eregi($bad_option[$bad],$term1)){
                                                        // if (strstr($term1,$bad_option[$bad]))
                                      $is_bad = 1;
                                                }
                                }else{
                                                if(substr($term1,0,1) == "("){
                                                        $is_bad = 1;
                                                }
                                }
      }

                                if($is_bad == 1){
                                        if ($bad_option[$bad] != ""){
                                                echo "<font color=red>$bad</font> function";
                                                echo " with <font color=red>".$bad_option[$bad]."</font>";
                                                echo " option is NOT permitted ";
                          }else{
                                                echo "<font color=red>$bad</font> function is NOT permitted ";
                                                echo "in Line <font color=red>$j</font><BR>";
                                                echo "<blockquote>$text</blockquote>";
                                                echo "Program Stopped!<BR>";
                                                exit;
                                        }
                                }
                  }
                }
        }//End function

        //Funcion que genera un nombre aleatorio a ficheros
        function random_str($size){
                $randoms = array(
               0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b,
               c, d, e, f, g, h, i, j, k, l, m, n,
               o, p, q, r, s, t, u, v, w, x, y, z
                );

                srand ((double) microtime() * 1000000);

                for($i = 1; $i <= $size; $i++){
                        $text .= $randoms[(rand(0,35))];
       }

                return $text;
        }//End function

        //Funcion que obtiene un nombre de fichero
        function get_file_name($text){
                // Unix   : bitmap(file="something.jpg")
                // Windows: jpeg(file="something.jpg")

                $temp1 = explode("file=\"",$text);
                $fname = explode("\"",$temp1[1]);

                return $fname[0];
        }//End function


        function createRInputFile($r_code){
       
                //Obtiene informacion sobre el codigo a ejecutar y lo parte en lineas
                $old_code = explode(chr(10),$r_code);
                $total = count($old_code);
                $new_code = "";
       
                for($i=0;$i < $total; $i++){
                        // replace original graphic file name with a random name
                        // Windows system if (ereg("jpeg",$old_code[$i]))

                        // if (ereg("bitmap",$old_code[$i]))

                        $j = $i+1;
                        $old = $old_code[$i];
                        //echo("Linea ".$i."codigo ".$old."<br />");
                       
                        //Mejorar esto
                        //Comprueba si emplea un codigo incorrecto.
                        //$this-> check_bad($old,$j);

                        if(ereg($this -> graphic,$old_code[$i])){
                          $gfile_name = $this-> get_file_name($old_code[$i]);
                          $gfile_name = $this-> random_str(4).$gfile_name;
                       
                          //$new_code .= "bitmap(file=\"$temp_dir/$gfile_name\") \n";
                                //$new_code .= "#ff;";
                               
                                $tmp = $this ->temp_dir;
                                $new_code .= $this ->graphic."(file=\"tmp/$gfile_name\") \n";
                        }else{
                                $new_code .= $old_code[$i]."\n";
                        }
                }
       
                //echo($new_code);
       
                $this -> r_name = $this-> random_str(10);
                $this -> r_input = $this-> temp_dir."/".$this -> r_name.".R";
                $this -> r_output = $this-> temp_dir."/".$this -> r_name.".Rout";
       
                $fp = fopen($this -> r_input,"w");
                fwrite($fp,$new_code);
                fclose($fp);
               
                echo("Fichero R generado <br />");
}

function execution(){

        try{
                // $rsoft = "/usr/local/lib/R/bin/R";
                $rsoft = $this-> R_path;
       
                // Unix :
                //    R BATCH --slave --no-save $r_input $r_output
                //
                // Windows :
                //    Rterm.exe --quiet --no-restore --no-save < test.R > test.Rout
               
                // $command = "$rsoft BATCH --slave --no-save $r_input $r_output";

                $command = $this-> R_path." ".$this -> R_options_1." ".$this -> r_input."
".$this -> R_options_2." ".$this -> r_output;
                //echo($command);
               
                $result = "";
                $error = "";
       
                $exec_result = exec($command,$result,$error);
               
                echo("R CONSOLE COMMAND: ".$command."<br />");
               
                /*
                if($error){
                        $this -> Rerror = true;
                }
                */
       
        }catch(Exception $e){
                echo "ERROR ". $e -> getCode() .
                "en la linea:" . $e -> getLine() .
                ":" . $e-> getMessage();
               
                $this -> Rerror = true;
        }
}

function showResultsRCode(){
        $lines = file($this -> r_output);
$total = count($lines);

if ($this -> Rerror){
 echo "<font color=red>Error: Something wrong! Please check output!</font>";
 echo "<HR>Output of R program : <P><HR>";

        for ($i=0;$i < $total;$i++){
    echo $lines[$i]."<BR>";
                exit;
        }
}

echo "Output of R program<HR>";

        $to_do_plot = 0;
       
        for ($i=0;$i < $total;$i++){

                $line = $lines[$i];
       
                // Unix   : if (ereg("bitmap",$line))
                // Windows: if (ereg("jpeg",$line))
       
                if (ereg($this-> graphic,$line)){
            echo $line."<BR>";
       
                        $gfile_name = $this -> get_file_name($line);
                        $to_do_plot = 1;
                        //echo "<P><IMG SRC=\"$file_name\"><P>";
                }else if (ereg("dev.off",$line)){
                        echo $line."<BR>";
       
                        if ($to_do_plot == 1){
                                echo "<P><IMG SRC=\"$gfile_name\"><P>";
                                $to_do_plot = 0;
                    }
                }else if (ereg("null device",$line)){
            continue;
                }else if (ereg("          1",$line)){
            continue;
                }else{
            echo $line."<BR>";
                }
        }
}//End function

function executeRCode($r_code){
       
        echo("SOURCE CODE: ".$r_code."<br />");
       
        $this -> checkBCCFile();
        $this -> createRInputFile($r_code);
        $this -> execution();
        $this -> showResultsRCode();
}//End function

}//End Class


?>

An example to show how to execute RClass.php:

<?php

require("RClass.php");

//Instancia de clase;
$rObject = new R();
$rObject -> executeRCode($r_code);


?>


I use jpeg in the script.

>
> Message: 90
> Date: Wed, 21 Jun 2006 11:46:27 +0200
> From: "Angel Roman" <[hidden email]>
> Subject: [R] png() or jpeg() in a php script
> To: [hidden email]
> Message-ID:
> <[hidden email]>
> Content-Type: text/plain
>
> Hello,
>
> I've got a problem with a PHP script, in which I call the system function
> (to call another processes). The call is :
>
> system("R --slave --vanilla < path/to/source/source.R");
>
> if in this R file, I've got the lines:
>   pdf(file="/path/to/file/file.pdf")
>   commands
>   dev.off()
>
> the pdf file is perfectly created
>
> but if I change the lines to:
>
>   png(file="/path/to/file/file.png");
>   commands
>   dev.off()
>
> (or with the jpeg() function)
>
> the files are not created. any help?
>
> Thanks
>
> [[alternative HTML version deleted]]
>
>  
>
> ------------------------------
>
> _______________________________________________
> [hidden email] mailing list  
> https://stat.ethz.ch/mailman/listinfo/r-help 
> PLEASE read the posting guide! http://www.R-project.org/posting-guide.html 
>
>
> End of R-help Digest, Vol 40, Issue 21
> **************************************
 


Juan Antonio BreƱa Moral.
Advanced Marketing Ph.D. , URJC, Spain (Now)
Industrial Organisation Engineering, ICAI, Spain.
Technical Computer Programming Engineering, ICAI, Spain
Web: http://www.juanantonio.info
Mobile: +34 655970320

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html