[请益] PHP call R的问题

楼主: Schematic (小小宝的妈)   2016-01-07 16:27:25
手边的程式希望能让使用者在网页上输入参数,
然后利用R来绘出统计图表和做一些统计运算
再把结果传回到PHP来呈现
目前已经测试过:
1. PHP把参数传给R,并让R根据这个参数来绘图,再由PHP显示 <- ok
2. R 连接数据库,取出资料绘图 <- ok
PHP 连结数据库,取出资料做成表格 <- ok
但是PHP呼叫R,由R根据参数到数据库取资料绘图之后就没下文了
程式撷取如下
PHP部分
<?php
// student_enroll.php
echo "<form action='student_enroll.php' method='get'>";
echo "近<input type='text' value='3' name='N' />来的学生入学人数分析";
echo "<br><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
$str = '"C:\Program Files\R\R-3.2.3\bin\Rscript"' . ' .\student_enroll.R' .
" $N";
$data = shell_exec($str);
echo $data;
// return image tag
$nocache = rand();
echo("<img src='temp.png?$nocache' />");
}
?>
R的部分
library(RODBC)
library(MASS)
library(ggplot2)
library(tidyr)
#从PHP取得参数
args <- commandArgs(TRUE)
set.year <- strtoi(args[1])
print(set.year)
#取得现在是哪一年并转换成中国年
this.year <- strtoi(substring(Sys.time(), 0, 4)) - 1911
#设定数据库连结
print(5)
odbcChannel <- odbcDriverConnect(connection="Driver={SQL
Server};server=127.0.0.1\\servername;database=database_name;
trusted_connection=yes;uid=uid;pwd=pwd")
print(6)
query.result <- sqlFetch(odbcChannel, "table_name")
print(7)
print(query.result)
odbcClose(odbcChannel)
红字以下都没有顺利执行完
现在有质疑是否PHP等待R存取数据库的时间太久了
因为不知道怎么让PHP显示错误讯息
只能用这种土法炼钢法得知程式执行到哪一行之后没有继续
盼望有人可以解惑阿,不然已经卡在这个步骤一个多星期了
感谢
作者: Peruheru (还在想)   2016-01-07 17:36:00
http://www.w3schools.com/php/func_misc_die.asp虽然跟你的错误无关XD回到问题,你遇到的问题可能是服务器逾时查询超过30秒就会被当成执行失败,这数字好像可以调根本之道还是得加速查询才行
作者: MOONRAKER (㊣牛鹤鳗毛人)   2016-01-07 20:58:00
php叫R开始算 算好放在/tmp/res{pid}底下隔30秒再用js叫另一只php去把它打开
楼主: Schematic (小小宝的妈)   2016-01-08 09:11:00
请问哪边可以调整30秒的等待时间呢?我想先试着调整这边
作者: xdraculax (首席怪叔叔)   2016-01-08 11:59:00
set_time_limit
楼主: Schematic (小小宝的妈)   2016-01-08 12:02:00
感谢所有的回答,继续测试中已经更改过系统的等待时间,也试过设定执行时间结果都还是一样>"<

Links booklink

Contact Us: admin [ a t ] ucptt.com