Jadual Kandungan
2. 根据自身需要使用里面的一些类" >2. 根据自身需要使用里面的一些类
3. 编写RScript脚本" >3. 编写RScript脚本
4. 编写我们的PHP函数" >4. 编写我们的PHP函数
5. 成功实现" >5. 成功实现
四、失败的原因" >四、失败的原因
Rumah pembangunan bahagian belakang tutorial php PHP中如何调用RScript脚本(附代码)

PHP中如何调用RScript脚本(附代码)

Jul 29, 2016 am 08:33 AM
php

这篇文章主要介绍了PHP中如何调用RScript脚本,有一定的参考价值,感兴趣的朋友可以参考一下,希望对你有所帮助!

由于某个原因,需要在PHP中调用R语音进行绘制图像。经过多方百度,目前大部分解决方案都是:利用PHP中的系统命令函数如exec,system,shell_exec等等来调用RScript脚本,常见的命令行有如下两种

第一种:

exec("RScript " . $your_script_dir . "$your_RScript_file " . $args);    // 里面有printf某个变量
// echo ("RScript " . $your_script_dir . "$your_RScript_file " . $args);
Salin selepas log masuk

第二种:

 system("R --slave < " . $your_RScript_dir . "$your_RScript_file" . " --args " . $args); // 里面有printf某个变量
// echo ("R --slave < " . $your_RScript_dir . "$your_RScript_file" . " --args " . $args);
Salin selepas log masuk

接下来,我们满怀信心地去运行PHP的时候,会发现我们所执行系统命令返回的值是1,也就是失败。但是,我们拿echo出来的语句去cmd窗口执行,发现是可以printf出结果,并且也生成了我想要的图像。这是为什么呢?经过多方百度跟尝试,终于找到解决方案。供大家参考并欢迎大家如果有更好的方法,也在评论区中发文,大家共同努力进步。

一、简单看下失败的调用情况

a1.png这是我在PHP中调用的R脚本的语句,下面是在浏览器中调用的结果。

a111.png

我们再将echo出来的语句,在cmd中执行下。结果如下:

a2.png生成的文件如下:

a3.png

可以看到,我最后想要得到的$plotName是null,也就是没有执行成功,或者没有得到cmd中打印出来的文件信息。

二、解决方法

提供一个PHP插件,名字叫RServe,这个你如果是用Java来调用R语言的,想必并不陌生。现在出了PHP版本的,我们就可以拿过来使用。下载地址:Rserve-php

三、如何使用

当然,该插件有中间也有一些简单的例子,可以自行参考理解。下面放出我的解决方法:本人是基于ThinkPHP5的框架实现的。

1. 我们首先要将它加入到我们的项目中,我把该插件放到我的vendor里。添加如下代码:

require_once ROOT_PATH . &#39;vendor/rserve/autoload.php&#39;;
Salin selepas log masuk

2. 根据自身需要使用里面的一些类

use Sentiweb\Rserve\Connection;            // 连接R服务的类
use Sentiweb\Rserve\Evaluator;             // 简单的理解为:建立连接后返回的处理器
use Sentiweb\Rserve\REXP\Vector;           // 内置的存储容器
Salin selepas log masuk

3. 编写RScript脚本

我们需要将之前所编写的脚本,修改为R语言的函数。格式如下:

RScript <- function(arg1, ..., argN) {
    # code... 请无视这种注释方式,R语言没有注释
    return output    # 该函数的返回值
}
Salin selepas log masuk

为后期我们利用Rserve插件调用。

4. 编写我们的PHP函数

我们为了后期方便调用,将调用RScript脚本的功能统一写到一个函数里面,方便阅读且容易维护。

class Common {
    // $source 表示自己编写的R语言函数文件
    // $file, $cancer:本R函数所需要参数
    function RScript($source, $file, $cancer) {
        $cnx = new Connection(RSERVE_HOST);                    // 与RSERVE_HOST建立连接,一般为自己服务器地址,如果本地,则为localhost
        $eval = new Evaluator($cnx, Evaluator::PARSER_REXP);   // 通过连接,生成处理器,后一个参数决定连接失败时返回错误信息
        $eval->evaluate("source(&#39;$source&#39;)");                  // 类似library,将函数载入R的编程环境中;evaluate计算括号内的R命令
        // 同理,执行R命令,注意括号内是字符串的形式,由于返回的是RServe的Rstring类,为了拿到我想要的信息,通过Vector类的toHTML转为含return信息的标签语言
        $RString = $eval->evaluate("RScript(&#39;$file&#39;, &#39;$cancer&#39;)")->toHTML();    
        preg_match("/$cancer.+.pdf/", $RString, $fileName);    // 提炼信息
        return $fileName[0];                                   // 返回结果
    }
}
Salin selepas log masuk

5. 成功实现

这里我就不展示我的最终结果了,有这需要的同学们可以自己尝试。

四、失败的原因

由于项目时间紧迫,对PHP、R语言熟悉度不高,不明白为什么直接调用命令执行的结果是失败的。有这方面认识的小伙伴们,可以在评论里回复我。以上就是我关于PHP如何调用R语言脚本的全部解决方案。谢谢大家的阅读。

更多相关视频教程请访问 php编程从入门到精通全套视频教程

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

See all articles