php作为web程序开发的主要语言,应用广泛。R作为一种统计软件,在数学算法的实现上具有良好的可操作性。最近,由于工作的需要,要对一些web应用的数据进行复杂的数学计算,但php本身虽然可以写一些数学算法,但仍难以满足需求,数十行代码的效率抵不上R中的一个函数,经过研究,最终实现了在php的即时访问中调用R进行计算操作,并直接读取计算结果,在web页面中进行显示。大概思路如下:
重点在于php激活R程序运行,并向R传递计算参数,获得结果。
php激活R,可以采用内置函数exec,这样只要在操作系统运行窗口执行的命令都可以在此执行,R执行的命令为(以下均指在windows环境下)
"D:\\Program Files\R\R-2.15.2\bin\x64\R.exe" --vanilla < D:\\test.R out.txt
第一部分为本机的R程序的路径,后边加R软件的option,可自定义,后加要执行的R程序文件,是重点,最后执行输出文件,此文件为指令必须,但对我们没有用处。
为了实现对php页面的每一次访问,因参数不同,分别执行不同的R程序,所以,test.R的程序文件名需要每次访问生成一个,保证每次访问都有一个唯一的R程序文件,在其中使用写文本文件的形式存储参数名和参数值,指定结果文件名,在php页面中指定激活该R文件,在该文件中可以指定调用复杂的固定文件名的R程序文件,运行后生成唯一的结果文本文件,php文件再去读取该文本文件的结果,进行处理进而显示出来,即实现目的。
exec($command,$out1,$out2);
php输出结果中,只要$out2的值为0,即为执行成功。
需要注意的是,文件路径用的反斜杠,在php中反斜杠的特殊的转义符号,生成$command时,需要特别注意输出字符串是否符合要求。另外,对于文件的存储等,尽量使用绝对路径。