“How can I integrate PHP and R?”
I know I’m not the only one who’s asked this question. After all, with great content management systems like Drupal, it would very cool to be able to drop an R module into some PHP code and instantly have a web app popping out some snazzy looking ggplot graphics. After spending some time Google searching for an easy implementation and finding very little in the PHP + R space, I was able to piece together a method for integrating the two. It uses no JavaScript… no AJAX… just plain old PHP.
The poor man’s R web app
Disclaimer: There are many reasons why you shouldn’t actually stick the following code on the web for all to see. It is a very stripped down example, which is great for experimenting on a localhost, but has some serious security flaws.
This implementation of PHP and R consists of only two files. One written in PHP, and the other an R script. The PHP returns a form which uses the GET method to send a variable N to the server. When the form is submitted, the PHP will then execute an R script from the shell using a combination of the PHP command exec() and the Rscript shell command. This command will pass the variable N to the R script. The R script will then execute and save a histogram plot of N normally distributed values to the filesystem. Finally, when the R script is complete, the PHP will return the HTML tag containing the saved images path. First, the PHP file…
<?php // poorman.php echo "<form action='poorman.php' method='get'>"; echo "Number values to generate: <input type='text' name='N' />"; echo "<input type='submit' />"; echo "</form>"; if(isset($_GET['N'])) { $N = $_GET['N']; // execute R script from shell // this will save a plot at temp.png to the filesystem exec("Rscript my_rscript.R $N"); // return image tag $nocache = rand(); echo("<img src='temp.png?$nocache' />"); } ?>
and the R script…
# my_rscript.R args <- commandArgs(TRUE) N <- args[1] x <- rnorm(N,0,1) png(filename="temp.png", width=500, height=500) hist(x, col="lightblue") dev.off()
Finally, to help you visualize the whole process a bit better, below is a screenshot of the results…

Some Issues
This is a very simple example that works fine on a localhost, but there are some BIG issues that need to be resolved before this code is opened up to the web.
- The user input isn’t sanitized
- Only one user can be using this web app at a time
- More care needs to be taken with read/write access
- More care needs to be taken with the relative file paths
- Speed?
- … and I’m sure I’m missing many more
The bottom line is that with less than 20 lines of code we are able to generate R graphics in a browser… everything else is just details.
Thank you!
But theres a problem if someone wants to run R-64bit. (I think this has something to to with the fact, that PHP is a 32bit Software.)
If anyone else expierences this problem, running Rscript trough start ist a possible solution.
exec(“start Rscript my_rscript.R $N”);
To issue 2.: I think, one can handle it with generating a random name in php and send it as an argument to R.
Your blog is very interesting. I just ran into it today. I hope you go back to posting.
The original didn’t work for me for some reason so I changed it a bit:
$cmd = ‘”C:\Program Files\R\R-2.13.2\bin\i386\RScript” C:\PROGRA~2\EASYPH~1.0BE\www\my_rscript.R ‘.$N;
exec($cmd);
instead of:
exec(“Rscript my_rscript.R $N”);
Do you know why the original doesn’t work? (Running EasyPhp 5.4.0 beta on win7)